我一直在搞乱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);
每次都给出相同的数字:
请让我知道其他信息可能有助于解决这个问题。
答案 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。CL_DEVICE_NOT_FOUND
。您应该检查err
值,以确保CL_DEVICE_NOT_FOUND
确实存在。
同样,您应该使用clGetPlatformIDs
的num_platforms
值。您选择的平台可能没有有效的设备,但另一个平台可以。
答案 1 :(得分:0)
确保安装了32位和64位opencl驱动程序。如果您的应用程序是64位,但只安装了32位驱动程序,则无法找到该设备。
您可以使用我的应用检查已安装的设备: https://github.com/zbendefy/opencl-z/blob/master/opencl_z_1_1b.jar