动态检测CUDA启用的NVIDIA显卡,然后才初始化CUDA运行时:如何实现?

5
我有一个应用程序,其中包含一个使用CUDA加速的算法。还有一个标准的CPU实现。我们计划将此应用程序发布到各种平台,因此大多数情况下,没有NVIDIA显卡来运行加速的CUDA代码。我想要的是首先检查用户的系统是否有启用CUDA的NVIDIA显卡,如果有,则初始化CUDA运行时。如果系统不支持CUDA,则我想执行CPU路径。这个问题与这个问题非常相似,但我不想使用除纯CUDA运行时之外的任何其他库。 OpenCL是一种替代方案,但在第一个版本中没有足够的时间实现OpenCL版本的算法。如果没有CUDA存在检查,程序肯定会崩溃,因为它找不到CUDA运行时所需的.dll文件,我们肯定不希望出现这种情况。因此,我需要关于如何处理此初始化步骤的建议。

哇..这是一些工作要做啊,伙计。加油! - Shades88
1个回答

5
使用cudaGetDeviceCountcudaGetDeviceProperties调用查找正在运行的系统上的CUDA设备。首先找出有多少个设备,然后循环遍历所有可用设备,并检查属性以决定哪些设备合格。我的意思是“合格”取决于您的应用程序。您是否希望要求特定的计算能力?还是需要一定量的内存?如果有多个设备,您可能希望按某些标准排序,然后设置设备cudaSetDevice。如果没有设备,或者没有足够的设备,那么就退回到CPU代码路径。
我还建议采用一些机制来强制关闭CUDA模式,以防用户的某些环境由于驱动程序问题、旧板或其他原因而无法正常工作。您可以使用命令行选项或环境变量或其他方法...
编辑: 关于DLL,您应该将cudart [whatever].dll与您的应用程序一起打包。这将确保程序启动,并且至少CUDA查询函数将操作。

第一段实际上是对问题的回答。 - lashgar
1
请遵循@Peter的建议,并将cudart*.dll与您的应用程序一起发布。 - Greg Smith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接