动态检测启用CUDA的NVIDIA卡,然后初始化CUDA运行时:怎么办?

时间:2012-09-24 15:59:43

标签: cuda gpu cpu gpgpu

我有一个应用程序,它有一个算法,用CUDA加速。它还有一个标准的CPU实现。我们计划为各种平台发布此应用程序,因此大多数时候,没有NVIDIA卡可以运行加速的CUDA代码。我想要的是首先检查用户的系统是否具有支持CUDA的NVIDIA卡,如果是,则在之后初始化CUDA运行时。如果系统不支持CUDA,那么我想执行CPU路径。 This问题与我的问题非常相似,但我不想使用普通CUDA运行时以外的任何其他库。 OpenCL是另一种选择,但没有足够的时间为第一个版本实现OpenCL版本的算法。没有任何CUDA存在检查,程序肯定会崩溃,因为它无法找到CUDA运行时所需的.dll,我们当然不希望这样。所以,我需要有关如何处理这个初始化步骤的建议。

1 个答案:

答案 0 :(得分:3)

使用呼叫cudaGetDeviceCountcudaGetDeviceProperties查找正在运行的系统上的CUDA设备。首先找出有多少,然后循环遍历所有可用设备,并检查属性以确定哪些符合条件。 “qualify”的含义取决于您的申请。您想要一定的计算能力吗?还是需要一定的记忆?如果有多个设备,您可能希望对某些条件进行排序,然后设置设备cudaSetDevice。如果没有设备,或者没有足够的设备,则返回CPU代码路径。

我还建议使用某种机制强制关闭CUDA模式,以防某些用户的环境由于驱动程序问题而无法工作,或者是旧板或其他东西。您可以使用命令行选项,环境变量或其他任何内容......

EDITING: 关于DLL,您应该将cudart [whatever] .dll打包到您的应用程序中。这将确保程序启动,至少CUDA查询功能将运行。