NVIDIA describió en su blog para desarrolladores un caso extenso de optimización de rendimiento sobre NuRec, el pipeline de reconstrucción neural que forma parte de NVIDIA Omniverse. El objetivo del sistema es construir representaciones 3D de alta fidelidad de entornos reales a partir de datos de cámaras y lidar capturados por vehículos autónomos y plataformas de robótica.
¿Para qué sirve NuRec?
NuRec combina técnicas de renderizado neural, como el Gaussian splatting, con una tubería de renderizado y simulación acelerada por GPU. Con esas piezas produce reconstrucciones muy realistas de escenas dinámicas que luego pueden reproducirse, inspeccionarse o servir como base para generar datos sintéticos y entrenar sistemas de percepción. Es una pieza clave en el desarrollo de la llamada physical AI, donde los modelos deben validarse en réplicas fieles del mundo antes de salir a la calle.
El problema es el costo computacional. Reconstruir capturas incluso relativamente cortas podía tomar de una hora a varias horas al inicio del trabajo. La meta declarada por el equipo es más ambiciosa: reconstrucción en tiempo real, con una captura de 30 segundos procesada en aproximadamente 30 segundos.
¿Qué hicieron con Nsight Systems?
Nsight Systems es la herramienta de perfilado a nivel de plataforma que permite visualizar CPU, GPU, red y almacenamiento en una sola línea de tiempo. El primer perfil mostró que la GPU estaba subutilizada gran parte del tiempo y que la aplicación lanzaba muchos más kernels chicos de lo esperado. Al agregar anotaciones NVTX en las distintas fases del forward pass, el equipo identificó que la función collect_gaussian_parameters consumía la mayor parte del tiempo antes de que arrancara el renderizado.
Más adentro, la función interpolate marcaba 4.148 ms y lanzaba muchos kernels pequeños con operaciones de memoria que congestionaban la GPU. Al fusionar todo ese trabajo en un solo kernel, el tiempo cayó a 83.81 μs, cerca de un speedup 50x en esa sección específica.
¿Y las sincronizaciones excesivas?
Después detectaron llamadas largas a cudaStreamSynchronize que impedían a la CPU encolar trabajo mientras la GPU seguía ocupada. El resultado eran huecos de utilización visibles en la timeline. Al remover un punto de sincronización, el siguiente pasaba a ser el cuello de botella, y así sucesivamente hasta que la CPU pudo encolar de forma eficiente y los kernels pequeños corrieron de forma compacta.
Kernel optimization con Nsight Compute
Nsight Compute es la herramienta específica para perfilar y optimizar kernels individuales. Al analizar el kernel renderBackward, el más pesado del pipeline, encontraron solo ~15% de ocupación y comportamientos muy distintos según procesara datos de cámara o de lidar. Ambos allocaban 167 registros por thread pese a que las cámaras hacían 75% menos accesos a memoria compartida.
La decisión fue dividir el kernel en dos versiones, una para cámara y otra para lidar. Con launch_bounds y cudaFuncSetCacheConfig afinaron los registros y la memoria compartida por bloque. El resultado combinado con el resto de optimizaciones subió la ocupación al 30-50% y redujo a la mitad el runtime de los kernels más pesados.
Contexto para makers y equipos de robótica en LatAm
Para talleres y laboratorios que trabajan en robótica autónoma o percepción con lidar en Chile o LatAm, el mensaje operativo es directo. Nsight Systems y Nsight Compute son gratuitos y funcionan sobre cualquier GPU NVIDIA moderna, incluidos los kits Jetson Orin usados en robótica embarcada. Un proyecto de reconstrucción con datos de una cámara ZED o un lidar Livox puede correrse en un Jetson AGX Orin de USD 1999, y el mismo tipo de perfilado descrito por NVIDIA aplica sin cambios.
Los detalles completos del pipeline y las optimizaciones adicionales que el equipo sigue trabajando, incluyendo el balance de carga y los efectos de long-tail en warps, están en el blog original de NVIDIA Developer.




