NVIDIA engineers used Nsight Systems and Nsight Compute to optimize the Omniverse NuRec neural reconstruction pipeline, a workload that turns multisensor camera and lidar data into simulation-ready 3D scenes for autonomous vehicle and robotics development. The effort cut the interpolate function from 4.184 ms to 83.81 us, a nearly 50x speedup, and reduced the longest renderBackward lidar kernel from 31 ms to 18 ms. The work is detailed in a post by Jackson Marusarz and Martin Bisson published on June 30, 2026.
Profiling the forward pass
The team started with an Nsight Systems profile to establish a baseline for the training loop. The initial assumption was that the rendering kernel would dominate runtime, but the CUDA hardware timeline showed the GPU was often idle or underutilized, with many small kernels being launched. Additional NVTX annotations were added to delineate phases, revealing that collect_gaussian_parameters consumed most of the time before rendering even started. Digging deeper, the interpolate function took the plurality of time at 4.148 ms, driven by many small kernels and memory operations.
The engineers fused those small kernels into a single kernel, reducing the interpolate function to 83.81 us. They also removed excessive cudaStreamSynchronize calls that were delaying the CPU from enqueuing work while the GPU was active. After removing one synchronization point, others became the bottleneck, so the process continued until the CPU could keep the GPU busy, allowing the tiny kernels to run compactly.
Kernel-level optimization
With the application-level bottlenecks addressed, Nsight Systems identified renderBackward as the hottest kernel. Nsight Compute profiling of six instances showed only about 15% occupancy, with both camera and lidar versions allocating 167 registers per thread and the same amount of shared memory per block statically, despite different access patterns. Comparing a lidar kernel as baseline against a camera kernel revealed that camera kernels made about 75% fewer shared memory requests, even though both allocated the same shared memory.
The team split the kernel by sensor type. For each version, they tuned register allocation with the launch_bounds qualifier and adjusted shared memory per block, using the cudaFuncSetCacheConfig runtime API to prefer larger shared memory and smaller L1 cache. After tuning, the lidar kernel dropped to 64 registers per thread and the camera kernel to 128, and both used about half the originally allocated shared memory. Occupancy improved to between 30% and 50%, and the longest lidar kernel runtime fell from 31 ms to 18 ms.
Remaining work
The post notes that a workload imbalance remains, visible in Nsight Compute's PM Sampling section. The first half of the kernel averages 32 active warps, but that tapers off to less than one active warp per cycle for the last several milliseconds. The team is working on this long-tail effect at the time of publication. Both Nsight Systems and Nsight Compute are free to download, and the post encourages developers to use them for their own workloads.
Sources & references
NVIDIA: Optimizing a Neural Reconstruction Pipeline Using NVIDIA Nsight Developer Tools ↗Source consulted: 2026-10-15



