<!-- from section 6.5 - common stuff for global, local, constant, and private --> | |
<bridgehead>General information about address space qualifiers</bridgehead> | |
<para> | |
OpenCL implements the following disjoint named address | |
spaces: <function>__global</function>, | |
<function>__local</function>, <function>__constant</function>, and | |
<function>__private</function>. 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. | |
</para> | |
<para> | |
The address space names without the __ prefix i.e. <function>global</function>, | |
<function>local</function>, <function>constant</function> | |
and <function>private</function> | |
may be substituted for the corresponding address | |
space names with the __ prefix. | |
</para> | |
<para> | |
The address space name for arguments to a function | |
in a program, or local variables of a function | |
is <function>__private</function>. All function | |
arguments shall be in the <function>__private</function> address space. | |
The address space for a variable at program scope | |
or a static variable inside a function can either | |
be <function>__global</function> or | |
<function>__constant</function>, but defaults to | |
<function>__global</function> if not specified. | |
</para> | |
<para> | |
OpenCL 2.0 adds support for an unnamed <function>generic</function> | |
address space. Pointers that are declared | |
without pointing to a named address space point to the | |
<function>generic</function> address space. Before | |
referring to the region pointed to, the pointer | |
must be associated with a named address space. | |
Functions may be written with arguments and return values that point to the | |
<function>generic</function> address space. | |
</para> | |
<para> | |
kernel function arguments declared to be a pointer or | |
an array of a type must point to one of | |
the named address spaces <function>__global</function>, | |
<function>__local</function> or <function>__constant</function>. | |
</para> | |
<para> | |
The named address spaces are a subset of the generic | |
address space except for the <function>constant</function> | |
address space. | |
</para> | |
<para> | |
A pointer to address space A can only be assigned to | |
a pointer to the same address space A or a | |
pointer to the <function>generic</function> address | |
space. Casting a pointer to address space A to a pointer to | |
address space B is illegal if A and B are named | |
address spaces and A is not the same as B. | |
</para> | |
<para> | |
The <function>__global</function>, <function>__constant</function>, | |
<function>__local</function>, | |
<function>__private</function>, <function>__generic</function>, | |
<function>global</function>, | |
<function>constant</function>, <function>local</function>, and | |
<function>private</function> names are reserved for use as address space | |
qualifiers and shall not be used otherwise. | |
The <function>__generic</function> and <function>generic</function> | |
names are reserved for future use. | |
</para> | |
<para> | |
The size of pointers to different address spaces | |
may differ. It is not correct to assume | |
that, for example, <code>sizeof(__global int *)</code> | |
always equals <code>sizeof(__local int *)</code>. | |
</para> | |
<!-- 27-Oct-2015, C lang 2.0 rev 30 --> | |