如何在Windows上部署CUDA程序?

如何在Windows上部署CUDA程序?,windows,deployment,cuda,Windows,Deployment,Cuda,我有一个针对cuda、cublas和cudart的程序链接 有没有一种方法可以在不强制用户安装最新的nvidia驱动程序的情况下部署它 当我只是将提到的dll复制到启动路径中时,程序不会启动,并且会抱怨nvcuda.dll中不存在程序。即使我也提供了这个,程序的行为也很奇怪。如果安装了最新的驱动程序,一切正常 相关问题。。。我如何检查cuda是否受支持(+最新),如果不是这样,请退回到我的案例BLAS/LAPACK中?如果我提供DLL,则程序。行为不端,如果我不提供,它甚至可能不会启动 谢谢 是

我有一个针对
cuda
cublas
cudart
的程序链接

有没有一种方法可以在不强制用户安装最新的nvidia驱动程序的情况下部署它

当我只是将提到的dll复制到启动路径中时,程序不会启动,并且会抱怨
nvcuda.dll
中不存在程序。即使我也提供了这个,程序的行为也很奇怪。如果安装了最新的驱动程序,一切正常

相关问题。。。我如何检查cuda是否受支持(+最新),如果不是这样,请退回到我的案例BLAS/LAPACK中?如果我提供DLL,则程序。行为不端,如果我不提供,它甚至可能不会启动


谢谢

是否尝试不链接CUDA DLL,而是动态加载并调用cudaGetDeviceCount()?像这样:

typedef cudaError_t (*FnGetDeviceCount )    (   int *   count    ) ;
HMODULE hCuda=LoadLibrary("cudart32_40_17.dll");
if( !hCuda ) return ; // ERROR: cannot load dll, DllMain must have failed because cudart only depends on Kernel dll implicitly. Or cannot find dll in curent directory or in the path.
FnGetDeviceCount fnGetDeviceCount=(FnGetDeviceCount)GetProcAddress(hCuda, "cudaGetDeviceCount");
if( !fnGetDeviceCount) return; // ERROR: cudart has no entry point for cudaGetDeviceCount ?!
int count = 0;
if( cudaSuccess != (*fnGetDeviceCount)(&count) ) return ;// ERROR: we don't wanna use CUDA if even device enumeration fails
if( !count ) return; // FALLBACK: CUDA has no devices, don't try to use it, fallback to some other BLAS
这很不方便,因为您不能只链接cudart或其他库,但它可能允许您回退到BLAS,而用户不会看到可怕的启动错误。免责声明:我没有测试或编译这段代码,请让我们知道你是否使用它,它是否工作:)


建议您必须从特定版本的CUDA工具包(例如cudart64_40_17.dll)重新分发dll,这样就可以了

有一个函数,你可以用来在运行时检查你是否有一个设备。对,但我需要所有DLL在启动之前到位-不是吗?所以我必须给他们提供我的程序。但是如果我提供的DLL和安装的DLL之间存在版本冲突。。。事情开始变得糟糕起来。