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前面获取的的platformIdcl_platform_info设置需要获取到的platformInfoparam_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 和 device 属性的参

最低0.47元/天 解锁文章
474

被折叠的 条评论
为什么被折叠?



