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);

  }