CUDA ISP API performance
| CUDA ISP for NVIDIA Jetson |
|---|
| CUDA ISP for NVIDIA Jetson Basics |
| Getting Started |
| User Manual |
| GStreamer |
| Examples |
| Performance |
| Contact Us |
Library API performance
To measure the CUDA ISP API performance, we built a simple example (provided upon request) that iterates over the Apply methods for each algorithm and records performance metrics for each iteration. We measured the duration of each algorithm's Apply method. We also measured CPU, CPU RAM, GPU, and GPU RAM usage for the complete processing pipeline iterating at 30fps. We ran the experiments on both 1080p and 4K buffers. We also ran the experiments on the Jetson Orin Nano, Jetson Orin NX, Jetson Thor T5000, and Jetson AGX Orin.
Software performance measurement tools
- We measured the duration of each
Applymethod separately using thechronolibrary. - We mainly used
sys/times.hlibrary to obtain the CPU usage. However, we used theproc/statusfile to obtain a secondary verification measure. - We read the
/proc/self/statusfile to obtain the CPU RAM usage. - We used
tegrastatsto obtain the GPU usage. - We used
cudaMemGetInfofrom CUDA to measure GPU RAM usage.
Every measurement is averaged over 100 iterations. The iterations are timed to run at 30 iterations per second.
Hardware setup
| Platform | JetPack Version | Power Mode | GPU Frequencies | CUDA Version |
|---|---|---|---|---|
| Thor T5000 | 7.2 | MAXN Performance (NVP Model 0) | 1575000000 | 13.0 |
| AGX Orin 32G | 6.2 | MAXN Performance (NVP model 3) | 1300500000 | 12.6 |
| Orin Nx 16GB | 6.2 | MAXN Performance (NVP model 0) | 918000000 | 12.6 |
| Orin Nano 8GB | 6.2 | MAXN_SUPER Mode (NVP model 2) | 1020000000 | 12.6 |
For each system, we also used jetson_clocks to maximise the device clock frequency and thus the performance.
Results
The following table summarises CUDA ISP's performance results.
| Algorithm | Jetson Thor T5000 | Jetson AGX Orin | Jetson Orin NX | Jetson Orin Nano | ||||
|---|---|---|---|---|---|---|---|---|
| Buffer size | 1080p | 4K | 1080p | 4K | 1080p | 4K | 1080p | 4K |
| Duration (ms) Kernel Launch -> Synchronize | ||||||||
| CudaShift | 0.27 | 0.52 | 0.42 | 0.78 | 0.66 | 2.08 | 0.62 | 2.30 |
| CudaDebayer | 0.29 | 0.44 | 0.39 | 0.68 | 0.60 | 1.44 | 0.57 | 2.03 |
| CudaWhiteBalancer (Gray World Algorithm) | 0.34 | 0.70 | 0.46 | 0.78 | 0.67 | 1.41 | 0.63 | 2.06 |
| CudaWhiteBalancer (Histogram Stretch Algorithm) | 0.38 | 0.72 | 0.50 | 0.97 | 0.81 | 1.60 | 0.77 | 3.03 |
| Framerate (fps) | ||||||||
| CudaShift | 3496 | 1908 | 2375 | 1282 | 1522 | 550 | 1607 | 434 |
| CudaDebayer | 3424 | 2247 | 2570 | 1481 | 1647 | 469 | 1754 | 491 |
| CudaWhiteBalancer (Gray World Algorithm) | 2967 | 1430 | 2188 | 1283 | 1503 | 451 | 1592 | 485 |
| CudaWhiteBalancer (Histogram Stretch Algorithm) | 2631 | 1388 | 1984 | 1029 | 1218 | 368 | 1300 | 330 |
| CPU usage (%) | ||||||||
| CudaShift | 0.512 | 0.519 | 0.124 | 0.228 | 0.321 | 0.407 | 0.428 | 1.28 |
| CudaDebayer | 0.507 | 0.519 | 0.136 | 0.254 | 0.339 | 0.416 | 0.438 | 1.23 |
| CudaWhiteBalancer (Gray World Algorithm) | 0.507 | 0.512 | 0.140 | 0.182 | 0.224 | 0.634 | 0.290 | 0.76 |
| CudaWhiteBalancer (Histogram Stretch Algorithm) | 0.519 | 0.514 | 0.142 | 0.191 | 0.227 | 0.730 | 0.315 | 0.80 |
| CPU RAM (MB) | ||||||||
| CudaShift | 111.8 | 111.8 | 42.1 | 42.1 | 42.8 | 42.1 | 133.5 | 211.6 |
| CudaDebayer | 96.7 | 96.8 | 30.6 | 30.7 | 31.2 | 35.3 | 117.8 | 183,8 |
| CudaWhiteBalancer (Gray World Algorithm) | 102.6 | 102.6 | 34.6 | 34.7 | 35.4 | 31.1 | 123.7 | 187,7 |
| CudaWhiteBalancer (Histogram Stretch Algorithm) | 111.1 | 111.1 | 53.3 | 41.4 | 42.1 | 42.6 | 130,5 | 206.3 |
| GPU usage (%) ** | ||||||||
| CudaShift+CudaDebayer+CudaWhiteBalancer | 1.48 | 6.72 | 1.15 | 4.07 | 2.73 | 10.38 | 2.50 | 9.51 |
| GPU RAM (MB) | ||||||||
| CudaShift | 112.7* | 142.7* | 13.9 | 11.1 | 11.3 | 9.2 | 15.6 | 11.8 |
| CudaDebayer | 110.7* | 134.7* | 0.97 | 1.0 | 1.2 | 3.6 | 1.2 | 1.1 |
| CudaWhiteBalancer (Gray World Algorithm) | 118.7* | 154.7* | 3.1 | 4.0 | 3.5 | 1.4 | 9.6 | 3.8 |
| CudaWhiteBalancer (Histogram Stretch Algorithm) | 118.7* | 154.7* | 19.9 | 11.6 | 11.1 | 11.9 | 15.1 | 20 |
*: On the Jetson Thor T5000, RAM usage is consistently reported above 100 MB when GPU acceleration is used. GPU utilization on the Thor T5000 is collected using NVML, while on the other evaluated platforms it is obtained from the filesystem-based GPU load metrics.
**: Using Nsight Systems (nsys), GPU usage is calculated by adding the execution time of the CUDA GPU kernels and dividing the resulting total by the target period at 30 FPS framerate.