OpenCL Platform
opencl
支持的 Platform
可以使用 clGetPlatformIDs
函数查询,函数原型如下:
clGetPlatformIDs(cl_uint /* num_entries */,
cl_platform_id * /* platforms */,
cl_uint * /* num_platforms */);
如果将platforms
参数设置为nullptr
,num_platforms
会返回当前平台上可用的platform
数量
一般将 num_entries
和 platforms
设置为 0 和 nullptr
来查询可用的platform
数量
在得到当前支持platform 的前提下,设置 num_entries
和 platforms
就可以获取到所有的 platfromID
,参考代码如下:
std::vector<cl_platform_id> clplatform;
cl_uint num_platform;
err = clGetPlatformIDs(0, nullptr, &num_platform);
std::cout << "number of platforms: " << num_platform << std::endl;
clplatform.resize(num_platform);
err = clGetPlatformIDs(num_platform, clplatform.data(), NULL);
获取到 platfromID
之后,可以使用 clGetPlatformInfo
获取平台的信息,其原型如下:
clGetPlatformInfo(cl_platform_id /* platform */,
cl_platform_info /* param_name */,
size_t /* param_value_size */,
void * /* param_value */,
size_t * /* param_value_size_ret */);
cl_platform_id
前面获取的的platformId
cl_platform_info
设置需要获取到的platformInfo
param_value_size
对应的param_value
的字符串大小param_value
对应的param_value
的字符串指针- 返回获取的
param_value_size
一般先将param_value_size
和param_value
设置为 0 和nullptr
,返回param_value
的size
大小,
然后使用获取到的size
传递给param_value_size
,得到对应的param_value
对于不同的platformInfo
信息,含义如下:
platformInfo | 返回类型 | 说明 |
---|---|---|
CL_PLATFORM_PROFILE | char[] | FULL_PROFILE 或者 EMBEDDED_PROFILE |
CL_PLATFORM_VERSION | char[] | opencl 版本 |
CL_PLATFORM_NAME | char[] | 平台名称 |
CL_PLATFORM_VENDOR | char[] | 平台厂商 |
CL_PLATFORM_EXTENSIONS | char[] | 平台支持扩展名 |
FULL_PROFILE
:支持定位为核心规范的所有功能
EMBEDDED_PROFILE
: 支持定位为核心规范的所有功能的一个子集
OpenCL Device
每个平台可能关联到一组计算设备,应用程序通过这些计算设备执行内核程序,使用
clGetDeviceIDs
查询支持的设备列表
extern CL_API_ENTRY cl_int CL_API_CALL
clGetDeviceIDs(cl_platform_id /* platform */,
cl_device_type /* device_type */,
cl_uint /* num_entries */,
cl_device_id * /* devices */,
cl_uint * /* num_devices */) CL_API_SUFFIX__VERSION_1_0;
这个函数会得到于 platformID 关联的所有的 OpenCL 设备列表,如果参数 devices 设置为 null,clGetDeviceIDs
会返回设备数,返回的设备数可以用 num_entries
来限制(0 < num_entries <= 设备数)
其中的 cl_device_type 可以是下表中的一个值:
cl_device_type | 描述 |
---|---|
CL_DEVICE_TYPE_CPU | 作为宿主机处理器的 OpenCL 设备 |
CL_DEVICE_TYPE_GPU | 作为 GPU 的 OpenCL 设备 |
CL_DEVICE_TYPE_ACCELERATOR | OpenCL 加速器 |
CL_DEVICE_TYPE_ALL | 和平台关联的所有 OpenCL 设备 |
给定一个设备,可以使用下面函数查询各种属性:
extern CL_API_ENTRY cl_int CL_API_CALL
clGetDeviceInfo(cl_device_id /* device */,
cl_device_info /* param_name */,
size_t /* param_value_size */,
void * /* param_value */,
size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
可以将param_value_size
和param_value
设置为 0 和 nullptr 来查询返回值的大小
具体可以查询的 Device 属性如下图所示:
参考代码
获取 platform 和 de