2013-02-13 359 views
0

假设我编译一个使用CUDA工具包的程序,并且在不支持所需计算能力的硬件上运行程序,或者甚至没有支持CUDA接口的NVIDIA GPU,我如何从编程级?为了退回到CPU程序或显示错误消息。我如何知道CUDA是否可以使用?

回答

3

如果您已经安装了已安装示例的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); 
} 
+0

您不需要静态库,但您确实需要将Cudart DLL/SO与您的应用程序一起分发。 EULA特别允许为此目的重新分配。 – Tom 2013-02-14 07:54:30

相关问题