| <!-- 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 --> | |