引言
opencl应用的第一步是查询平台集合,选择其中一个或多个平台应用中使用。
查询平台信息
平台集可以用以下命令查询:
其中各项参数的含义:
- num_entries是可以加入平台的ID数量。如果平台数不是NULL,那么这一项必需是大于零。
- platforms 会返回所找到的 OpenCL 平台的列表。platforms 中 cl_platform_id的值可以用来标识一个特定的 OpenCL 平台。
- num_platforms 返回实际可用的 OpenCL 平台的数目。
这个命令会得到可用opencl平台列表。如果参数platforms是为NULL,clGetPlatformIDs会返回可用平台数。返回的平台数可以用num_entries来限制,这个要大于0并小于或等于可用平台数。可以举一个简单的例子说明如何查询和选择平台。下面使用clGetPlatformIDs得到一个平台IDs例表:
这里面cnt = clGetPlatformIDs(1, &platform, NULL);就是指定了1平台,实际上有几个平台可用已经没有关系了,所以直接写成了NULL。。直接给的也是平台的地址&platform。
查询设备
其中各个参数的含义:
- platform 是 clGetPlatformIDs 所返回的平台 ID 或者是 NULL。
- device_type 是位域,用来标识 OpenCL 设备的类型
- num_entries 是 cl_device 表项的数目,此表项可以添进 devices
- devices 返回一个列表,其中存放所找到的 OpenCL 设备
- num_devices 返回与 device_type 相匹配的可用 OpenCL 设备的数目
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 设备。