[英]Program to check CUDA presence needs CUDA?
我写了一个简单的应用程序来检查计算机上是否有NVIDIA CUDA。 如果找到支持CUDA的设备,它只显示true 。
我将应用程序发送到第二台PC,并且应用程序没有运行 - 出现了一个对话框,显示找不到cudart.dll 。 我想检查CUDA是否存在,它需要CUDA来做:)
我正在使用CUDA 5.0,VS2012,VC ++ 11,Windows 7。
我可以用一种方式编译应用程序,所有CUDA库都在可执行文件中吗?
所以场景是:
true
(带CUDA的GPU) 作为开场评论,我认为编辑中的步骤顺序和数量不正确。 它应该是:
如果步骤1失败,则您没有必要的运行时支持,并且无法使用CUDA。 如果2失败,则系统中不存在兼容的驱动程序和GPU,并且无法使用CUDA。 如果他们都过去了,你很高兴。
在步骤1中,您希望在Linux上使用类似dlopen
东西并处理返回状态。 在Windows上,您可能希望使用DLL延迟加载机制 (对不起,不是Windows程序员,不能告诉您更多)。
在这两种情况下,如果库加载,则通过适当的主机OS API获取cudaGetDeviceCount
的地址并调用它。 这告诉您是否有可以枚举的兼容GPU。 在找到明显可用的GPU后,您所做的就由您决定。 我会检查计算状态并尝试在其上建立一个上下文。 这将确保存在功能齐全的运行时/驱动程序组合并且一切正常。
我认为仅使用软件没有可靠的方法来确保GPU是否具有Cuda功能,特别是如果我们认为Cuda是基于驱动程序的技术而且如果驱动程序说那么操作系统Cuda不存在Cuda不存在。
我认为最好的方法是采用旧时尚的方式,考虑检查这个简单的网页 ,你会得到一个更可靠的答案。
为您的应用程序创建一个动态链接到相关CUDA库并执行检查的插件。
然后尝试加载插件并运行它的检查。
如果插件无法加载,那么您没有安装CUDA库,因此您可以假设为False
如果插件成功加载,那么你安装了CUDA-libs并且可以执行检查,硬件是否也支持CUDA。
链接到stackoverflow上的不同帖子: detection-nvidia-gpus-without-cuda这显示了检查cuda api是否可用且可访问的整个序列。
作为一个迟到的回答:
我正在努力解决同样的问题(检测cuda安装而不使用它),到目前为止我的解决方案是
LoadLibraryA("nvcuda.dll") != nullptr
(仅在安装了nvidia卡的情况下告诉你) const char * szCuda8Path = std::getenv("CUDA_PATH_V8_0");
(必须是!= nullptr) 使用cudaGetDeviceCount()
来了解计算机是否具有CUDA功能。
根据这个帖子 ,你不能静态链接cudart.dll
。
有一些解决方法:将CUDA运行时作为资源嵌入可执行文件中,然后在程序运行时将其解压缩,然后动态链接。
您还可以使用nvidia-smi
查看是否在计算机上安装了CUDA。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.