2015-05-14 31 views
0

我一直在搞OpenCL,它似乎沒有檢測到我有一臺設備在我的電腦中使用(我這樣做)。爲什麼OpenCL找不到任何設備?

這裏輸入dxdiag結果:

enter image description here

這裏是我的代碼,在錯誤的提高,檢查我的機器上可用的設備數量的第一部分。

cl_platform_id platform; 
cl_uint num_devices; 
cl_int err; 

//get first platform 
err = clGetPlatformIDs(1, &platform, NULL); 

if (err < 0){ 
    perror("Couldn't find any platforms"); 
    exit(1); 
} 

//determine number of devices: ERROR RAISED AS RESULT OF THIS 
err = clGetDeviceIDs(platform, CL_DEVICE_TYPE_ALL, 1, NULL, &num_devices); 

if (err < 0){ 
    perror("Couldn't find any devices"); 
    exit(1); 
} 

這是該代碼的輸出: enter image description here

當我打印設備的數量也發現,與

printf("Found %d devices", num_devices);

它給出了同樣數量的每次:

enter image description here

請讓我知道其他信息可能有助於弄清楚這一點。

+0

不打印*無符號*用'%D'值,使用'%u'。請參閱['printf'](http://www.cplusplus.com/reference/cstdio/printf/) –

+0

您的第一個平臺可能是平臺0,而不是1.無論如何,您應該檢查所有平臺。 – DarkZeros

回答

1

您不能確定它沒有找到設備,因爲您沒有正確地檢查返回值。有5個值(more,這取決於你的OpenCL版本),其clGetDeviceIDs可以返回:

  • CL_SUCCESS如果成功執行的功能。
  • CL_INVALID_PLATFORM如果平臺不是有效的平臺。
  • CL_INVALID_DEVICE_TYPE如果device_type不是有效值。
  • CL_INVALID_VALUE如果num_entries等於零且device_type不爲NULL或者如果num_devices和device_type都爲NULL。
  • CL_DEVICE_NOT_FOUND如果找不到匹配device_type的OpenCL設備。

您應該檢查您的err值,以確保CL_DEVICE_NOT_FOUND實際上是這種情況。


同樣的,你應該使用clGetPlatformIDs提供num_platforms值。您選擇的平臺可能沒有有效的設備,但是其他平臺可以。