OpenCL implements the following disjoint address spaces: __global, __local
, __constant and __private.
The address space qualifier may be used in variable declarations to specify the region of memory that is used to allocate the object. The C syntax for type qualifiers is extended in OpenCL to include an address space name as a valid type qualifier. If the type of an object is qualified by an address space name, the object is allocated in the specified address name; otherwise, the object is allocated in the generic address space.
The address space names without the __ prefix i.e.
global
,
local
,
constant
and
private
may be substituted for the corresponding address space names with the __prefix.
The generic address space name for arguments to a
function in a program, or local variables of a
function is __private
.
All arguments to a __kernel
function
shall be in the __private
address space.
__kernel function arguments declared
to be a pointer of a type can point to one of the
following address spaces only:
__global
,
__local
or
__constant
.
A pointer to
address space A can only be assigned to a pointer
to the same address space A. Casting a
pointer to address space A to a pointer to address space B is illegal.
The __kernel
function arguments declared to be of type
image2d_t or image3d_t
always point to the __global
address space. All program scope variables must be declared in the __constant
address space.
The __local
or local
address space name
is used to describe variables that need to be allocated in local memory and are shared by all work-items of a work-group. This qualifier can be used with arguments to functions (including __kernel
functions) declared as pointers, or with variables defined inside a __kernel
function.
// declares a pointer p in the __private address space that // points to an int object in address space __global __global int *p; // declares an array of 4 floats in the __private address space. float x[4]; |