I built a DLL using CUDA 9.2 with a few functions to do accelerated computing. A test application and Matlab were used to verify the DLL behaved correctly on my machine (with 2 Titan Xp) and another machine (with 2 Titan Black). When given to a colleague, the DLL always generates the cudaErrorInsufficientDriver error when setting the GPU or creating a stream even though we have verified the drivers are up to date.
My colleagues computer has a Quadro 2000 used only for display and a Titan Black used for processing. The DLL chooses the Titan Black for processing, but still receives the cudaErrorInsufficientDriver error. We have also tried removing the Quadro 2000 from the list of CUDA devices in the Manage 3D settings of the NVIDIA control panel.
Is it possible that the existence of a CUDA card with a compute capability of 2.1 running CUDA 9.2 will cause this error since CUDA 2.x was deprecated in 9.2? If so, what are my options? If not, any other reasons why we may be receiving this error? Thanks
It’s confusing to mix terminology “CUDA 9.2” and “CUDA 2.x”
Instead you should refer to it as CUDA 9.2 and a CUDA device with compute capability 2.x
Yes, it’s possible to get that error in this scenario.
You may be able to work around this on the machine with the Quadro 2000 by using CUDA_VISIBLE_DEVICES=“0” environment variable when you launch your application. However that machine will still need a GPU driver installed that supports CUDA 9.2. Based on the error you are receiving, that appears to be the case.
You will still not be able to use both at the same time, if you start compute on the Quadro it will claim the other GPU doesn’t exist and can’t have a context. But if you init on the Titan first, then it will claim the Quadro is AWOL.
The other way is to not intermix 2.x and anything newer.
The problem is, we tend to use older GPUs for display only (e.g. not CUDA processing) and the newer card for processing. So, it would be nice if disabling CUDA in manage 3D settings for older cards would be supported in this way.
There is older, and there is way too old. Older GPUs are fine as long as you do not use GPUs that are so old that they are unsupported by modern driver packages.
As long as complex visualizations are not part of the use case, my usual recommendation is to use a modern low-end GPU for display purposes along with a modern high-end computing workhorse GPU. The retail price for such low-end GPUs (currently the GT 1030, for example) is typically around $85.