Skip to content

CLGetDeviceInfo

CLGetDeviceInfo

The function receives device property from OpenCL driver.

bool  CLGetDeviceInfo(
   int     handle,          // OpenCL device handle
   int     property_id,     // requested property ID
   uchar&  data[],          // array for receiving data
   uint&   size             // shift in the array elements, default value is 0
   );

Parameters

handle

[in] OpenCL device index or OpenCL handle created by CLContextCreate() function.

property_id

[in] ID of the OpenCL device property that should be received. The values can be of one of the predetermined ones listed in the table below.

data[]

[out] The array for receiving data on the requested property.

size

[out] Size of the received data in the array data[].

Return Value

true if successful, otherwise false. For information about the error, use the GetLastError() function.

Note

For one-dimensional arrays, the number of the element, from which data reading for OpenCL buffer starts, is calculated considering AS_SERIES flag.

The list of available IDs of OpenCL device properties

Exact description of the property and its functions can be found at the official OpenCL web site.

IdentifierValue
CL_DEVICE_TYPE0x1000
CL_DEVICE_VENDOR_ID0x1001
CL_DEVICE_MAX_COMPUTE_UNITS0x1002
CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS0x1003
CL_DEVICE_MAX_WORK_GROUP_SIZE0x1004
CL_DEVICE_MAX_WORK_ITEM_SIZES0x1005
CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR0x1006
CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT0x1007
CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT0x1008
CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG0x1009
CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT0x100A
CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE0x100B
CL_DEVICE_MAX_CLOCK_FREQUENCY0x100C
CL_DEVICE_ADDRESS_BITS0x100D
CL_DEVICE_MAX_READ_IMAGE_ARGS0x100E
CL_DEVICE_MAX_WRITE_IMAGE_ARGS0x100F
CL_DEVICE_MAX_MEM_ALLOC_SIZE0x1010
CL_DEVICE_IMAGE2D_MAX_WIDTH0x1011
CL_DEVICE_IMAGE2D_MAX_HEIGHT0x1012
CL_DEVICE_IMAGE3D_MAX_WIDTH0x1013
CL_DEVICE_IMAGE3D_MAX_HEIGHT0x1014
CL_DEVICE_IMAGE3D_MAX_DEPTH0x1015
CL_DEVICE_IMAGE_SUPPORT0x1016
CL_DEVICE_MAX_PARAMETER_SIZE0x1017
CL_DEVICE_MAX_SAMPLERS0x1018
CL_DEVICE_MEM_BASE_ADDR_ALIGN0x1019
CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE0x101A
CL_DEVICE_SINGLE_FP_CONFIG0x101B
CL_DEVICE_GLOBAL_MEM_CACHE_TYPE0x101C
CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE0x101D
CL_DEVICE_GLOBAL_MEM_CACHE_SIZE0x101E
CL_DEVICE_GLOBAL_MEM_SIZE0x101F
CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE0x1020
CL_DEVICE_MAX_CONSTANT_ARGS0x1021
CL_DEVICE_LOCAL_MEM_TYPE0x1022
CL_DEVICE_LOCAL_MEM_SIZE0x1023
CL_DEVICE_ERROR_CORRECTION_SUPPORT0x1024
CL_DEVICE_PROFILING_TIMER_RESOLUTION0x1025
CL_DEVICE_ENDIAN_LITTLE0x1026
CL_DEVICE_AVAILABLE0x1027
CL_DEVICE_COMPILER_AVAILABLE0x1028
CL_DEVICE_EXECUTION_CAPABILITIES0x1029
CL_DEVICE_QUEUE_PROPERTIES0x102A
CL_DEVICE_NAME0x102B
CL_DEVICE_VENDOR0x102C
CL_DRIVER_VERSION0x102D
CL_DEVICE_PROFILE0x102E
CL_DEVICE_VERSION0x102F
CL_DEVICE_EXTENSIONS0x1030
CL_DEVICE_PLATFORM0x1031
CL_DEVICE_DOUBLE_FP_CONFIG0x1032
CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF0x1034
CL_DEVICE_HOST_UNIFIED_MEMORY0x1035
CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR0x1036
CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT0x1037
CL_DEVICE_NATIVE_VECTOR_WIDTH_INT0x1038
CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG0x1039
CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT0x103A
CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE0x103B
CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF0x103C
CL_DEVICE_OPENCL_C_VERSION0x103D
CL_DEVICE_LINKER_AVAILABLE0x103E
CL_DEVICE_BUILT_IN_KERNELS0x103F
CL_DEVICE_IMAGE_MAX_BUFFER_SIZE0x1040
CL_DEVICE_IMAGE_MAX_ARRAY_SIZE0x1041
CL_DEVICE_PARENT_DEVICE0x1042
CL_DEVICE_PARTITION_MAX_SUB_DEVICES0x1043
CL_DEVICE_PARTITION_PROPERTIES0x1044
CL_DEVICE_PARTITION_AFFINITY_DOMAIN0x1045
CL_DEVICE_PARTITION_TYPE0x1046
CL_DEVICE_REFERENCE_COUNT0x1047
CL_DEVICE_PREFERRED_INTEROP_USER_SYNC0x1048
CL_DEVICE_PRINTF_BUFFER_SIZE0x1049
CL_DEVICE_IMAGE_PITCH_ALIGNMENT0x104A
CL_DEVICE_IMAGE_BASE_ADDRESS_ALIGNMENT0x104B

Example:

void OnStart()
  {
//---
   int dCount= CLGetInfoInteger(0,CL_DEVICE_COUNT);
   for(int i = 0; i<dCount; i++)
     {
      int clCtx=CLContextCreate(i);
      if(clCtx == -1)
         Print("ERROR in CLContextCreate");
      string device;
      CLGetInfoString(clCtx,CL_DEVICE_NAME,device);
      Print(i,": ",device);
      uchar data[1024];
      uint size;
      CLGetDeviceInfo(clCtx,CL_DEVICE_VENDOR,data,size);
      Print("size = ",size);
      string str=CharArrayToString(data);
      Print(str);
     }
  }
//--- example of entries in Experts journal
//  2013.07.24 10:50:48     opencl (EURUSD,H1)      2: Advanced Micro Devices, Inc.
//  2013.07.24 10:50:48     opencl (EURUSD,H1)      size = 32
//  2013.07.24 10:50:48     opencl (EURUSD,H1)      Tahiti
//  2013.07.24 10:50:48     opencl (EURUSD,H1)      Intel(R) Corporation
//  2013.07.24 10:50:48     opencl (EURUSD,H1)      size = 21
//  2013.07.24 10:50:48     opencl (EURUSD,H1)      1:        Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz
//  2013.07.24 10:50:48     opencl (EURUSD,H1)      NVIDIA Corporation
//  2013.07.24 10:50:48     opencl (EURUSD,H1)      size = 19
//  2013.07.24 10:50:48     opencl (EURUSD,H1)      0: GeForce GTX 580
Last updated on