为什么 OpenCL 找不到任何设备?
Why isn't OpenCL finding any devices?
我一直在摆弄 OpenCL,它似乎没有检测到我有一个设备可以在我的计算机中使用(我检测到)。
这是 dxdiag 的结果:
这是我的代码的第一部分,这里出现错误,检查我的机器上可用的设备数量。
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);
}
这是这段代码的输出:
当我打印设备数量时,它 是 发现
printf("Found %d devices", num_devices);
每次都给出相同的数字:
请告诉我还有哪些其他信息可能有助于解决这个问题。
您不能确定它没有找到设备,因为您没有正确检查 return 值。有5个值(more, depending on your OpenCL version) that clGetDeviceIDs
可以return:
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
值。您选择的平台可能没有有效的设备,但另一个平台有。
确保安装了 32 位和 64 位 opencl 驱动程序。如果你的应用是64位的,但只安装了32位的驱动,会导致找不到设备。
您可以使用我的应用程序检查已安装的设备:
https://github.com/zbendefy/opencl-z/blob/master/opencl_z_1_1b.jar
我一直在摆弄 OpenCL,它似乎没有检测到我有一个设备可以在我的计算机中使用(我检测到)。
这是 dxdiag 的结果:
这是我的代码的第一部分,这里出现错误,检查我的机器上可用的设备数量。
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);
}
这是这段代码的输出:
当我打印设备数量时,它 是 发现
printf("Found %d devices", num_devices);
每次都给出相同的数字:
请告诉我还有哪些其他信息可能有助于解决这个问题。
您不能确定它没有找到设备,因为您没有正确检查 return 值。有5个值(more, depending on your OpenCL version) that clGetDeviceIDs
可以return:
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
值。您选择的平台可能没有有效的设备,但另一个平台有。
确保安装了 32 位和 64 位 opencl 驱动程序。如果你的应用是64位的,但只安装了32位的驱动,会导致找不到设备。
您可以使用我的应用程序检查已安装的设备: https://github.com/zbendefy/opencl-z/blob/master/opencl_z_1_1b.jar