Opencl 在clGetDeviceInfo中显示CPU属性的AMD设备

Opencl 在clGetDeviceInfo中显示CPU属性的AMD设备,opencl,gpu,amd-processor,Opencl,Gpu,Amd Processor,我安装了AMD w7000 firepro卡。当我查询其属性时,它不显示自己的属性,只显示与我的CPU(Intel Xeon)相同的属性,只有3个属性除外,如下所示: 1.cl_全局内存缓存大小 2.每个块的最大螺纹数 查询属性的方法是将我找到的所有设备的cl_device_id发送到函数get_prop(cl_device_id),在该函数中,我只需使用clGetDeviceinfo打印所有属性 平台1: 名称:英特尔(R)OpenCL 平台中的设备数:1 设备=英特尔(R)至强(R)CPU

我安装了AMD w7000 firepro卡。当我查询其属性时,它不显示自己的属性,只显示与我的CPU(Intel Xeon)相同的属性,只有3个属性除外,如下所示: 1.cl_全局内存缓存大小 2.每个块的最大螺纹数

查询属性的方法是将我找到的所有设备的cl_device_id发送到函数get_prop(cl_device_id),在该函数中,我只需使用clGetDeviceinfo打印所有属性

平台1: 名称:英特尔(R)OpenCL 平台中的设备数:1 设备=英特尔(R)至强(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:im使用AMDAPP SDK

您可能会混淆设备ID,并且可能会跨越不同的平台。您确定正确地将每个设备捕获为唯一的cl_设备id吗

从您的列表中可以看出,您安装了多个平台;您列出了一个“平台:2”,所以必须有一个平台:1?如果您尚未处理此问题,请将平台ID捕获到阵列中。像这样:

cl_uint nPlatforms;
cl_uint err = CL_SUCCESS;
err = clGetPlatformIDs(1, NULL, &nPlatforms);

这样,在多个平台上(假设您使用C,我将用Maloc设置它,用C++,您可以使用“新建”来创建PrimDIDINA数组):

然后,例如,检查名称:

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);
}
for(cl_uint i=0;i

接下来,您将需要两个独立的设备阵列,每个平台一个。使用与上述类似的方法,针对给定的平台,循环遍历每个设备ID数组并查询每个设备的值。

您能向我们展示您对
clgetDeviceID()的调用吗?
?输出显示AMDSDK已经将Intel CPU作为OpenCL设备,这是我所期望的。我看到您使用的是Xeon CPU—这是您远程访问的服务器还是本地机器?同意。人们可能会寻找已经实现的clinfo版本(例如来自AMD应用程序SDK)来确认平台信息。
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);
}