OpenCL 找不到 GPU
GPU not found by OpenCL
我是 OpenCL 的新手,正在尝试获取有关我机器中已安装平台和设备的信息。我的 PC 上只安装了一个平台,OpenCL 很容易检测到它。以下 C 代码:
cl_uint num_platforms = 0;
cl_int err = 0;
err = clGetPlatformIDs(1, NULL, &num_platforms);
if(err != CL_SUCCESS) {
printf("Failed to detect platforms");
exit(1);
}
printf("Number of platforms detected: %u", num_platforms);
给出输出:
Number of platforms detected: 1
现在,当我尝试获取此平台中的设备时,OpenCL 未检测到它:
cl_platform_id platform;
cl_uint num_devices = 0;
cl_int err = 0;
err = clGetPlatformIDs(1, &platform, NULL); // Because only one platform is present
if(err != CL_SUCCESS) {
printf("Failed to detect platforms");
exit(1);
}
err = clGetDeviceIDs(platform, CL_DEVICE_TYPE_ALL, 1, NULL, &num_devices);
if(err != CL_SUCCESS) {
printf("Failed to detect any devices");
exit(1);
}
printf("Number of devices detected: %u", num_devices);
当我 运行 此代码时,我收到消息:
Failed to detect any devices
但是,我的 PC 的规格另有说明:
此外,当我在 AMD Radeon Software 中查找 GPU 规格时,我得到以下信息:
显然,我的设备支持 OpenCL 2.0 版。最重要的是,我还在我的电脑上安装了 PyOpenCL,它很容易检测到 iGPU:
很明显,问题出在C代码中,但我不知道在哪里!
以下是我设备的规格:
- OS: Windows 10
- CPU:锐龙 3500u
- GPU:Radeon Vega 8 iGPU (gfx902)
我已经从 here 安装了 OpenCL SDK。
鉴于签名:
cl_int clGetDeviceIDs( cl_platform_id platform,
cl_device_type device_type,
cl_uint num_entries,
cl_device_id *devices,
cl_uint *num_devices)
有:
err = clGetDeviceIDs(platform, CL_DEVICE_TYPE_ALL, 1, NULL, &num_devices);
您要求将长度为 1 的列表写入 NULL
。文档没有出现明确排除这种组合,但它在语义上也没有多大意义。
如果您只是想检索 num_entries
中可用设备的数量,那么:
err = clGetDeviceIDs(platform, CL_DEVICE_TYPE_ALL, 0, NULL, &num_devices);
这将在不检索实际列表的情况下为您提供计数。
我是 OpenCL 的新手,正在尝试获取有关我机器中已安装平台和设备的信息。我的 PC 上只安装了一个平台,OpenCL 很容易检测到它。以下 C 代码:
cl_uint num_platforms = 0;
cl_int err = 0;
err = clGetPlatformIDs(1, NULL, &num_platforms);
if(err != CL_SUCCESS) {
printf("Failed to detect platforms");
exit(1);
}
printf("Number of platforms detected: %u", num_platforms);
给出输出:
Number of platforms detected: 1
现在,当我尝试获取此平台中的设备时,OpenCL 未检测到它:
cl_platform_id platform;
cl_uint num_devices = 0;
cl_int err = 0;
err = clGetPlatformIDs(1, &platform, NULL); // Because only one platform is present
if(err != CL_SUCCESS) {
printf("Failed to detect platforms");
exit(1);
}
err = clGetDeviceIDs(platform, CL_DEVICE_TYPE_ALL, 1, NULL, &num_devices);
if(err != CL_SUCCESS) {
printf("Failed to detect any devices");
exit(1);
}
printf("Number of devices detected: %u", num_devices);
当我 运行 此代码时,我收到消息:
Failed to detect any devices
但是,我的 PC 的规格另有说明:
此外,当我在 AMD Radeon Software 中查找 GPU 规格时,我得到以下信息:
显然,我的设备支持 OpenCL 2.0 版。最重要的是,我还在我的电脑上安装了 PyOpenCL,它很容易检测到 iGPU:
很明显,问题出在C代码中,但我不知道在哪里!
以下是我设备的规格:
- OS: Windows 10
- CPU:锐龙 3500u
- GPU:Radeon Vega 8 iGPU (gfx902)
我已经从 here 安装了 OpenCL SDK。
鉴于签名:
cl_int clGetDeviceIDs( cl_platform_id platform,
cl_device_type device_type,
cl_uint num_entries,
cl_device_id *devices,
cl_uint *num_devices)
有:
err = clGetDeviceIDs(platform, CL_DEVICE_TYPE_ALL, 1, NULL, &num_devices);
您要求将长度为 1 的列表写入 NULL
。文档没有出现明确排除这种组合,但它在语义上也没有多大意义。
如果您只是想检索 num_entries
中可用设备的数量,那么:
err = clGetDeviceIDs(platform, CL_DEVICE_TYPE_ALL, 0, NULL, &num_devices);
这将在不检索实际列表的情况下为您提供计数。