0
假设我编译一个使用CUDA工具包的程序,并且在不支持所需计算能力的硬件上运行程序,或者甚至没有支持CUDA接口的NVIDIA GPU,我如何从编程级?为了退回到CPU程序或显示错误消息。我如何知道CUDA是否可以使用?
假设我编译一个使用CUDA工具包的程序,并且在不支持所需计算能力的硬件上运行程序,或者甚至没有支持CUDA接口的NVIDIA GPU,我如何从编程级?为了退回到CPU程序或显示错误消息。我如何知道CUDA是否可以使用?
如果您已经安装了已安装示例的CUDA Toolkit,我建议您查看deviceQuery项目。这显示了一个关于如何查询设备的属性的例子,例如Capability Major/Minor版本号。
一小段附:
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.%d\n", driverVersion/1000, (driverVersion%100)/10, runtimeVersion/1000, (runtimeVersion%100)/10);
printf(" CUDA Capability Major/Minor version number: %d.%d\n", deviceProp.major, deviceProp.minor);
至于如果系统没有GPU,你可以使用下面虽然我相信你需要有在这一点静态库的代码片段。
int deviceCount = 0;
cudaError_t error_id = cudaGetDeviceCount(&deviceCount);
if (error_id != cudaSuccess)
{
printf("cudaGetDeviceCount returned %d\n-> %s\n", (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 CUDA\n");
}
else
{
printf("Detected %d CUDA Capable device(s)\n", deviceCount);
}
您不需要静态库,但您确实需要将Cudart DLL/SO与您的应用程序一起分发。 EULA特别允许为此目的重新分配。 – Tom 2013-02-14 07:54:30