假设我编译了一个使用CUDA工具包的程序,并且我在不支持所需计算功能的硬件上运行该程序,或者可能甚至没有支持CUDA接口的NVIDIA GPU,那么我如何从编程级别知道呢?以便回退到CPU过程或显示错误消息。
如果您已经安装了带有示例的CUDA Toolkit,我建议您查看deviceQuery项目。这显示了一个关于如何在设备中查询属性(如主要/次要功能版本号)的示例。
附短片:
cudaSetDevice(dev);
cudaDeviceProp deviceProp;
cudaGetDeviceProperties(&deviceProp, dev);
printf("nDevice %d: "%s"n", dev, deviceProp.name);
// Console log
cudaDriverGetVersion(&driverVersion);
cudaRuntimeGetVersion(&runtimeVersion);
printf(" CUDA Driver Version / Runtime Version %d.%d / %d.%dn", driverVersion/1000, (driverVersion%100)/10, runtimeVersion/1000, (runtimeVersion%100)/10);
printf(" CUDA Capability Major/Minor version number: %d.%dn", deviceProp.major, deviceProp.minor);
至于如果系统没有GPU,你可以使用下面的代码片段,尽管我认为你需要有静态库。
int deviceCount = 0;
cudaError_t error_id = cudaGetDeviceCount(&deviceCount);
if (error_id != cudaSuccess)
{
printf("cudaGetDeviceCount returned %dn-> %sn", (int)error_id, cudaGetErrorString(error_id));
exit(EXIT_FAILURE);
}
// This function call returns 0 if there are no CUDA capable devices.
if (deviceCount == 0)
{
printf("There are no available device(s) that support CUDAn");
}
else
{
printf("Detected %d CUDA Capable device(s)n", deviceCount);
}