【异构计算】OpenCL中主机与装置之间的交一互
【异构计算】OpenCL中主机与设备之间的交一互
查询平台信息
查询设备
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 设备。 ======================================================= 转载请注明出处:http://blog.****.net/songzitea/article/details/12237583
=======================================================
引言
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 设备。 ======================================================= 转载请注明出处:http://blog.****.net/songzitea/article/details/12237583
=======================================================