NVEnc GPU encoding with VRD - CUDA vs DirectX11


In the GPU Encoders section of TOOLS, there is a setting for NVEnc hardware surface type. Default at install is "Auto" with the other choices being forced CUDA or DirectX11.
Does the setting matter?
Running tests, I can find no effect for this setting. Every metric is the same during encode and by eye I can detect no difference in the output.
Test sample is a 2hr movie, 720p, h264, 59fps cut to 84 mins and being recoded to 720p, 29fps NVEnc CRF18
Hardware is a Ryzen 5900X and GeForce 1650 Super video card (Turing DirectX12 GPU)
Drivers are the very latest for AMD chipset and Nvidia GeForce

Runs were made with the same CRF18 profile - only change was from "Auto" to "CUDA" and "DirectX11"
For all 3 runs the files have identical metrics:
Final file size - all 3 the same to last digit? - 1,673,484 KB
File total bitrate - all the same to the last digit? - 2,758 kb/s
VRD encoding fps - all the same to 2 decimals? - 779.83 fps
VRD encoding time - all the same to the second - 191 secs
CPU load is balanced in a range of 65-70% for all 3 modes
GPU load is the same range for all 3 modes - 70-78%

Viewing sample scenes from each file using MPHC-BE and a 65" 4k monitor, I can see no difference in quality between the 3 modes.

Any thoughts on why this is so?
Is the setting in VRD not really functional?
Is it only for older Nvidia NVEnc engines (Pascal, Keppler) ?
Is the Turing GPU accepting VRD's API calls and running them as DirectX12/CUDA11? (could explain the high & balanced usage of both CPU & GPU which is a feature of newer NVEnc )


Staff member
Frankly, there isn't much documentation from NVidia about the differences between CUDA vs DirectX11 so we implemented both so that in case applications external to VRD triggered an issue with one the user could fall back to the other. We haven't heard of this being an issue, so that reason is probably for naught. When we first introduced NVEnc (2 yrs ago) one or two users reported increased performance with DirectX vs CUDA. Whether this was system- or GPU family-specific, I don't really know. FYI, I use a 1650 on my Ryzen 3950x and a 1600 on my 3950 system. Interesting, the 1600 will encode interlaced H264 while the 1650 won't.
Top Bottom