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