2013-02-13 97 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

相關問題