CUDA Application Redistribution

Hello,

I recently built an application using the CUDA 6.5 feature with OpenCV 4.9 and i have run into a fatal error. The error occurs during redistribution of the application. The error is : r6010() abort error. I have included all required dependencies for opencv and for NVIDIA . I have also included the nvcuda.dll with the application but it still errors out. I found that if i update the driver of the video card the application works without issue. I was under the impression that the CUDA application is portable with just the nvcuda.dll. Is that not correct? As a last resort I could have the application users update the driver but i was hoping to save them the hassle.

The nvcuda.dll in use must match the installed driver version. You can’t redistribute a random nvcuda.dll and expect it to be used with an arbitrary driver. An approporiate nvcuda.dll should be automatically installed by the driver install process.

Since a GPU can’t be used for a compute purpose without a properly installed NVIDIA driver (currently, AFAIK), there is little point (I think) in redistributing nvcuda.dll.

Furthermore, as a general rule for CUDA, the CUDA version in use dictates a particular minimum driver version. For example, to use CUDA 6.5, the installed driver must be an r340 driver or newer. On Windows this would typically be 340.62 or newer, and on linux it would typically be 340.29 or newer.

Redistribution of CUDA deliverables with a CUDA application should only be necessary if:

  1. You are using the runtime API or one of the ancillary libraries
  2. The runtime libraries in question (e.g. cudart.lib/cudart.dll) are not statically linked to the application.

In this case, the runtime library deliverables that you might need to redistribute are covered in the EULA:

http://docs.nvidia.com/cuda/eula/index.html#attachment-a

You’ll note that nvcuda.dll is not listed there.

Thanks for the response. I will just have the user verify that the driver version is 340.62 or newer. Thanks again.