我有一个应用程序,它有一个算法,用 CUDA 加速。它还有一个标准的 CPU 实现。我们计划针对各种平台发布此应用程序,因此大多数情况下,不会有 NVIDIA 卡来运行加速的 CUDA 代码。我想要的是首先检查用户的系统是否具有启用 CUDA 的 NVIDIA 卡,如果有,则在之后初始化 CUDA 运行时。如果系统不支持CUDA,那么我要执行CPU路径。这个问题与我的非常相似,但我不想使用普通 CUDA 运行时以外的任何其他库。OpenCL 是一种替代方案,但没有足够的时间为第一个版本实现该算法的 OpenCL 版本。如果没有任何 CUDA 存在检查,程序肯定会崩溃,因为它找不到 CUDA 运行时所需的 .dll,我们当然不希望这样。所以,我需要关于如何处理这个初始化步骤的建议。
问问题
994 次
1 回答
5
使用调用cudaGetDeviceCount
和cudaGetDeviceProperties
查找正在运行的系统上的 CUDA 设备。首先找出有多少,然后遍历所有可用的设备,并检查属性以确定哪些符合条件。我所说的“合格”取决于您的申请。您是否需要一定的计算能力?还是需要一定的内存?如果有多个设备,您可能希望根据某些条件进行排序,然后设置设备cudaSetDevice
。如果没有设备,或者没有足够的设备,则回退到 CPU 代码路径。
我还建议使用一些机制来强制关闭 CUDA 模式,以防某些用户的环境由于驱动程序问题、旧板或其他原因而无法正常工作。您可以使用命令行选项、环境变量或其他任何...
编辑:关于 DLL,您应该将 cudart[whatever].dll 与您的应用程序一起打包。这将确保程序启动,并且至少 CUDA 查询功能将运行。
于 2012-09-24T17:17:10.727 回答