我安装了AMD w7000 firepro卡。当我查询其属性而不是显示自己的属性时,它只显示与我的CPU(Intel Xeon)相同的属性,但3个属性除外,如下所示: 1.cl_global_mem_cache_size 2.cl_max_threads_per_block。
我查询属性的方式是我将找到的所有设备的cl_device_id发送到函数get_prop(cl_device_id id),其中我只使用clGetDeviceinfo打印所有属性。
平台1: 名称:英特尔(R)OpenCL 平台中的设备数量:1 DEVICE = Intel(R)Xeon(R)CPU X5660 @ 2.80GHz
ADDRESS BITS:64
DEVICE GLOBAL MEM CACHE SIZE=262144
DEVICE GLOBAL MEM SIZE IN BYTES=25122017280
LOCAL MEM SIZE=32768
MAX CLOCK FREQUENCY=2800
NO. OF PARALLEL COMPUTE UNITS LIKE SMs=24
MAX THREADS IN ONE BLOCK=8192
MAX THREAD DIMENSIONS=3
OPENCL VERSION=OpenCL C 1.2
MAX THREADS IN EACH DIMENSION=8192 8192 8192
PLATFORM 2:
NAME : AMD Accelerated Parallel Processing
num of devices in platform : 1
DEVICE=Intel(R) Xeon(R) CPU X5660 @ 2.80GHz
ADDRESS BITS:64
DEVICE GLOBAL MEM CACHE SIZE=32768
DEVICE GLOBAL MEM SIZE IN BYTES=25122017280
LOCAL MEM SIZE=32768
MAX CLOCK FREQUENCY=2792
NO. OF PARALLEL COMPUTE UNITS LIKE SMs=24
MAX THREADS IN ONE BLOCK=1024
MAX THREAD DIMENSIONS=3
OPENCL VERSION=OpenCL C 1.2
MAX THREADS IN EACH DIMENSION=1024 1024 1024
任何人都可以解释为什么会这样吗? fyk:即时通讯使用AMDAPP SDK
答案 0 :(得分:1)
您可能会在设备ID之间混淆,也可能在不同平台之间混淆。您确定将每个设备正确捕获为唯一的cl_device_id吗?
从您的商家信息中可以看出,您安装了多个平台;你列出了一个“平台:2”,所以必须有一个平台:1?如果您尚未处理此问题,请将平台ID捕获到数组中。像这样:
cl_uint nPlatforms;
cl_uint err = CL_SUCCESS;
err = clGetPlatformIDs(1, NULL, &nPlatforms);
因此,对于多个平台(假设您使用C,我将使用malloc进行设置,使用C ++,您可以使用“new”来创建platformID_Array):
cl_platform_id* platformID_Array = malloc(sizeof(cl_platform_id)*nPlatforms);
err = CL_SUCCESS;
err = clGetPlatformIDs(nPlatforms, platformID_Array, NULL);
然后例如,检查名称:
for (cl_uint i = 0; i < nPlatforms; i++) {
size_t vendorSize;
char* vendorCstring;
err = clGetPlatformInfo(platformID_Array[i], CL_PLATFORM_VENDOR, 0, NULL, &vendorSize);
vendorCstring = (char*)malloc(sizeof(char)*vendorSize);
err = clGetPlatformInfo(platformID_Array[i], CL_PLATFORM_VENDOR, vendorSize, vendorCstring, NULL);
printf("Platform name = %s\n",vendorCstring);
}
接下来,您将需要两个独立的设备阵列,每个平台一个。使用与上述类似的方法,遍历每个设备ID阵列并查询给定平台的每个设备的值。