Skip to content

Predefined macros in OpenCL (standard and proprietary)

magnum edited this page Jun 26, 2015 · 18 revisions

##OpenCL 1.0 The following predefined macro names are available.

__FILE__ The presumed name of the current source file (a character string literal).

__LINE__ The presumed line number (within the current source file) of the current source line (an integer constant).

__OPENCL_VERSION__ substitutes an integer reflecting the version number of the OpenCL supported by the OpenCL device. OpenCL 1.0 will have __OPENCL_VERSION__ substitute the integer 100.

__ENDIAN_LITTLE__ is used to determine if the OpenCL device is a little endian architecture or a big endian architecture (an integer constant of 1 if device is little endian and is undefined otherwise). Also refer to CL_DEVICE_ENDIAN_LITTLE specified in the table of OpenCL Device Queries for clGetDeviceInfo.

__ROUNDING_MODE__ is used to determine the current rounding mode and is set to rte. The __ROUNDING_MODE__ only affects the rounding mode of conversions to a float type.

__kernel_exec(X, typen) (and kernel_exec(X, typen)) is defined as follows:

     __kernel __attribute__((work_group_size_hint(X, 1, 1))) \
              __attribute__((vec_type_hint(typen)))

__IMAGE_SUPPORT__ is used to determine if the OpenCL device supports images. This is an integer constant of 1 if images are supported and is undefined otherwise. Also refer to CL_DEVICE_IMAGE_SUPPORT specified in the table of OpenCL Device Queries for clGetDeviceInfo.

__FAST_RELAXED_MATH__ is used to determine if the cl-fast-relaxed-math optimization option is specified in build options given to clBuildProgram. This is an integer constant of 1 if the cl-fast-relaxed-math build option is specified and is undefined otherwise. The macro names defined by the C99 specification but not currently supported by OpenCL are reserved for future use.

The macro names defined by the C99 specification but not currently supported by OpenCL are reserved for future use.

You can test if a pragma is supported by checking whether its name is defined:

#ifdef cl_nv_pragma_unroll
#define NVIDIA
#endif

or

#ifdef cl_khr_byte_addressable_store
#pragma OPENCL EXTENSION cl_khr_byte_addressable_store : disable
#endif

##OpenCL 1.1 CL_VERSION_1_0 substitutes the integer 100 reflecting the OpenCL 1.0 version.

CL_VERSION_1_1 substitutes the integer 110 reflecting the OpenCL 1.1 version.

##OpenCL 1.2 CL_VERSION_1_2 substitutes the integer 120 reflecting the OpenCL 1.2 version.

__OPENCL_C_VERSION__ substitutes an integer reflecting the OpenCL C version specified by the -cl-std build option to clBuildProgram or clCompileProgram. If the -cl-std build option is not specified, the OpenCL C version supported by the compiler for this OpenCL device will be used. For version 1.20 __OPENCL_C_VERSION__ will substitute the integer 120.

__EMBEDDED_PROFILE__ will be the integer constant 1 for OpenCL devices that implement the embedded profile and is undefined otherwise. CL_PLATFORM_PROFILE defined in table 4.1 (see clGetPlatformInfo) will return the string EMBEDDED_PROFILE if the OpenCL implementation supports the embedded profile only.

##OpenCL 2.0 CL_VERSION_2_0 substitutes the integer 200 reflecting the OpenCL 2.0 version.

CL_DEVICE_MAX_GLOBAL_VARIABLE_SIZE expands to a positive integer specifying the maximum size in bytes for a program scope variable or static function variable. This is the same value as CL_DEVICE_MAX_GLOBAL_VARIABLE_SIZE returned by clGetDeviceInfo in table 4.3.

The NULL macro expands to a null pointer constant. An integer constant expression with the value 0, or such an expression cast to type void * is called a null pointer constant.

The predefined identifier __func__ is available.

##AMD ###GPU devices:

__WinterPark__
__BeaverCreek__
__Turks__
__Caicos__
__Tahiti__
__Pitcairn__
__Capeverde__
__Cayman__
__Barts__
__Cypress__
__Juniper__
__Redwood__
__Cedar__
__ATI_RV770__
__ATI_RV730__
__ATI_RV710__
__Loveland__
__GPU__

__Hawaii__ is confirmed too. Note to self: __HAWAII__ is not it. They are Capitalized lower case.

###CPU devices:

__CPU__
__X86__
__X86_64__

##nvidia None known

Clone this wiki locally