为什么OpenCL没有找到任何设备?

时间:2015-05-14 19:48:35

标签: c 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

请让我知道其他信息可能有助于解决这个问题。

2 个答案:

答案 0 :(得分:1)

您无法确定它没有找到设备,因为您还没有正确检查返回值。 more可以返回5个值(clGetDeviceIDs,具体取决于您的OpenCL版本):

  • CL_SUCCESS如果函数执行成功。
  • CL_INVALID_PLATFORM如果平台不是有效平台。
  • CL_INVALID_DEVICE_TYPE如果device_type不是有效值。
  • CL_INVALID_VALUE如果num_entries等于零且device_type不为NULL或者num_devices和device_type都为NULL。
  • 如果没有找到与device_type匹配的OpenCL设备,则
  • CL_DEVICE_NOT_FOUND

您应该检查err值,以确保CL_DEVICE_NOT_FOUND确实存在。

同样,您应该使用clGetPlatformIDsnum_platforms值。您选择的平台可能没有有效的设备,但另一个平台可以。

答案 1 :(得分:0)

确保安装了32位和64位opencl驱动程序。如果您的应用程序是64位,但只安装了32位驱动程序,则无法找到该设备。

您可以使用我的应用检查已安装的设备: https://github.com/zbendefy/opencl-z/blob/master/opencl_z_1_1b.jar