我在戴尔1558上安装了ATI HD Radeon 5470,在我的win7-64上安装了AMDAPP SDK 2.8 问题是,当我使用opencl代码来细化设备时,它说:
“找不到任何设备:没有错误”
我知道我已经安装了最新的催化剂驱动器& 我的所有其他程序都适用于GPU , 但我不知道为什么会这样做。这是我用来查找设备的代码: 谢谢每个人帮我找出问题所在?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifdef MAC
#include <OpenCL/cl.h>
#else
#include <CL/cl.h>
#endif
int main() {
cl_platform_id platform;
cl_device_id *devices;
cl_uint num_devices, addr_data;
cl_int i, err;
char name_data[48], ext_data[4096];
err = clGetPlatformIDs(1, &platform, NULL);
if(err < 0) {
perror("Couldn't find any platforms");
exit(1);
}
err = clGetDeviceIDs(platform, CL_DEVICE_TYPE_ALL,
1, NULL, &num_devices);
if(err < 0) {
perror("Couldn't find any devices");
exit(1);
}
devices = (cl_device_id*)
malloc(sizeof(cl_device_id) * num_devices);
clGetDeviceIDs(platform, CL_DEVICE_TYPE_ALL,
num_devices, devices, NULL);
for(i=0; i<num_devices; i++) {
err = clGetDeviceInfo(devices[i], CL_DEVICE_NAME,
sizeof(name_data), name_data, NULL);
if(err < 0) {
perror("Couldn't read extension data");
exit(1);
}
clGetDeviceInfo(devices[i], CL_DEVICE_ADDRESS_BITS,
sizeof(ext_data), &addr_data, NULL);
clGetDeviceInfo(devices[i], CL_DEVICE_EXTENSIONS,
sizeof(ext_data), ext_data, NULL);
printf("NAME: %s\nADDRESS_WIDTH: %u\nEXTENSIONS: %s",
name_data, addr_data, ext_data);
}
free(devices);
return 0;
}
答案 0 :(得分:0)
第一次调用clGetDeviceIDs()会在我的机器上返回错误,因为第三个参数是1.将1更改为0会超过该值。下一个问题是对clGetDeviceInfo的调用失败。这是因为name_data太小了。不确定opencl是否有直接的方法来找到所需的大小,但是传递更大的缓冲区可以解决问题。最后一个问题是对clGetDeviceInfo的第二次调用有一个输入错误,其中sizeof(addr_data)是预期的,但是使用了sizeof(ext_data)。对于我的测试,这会导致局部变量i被覆盖,从而导致无限循环。修复后,代码将打印出来:
NAME:ATI RV710 ADDRESS_WIDTH:32 扩展:cl_khr_gl_sharing cl_amd_device_attribute_query cl_khr_d3d10_sharing名称:Intel(R)Core(TM)i7-2600K CPU @ 3.40GHz ADDRESS_WIDTH:64 EXTENSIONS:cl_khr_fp64 cl_amd_fp64 cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_local_i nt32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_int64_base_atomics cl_khr_int64_extended_atomics cl_khr_byt e_addressable_store cl_khr_gl_sharing cl_ext_device_fission cl_amd_device_attribute_query cl_amd_vec3 cl_amd_printf cl_a md_media_ops cl_amd_popcnt cl_khr_d3d10_sharing