CLGetInfoInteger
CLGetInfoInteger
为一个OpenCL对象或者设备返回整数属性的数值.
long CLGetInfoInteger(
int handle, // OpenCL对象处理或OpenCL设备编号
ENUM_OPENCL_PROPERTY_INTEGER prop // 被请求属性
);参数
- handle
[in] OpenCL对象处理或OpenCL设备编号. OpenCL设备编号开始于零.
- prop
[in] 从 ENUM_OPENCL_PROPERTY_STRING 详表被请求的属性类型, 您想要被包含的值.
返回值
如果成功属性的值或一旦错误 -1 . 有关错误信息,使用 GetLastError() 函数.
ENUM_OPENCL_PROPERTY_INTEGER
| 标识符 | 描述 | 类型 |
|---|---|---|
| CL_DEVICE_COUNT | OpenCL支持的设备编号. 此属性不要求第一个参数规范,即你可以处理参数通过一个为零的值 | int |
| CL_DEVICE_TYPE | 设备类型 | ENUM_CL_DEVICE_TYPE |
| CL_DEVICE_VENDOR_ID | 唯一的供应商识别 | uint |
| CL_DEVICE_MAX_COMPUTE_UNITS | OpenCL设备中的并行计算任务编号. 一个工作组解决了一个计算任务.最低值为1 | uint |
| CL_DEVICE_MAX_CLOCK_FREQUENCY | 设备最高的固定频率兆赫. | uint |
| CL_DEVICE_GLOBAL_MEM_SIZE | 设备的全局内存字节大小 | ulong |
| CL_DEVICE_LOCAL_MEM_SIZE | 处理数据(事件)本地内存的字节大小 | uint |
| CL_BUFFER_SIZE | OpenCL字节缓冲区的实际大小 | ulong |
| CL_DEVICE_MAX_WORK_GROUP_SIZE | 可用于OpenCL设备的本地工作组总数。 | ulong |
| CL_KERNEL_WORK_GROUP_SIZE | 可用于OpenCL程序的本地工作组总数。 | ulong |
| CL_KERNEL_LOCAL_MEM_SIZE | 由OpenCL程序用于解决一组全部并行任务的本地存储器大小(字节)。 使用CL_DEVICE_LOCAL_MEM_SIZE 接收最大可用值 | ulong |
| CL_KERNEL_PRIVATE_MEM_SIZE | OpenCL程序内核中,每个任务使用的最小专有存储器大小(字节)。 | ulong |
| CL_LAST_ERROR | 最后一个OpenCL错误的值 | int |
ENUM_CL_DEVICE_TYPE详表包含可以支持OpenCL的设备类型. 您可以通过 CLGetInfoInteger(handle_or_deviceN, CL_DEVICE_TYPE)用其编号或者OpenCL处理对象接收设备类型.
ENUM_CL_DEVICE_TYPE
| 标识符 | 描述 |
|---|---|
| CL_DEVICE_ACCELERATOR | OpenCL专用加速器 (比如, IBM CELL Blade). 这些设备使用外设互连如PCIe与主处理器进行通信. |
| CL_DEVICE_CPU | 一个OpenCL主机处理器设备. 主机处理器运行OpenCL运转且为一个单核或多核CPU. |
| CL_DEVICE_GPU | 一个OpenCL设备是GPU. |
| CL_DEVICE_DEFAULT | 系统默认的OpenCL设备. 默认设备不能为 CL_DEVICE_TYPE_CUSTOM 设备. |
| CL_DEVICE_CUSTOM | 专用的加速器不支持OpenCL C编写的程序. |
例如:
void OnStart()
{
int cl_ctx;
//--- 初始化 OpenCL 上下文
if((cl_ctx=CLContextCreate(CL_USE_GPU_ONLY))==INVALID_HANDLE)
{
Print("OpenCL not found");
return;
}
//--- 显示有关OpenCL设备的常规信息
Print("OpenCL type: ",EnumToString((ENUM_CL_DEVICE_TYPE)CLGetInfoInteger(cl_ctx,CL_DEVICE_TYPE)));
Print("OpenCL vendor ID: ",CLGetInfoInteger(cl_ctx,CL_DEVICE_VENDOR_ID));
Print("OpenCL units: ",CLGetInfoInteger(cl_ctx,CL_DEVICE_MAX_COMPUTE_UNITS));
Print("OpenCL freq: ",CLGetInfoInteger(cl_ctx,CL_DEVICE_MAX_CLOCK_FREQUENCY)," MHz");
Print("OpenCL global mem: ",CLGetInfoInteger(cl_ctx,CL_DEVICE_GLOBAL_MEM_SIZE)," bytes");
Print("OpenCL local mem: ",CLGetInfoInteger(cl_ctx,CL_DEVICE_LOCAL_MEM_SIZE)," bytes");
//--- free OpenCL context
CLContextFree(cl_ctx);
}