OpenCL中主机与设备之间的交一互

引言

opencl应用的第一步是查询平台集合,选择其中一个或多个平台应用中使用。

查询平台信息

平台集可以用以下命令查询:

cl_int clGetPlatformIDs( cl_uint num_entries, 
                         cl_platform_id *platforms,
                         cl_uint *num_platforms
                        )
其中各项参数的含义:
  • num_entries是可以加入平台的ID数量。如果平台数不是NULL,那么这一项必需是大于零。
  • platforms 会返回所找到的 OpenCL 平台的列表。platforms 中 cl_platform_id的值可以用来标识一个特定的 OpenCL 平台。
  • num_platforms 返回实际可用的 OpenCL 平台的数目。

这个命令会得到可用opencl平台列表。如果参数platforms是为NULL,clGetPlatformIDs会返回可用平台数。返回的平台数可以用num_entries来限制,这个要大于0并小于或等于可用平台数。可以举一个简单的例子说明如何查询和选择平台。下面使用clGetPlatformIDs得到一个平台IDs例表:

cl_int errNum;
cl_uint numPlatforms;
cl_platform_id *platformid;
cl_context context =Null;

errNum =clGetPlatformIDS(0,NULL,&numPlatforms);
if( errNum !=CL_SUCCESS)
{
  cout <<"something wrong getplatformIDs"<<endl;
  return -1;
}
这里面cnt = clGetPlatformIDs(1, &platform, NULL);就是指定了1平台,实际上有几个平台可用已经没有关系了,所以直接写成了NULL。。直接给的也是平台的地址&platform。

查询设备

cl_int clGetDeviceIDs(cl_platform_id platform,
                      cl_device_type  device_type,  
                      cl_uint  num_entries,  
                      cl_device_id *devices,  
                      cl_uint  *num_devices)
其中各个参数的含义:
  • platform 是 clGetPlatformIDs 所返回的平台 ID 或者是 NULL。
  • device_type 是位域,用来标识 OpenCL 设备的类型
  • num_entries 是 cl_device 表项的数目,此表项可以添进 devices
  • devices 返回一个列表,其中存放所找到的 OpenCL 设备
  • num_devices 返回与 device_type 相匹配的可用 OpenCL 设备的数目

  cnt = clGetDeviceIDs(platform, CL_DEVICE_TYPE_CPU, 1, &device_id, NULL);
    if (cnt != CL_SUCCESS)
    {
        cout <<"something wrong getdeviceIDs" << endl;
        return -1;
   }
CL_DEVICE_TYPE_CPU=====宿主机处理器。在其上运行 OpenCL 实现,是单核或多核 CPU。
CL_DEVICE_TYPE_GPU=====GPU。这意味着此设备也可以用来加速一个 3DAPI(如 OpenGL 或 DirectX)。
CL_DEVICE_TYPE_ACCELERATOR=====OpenGL 专用加速器(如 IBM 的 CELL Blade)。这些设备通过外围内联(如 PCIe)与宿主机处理器通信。
CL_DEVICE_TYPE_DEFAULT ===== 系统中默认的 OpenCL 设备。
CL_DEVICE_TYPE_ALL ===== 系统中所有可用的 OpenCL 设备。


敬请关注本博客和新浪微博songzi_tea.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值