程序检查CUDA存在需要CUDA
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库都在可执行文件中吗?
所以情况是:
- 我的应用程序已编译&发送到计算机
- 计算机可以:
- 运行windows, linux(我的应用程序与系统兼容)
- 是否有gpu
- 是否有nvidia gpu
- 是否安装CUDA
- 我的应用程序应该返回
true
只有当2.3和2.4是积极的(GPU与CUDA)
作为开场白,我认为你编辑的步骤顺序和数量是不正确的。应该是:
- 程序启动并尝试加载运行时API库
- 如果运行库存在,尝试使用它枚举设备。
如果步骤1失败,您没有必要的运行时支持,CUDA不能使用。如果2失败,系统中没有兼容的驱动程序和GPU, CUDA无法使用。如果他们都通过了,你就可以走了。
在步骤1中,您希望在Linux上使用类似dlopen
的东西并处理返回状态。在Windows上,你可能想使用DLL延迟加载机制(对不起,不是Windows程序员,不能告诉你更多)。
在这两种情况下,如果库加载,然后通过适当的主机操作系统API获取cudaGetDeviceCount
的地址并调用它。它告诉你是否有兼容的gpu可以枚举。在你找到一个明显可用的GPU后,你要做什么取决于你。我会检查计算状态并尝试在其上建立上下文。这将确保一个功能齐全的运行时/驱动程序组合存在,一切都工作。
链接到stackoverflow: detecting-nvidia-gpu -without-cuda的其他帖子这显示了检查cuda api是否可用和可访问的整个序列。
我认为仅使用软件没有可靠的方法来确保GPU是否支持Cuda,特别是如果我们考虑到Cuda是基于驱动程序的技术,如果驱动程序说Cuda不存在,那么对于操作系统来说Cuda不存在。
我认为最好的方法是老式的方式,考虑一下这个简单的网页,你会得到一个更可靠的答案。
为您的应用程序创建一个插件,动态链接到相关cuda库并执行检查。
然后尝试加载插件并运行它的检查。
-
如果插件加载失败,那么你没有安装cuda库,所以你可以假设
False
-
如果插件加载成功,那么你已经安装了CUDA-lib并可以执行检查,硬件是否支持CUDA。
作为一个迟来的附加回答:
我正在努力解决同样的问题(检测cuda安装而不使用它),到目前为止我的解决方案是
- 确保
LoadLibraryA("nvcuda.dll") != nullptr
(告诉你几乎只有当有一个nvidia卡安装,虽然) - 检查环境变量CUDA_PATH(或在我的情况下,CUDA_PATH_V8_0),因为这似乎是由cuda安装设置的:
const char * szCuda8Path = std::getenv("CUDA_PATH_V8_0");
(必须是!= nullptr)
使用cudaGetDeviceCount()
来了解计算机是否支持cuda。
根据这个线程,你不能静态链接cudart.dll
。
有一些解决方法:将CUDA运行时作为资源嵌入到可执行文件中,然后在程序运行时提取它,然后动态链接。
您还可以使用nvidia-smi
查看计算机上是否安装了CUDA
- C++模板来检查友元函数的存在
- 编译时未启用intel oneApi CUDA支持
- 既然存在危险,为什么项目要使用-I include开关
- 我们可以访问一个不存在的联盟的成员吗
- 在cuda线程之间共享大量常量数据
- C++:对不存在的命名空间使用命名空间指令
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- Cuda C++:设备上的Malloc类,并用来自主机的数据填充它
- C++quit()函数中可能存在作用域问题
- C++擦除(如果存在)
- CUDA内核和数学函数的显式命名空间
- g++ 说函数不存在,即使包含正确的标头
- CUDA opencv 构建失败 - 缺少实际存在的文件
- 如何使用共享内存在CUDA中转置巨大的任意矩阵
- 在使用按位移位而不是 mod 时,CUDA 中存在显着的时差
- CUDA计算后数组中存在重复值
- 没有CUDA代码的线程中存在CUDA分段错误
- Cuda Toolkit目录不存在
- 程序检查CUDA存在需要CUDA
- 在Visual Studio 2010 math.h和CUDA rint的等效版本中不存在rint