HOME
| OPENMP API Specification: "Version 5.2 -- GIT rev 95b2e3a44"

1.2.6  Data Terminology

variable

A named data storage block, for which the value can be defined and redefined during the execution of a program.

COMMENT: An array element or structure element is a variable that is part of another variable.

scalar variable

For C/C++, a scalar variable, as defined by the base language.

For Fortran, a scalar variable with intrinsic type, as defined by the base language, excluding character type.

aggregate variable

A variable, such as an array or structure, composed of other variables. For Fortran, a variable of character type is considered an aggregate variable.

array section

A designated subset of the elements of an array that is specified using a subscript notation that can select more than one element.

array item

An array, an array section, or an array element.

shape-operator

For C/C++, an array shaping operator that reinterprets a pointer expression as an array with one or more specified dimensions.

implicit array

For C/C++, the set of array elements of non-array type T that may be accessed by applying a sequence of [] operators to a given pointer that is either a pointer to type T or a pointer to a multidimensional array of elements of type T.

For Fortran, the set of array elements for a given array pointer.

COMMENT: For C/C++, the implicit array for pointer p with type T (*)[10] consists of all accessible elements p[i][j], for all i and j=0,1,...,9.

base pointer

For C/C++, an lvalue pointer expression that is used by a given lvalue expression or array section to refer indirectly to its storage, where the lvalue expression or array section is part of the implicit array for that lvalue pointer expression.

For Fortran, a data pointer that appears last in the designator for a given variable or array section, where the variable or array section is part of the pointer target for that data pointer.

COMMENT: For the array section (*p0).x0[k1].p1->p2[k2].x1[k3].x2[4][0:n], where identifiers pi have a pointer type declaration and identifiers xi have an array type declaration, the base pointer is: (*p0).x0[k1].p1->p2.

named pointer

For C/C++, the base pointer of a given lvalue expression or array section, or the base pointer of one of its named pointers.

For Fortran, the base pointer of a given variable or array section, or the base pointer of one of its named pointers.

COMMENT: For the array section (*p0).x0[k1].p1->p2[k2].x1[k3].x2[4][0:n], where identifiers pi have a pointer type declaration and identifiers xi have an array type declaration, the named pointers are: p0, (*p0).x0[k1].p1, and (*p0).x0[k1].p1->p2.

containing array

For C/C++, a non-subscripted array (a containing array) to which a series of zero or more array subscript operators and/or . (dot) operators are applied to yield a given lvalue expression or array section for which storage is contained by the array.

For Fortran, an array (a containing array) without the POINTER attribute and without a subscript list to which a series of zero or more array subscript operators and/or component selectors are applied to yield a given variable or array section for which storage is contained by the array.

COMMENT: An array is a containing array of itself. For the array section (*p0).x0[k1].p1->p2[k2].x1[k3].x2[4][0:n], where identifiers pi have a pointer type declaration and identifiers xi have an array type declaration, the containing arrays are: (*p0).x0[k1].p1->p2[k2].x1 and (*p0).x0[k1].p1->p2[k2].x1[k3].x2.

containing structure

For C/C++, a structure to which a series of zero or more . (dot) operators and/or array subscript operators are applied to yield a given lvalue expression or array section for which storage is contained by the structure.

For Fortran, a structure to which a series of zero or more component selectors and/or array subscript selectors are applied to yield a given variable or array section for which storage is contained by the structure.

COMMENT: A structure is a containing structure of itself. For C/C++, a structure pointer p to which the -> operator applies is equivalent to the application of a . (dot) operator to (*p) for the purposes of determining containing structures.

For the array section (*p0).x0[k1].p1->p2[k2].x1[k3].x2[4][0:n], where identifiers pi have a pointer type declaration and identifiers xi have an array type declaration, the containing structures are: *(*p0).x0[k1].p1, (*(*p0).x0[k1].p1).p2[k2] and (*(*p0).x0[k1].p1).p2[k2].x1[k3]

base array

For C/C++, a containing array of a given lvalue expression or array section that does not appear in the expression of any of its other containing arrays.

For Fortran, a containing array of a given variable or array section that does not appear in the designator of any of its other containing arrays.

COMMENT: For the array section (*p0).x0[k1].p1->p2[k2].x1[k3].x2[4][0:n], where identifiers pi have a pointer type declaration and identifiers xi have an array type declaration, the base array is: (*p0).x0[k1].p1->p2[k2].x1[k3].x2.

named array

For C/C++, a containing array of a given lvalue expression or array section, or a containing array of one of its named pointers.

For Fortran, a containing array of a given variable or array section, or a containing array of one of its named pointers.

COMMENT: For the array section (*p0).x0[k1].p1->p2[k2].x1[k3].x2[4][0:n], where identifiers pi have a pointer type declaration and identifiers xi have an array type declaration, the named arrays are: (*p0).x0, (*p0).x0[k1].p1->p2[k2].x1, and (*p0).x0[k1].p1->p2[k2].x1[k3].x2.

base expression

The base array of a given array section or array element, if it exists; otherwise, the base pointer of the array section or array element.

COMMENT: For the array section (*p0).x0[k1].p1->p2[k2].x1[k3].x2[4][0:n], where identifiers pi have a pointer type declaration and identifiers xi have an array type declaration, the base expression is: (*p0).x0[k1].p1->p2[k2].x1[k3].x2.

More examples for C/C++:

Examples for Fortran:

base variable

For a given data entity that is a variable or array section, a variable denoted by a base language identifier that is either the data entity or is a containing array or containing structure of the data entity.

COMMENT:

Examples for C/C++:

Examples for Fortran:

attached pointer

A pointer variable in a device data environment to which the effect of a map clause assigns the address of an object, minus some offset, that is created in the device data environment. The pointer is an attached pointer for the remainder of its lifetime in the device data environment.

simply contiguous array section

An array section that statically can be determined to have contiguous storage or that, in Fortran, has the CONTIGUOUS attribute.

structure

A structure is a variable that contains one or more variables.

For C/C++: Implemented using struct types.

For C++: Implemented using class types.

For Fortran: Implemented using derived types.

string literal

For C/C++, a string literal.

For Fortran, a character literal constant.

private variable

With respect to a given set of task regions or SIMD lanes that bind to the same parallel region, a variable for which the name provides access to a different block of storage for each task region or SIMD lane.

A variable that is part of another variable (as an array element or a structure element) cannot be made private independently of other components. If a variable is privatized, its components are also private.

shared variable

With respect to a given set of task regions that bind to the same parallel region, a variable for which the name provides access to the same block of storage for each task region.

A variable that is part of another variable (as an array element or a structure element) cannot be shared independently of the other components, except for static data members of C++ classes.

threadprivate variable

A variable that is replicated, one instance per thread, by the OpenMP implementation. Its name then provides access to a different block of storage for each thread.

A variable that is part of another variable (as an array element or a structure element) cannot be made threadprivate independently of the other components, except for static data members of C++ classes. If a variable is made threadprivate, its components are also threadprivate.

threadprivate memory

The set of threadprivate variables associated with each thread.

data environment

The variables associated with the execution of a given region.

device data environment

The initial data environment associated with a device.

device address

An address of an object that may be referenced on a target device.

device pointer

An implementation-defined handle that refers to a device address.

mapped variable

An original variable in a data environment with a corresponding variable in a device data environment.

COMMENT: The original and corresponding variables may share storage.

mapping operation

An operation that establishes or removes a correspondence between a variable in one data environment and another variable in a device data environment.

mapper

An operation that defines how variables of given type are to be mapped or updated with respect to a device data environment.

user-defined mapper

A mapper that is defined by a declare mapper directive.

map-type decay

The process that determines the final map types of the map operations that result from mapping a variable with a user-defined mapper.

mappable type

A type that is valid for a mapped variable. If a type is composed from other types (such as the type of an array element or a structure element) and any of the other types are not mappable then the type is not mappable.

COMMENT: Pointer types are mappable but the memory block to which the pointer refers is not mapped.

For C, the type must be a complete type.

For C++, the type must be a complete type.

In addition, for class types:

For Fortran, no restrictions on the type except that for derived types:

defined

For variables, the property of having a valid value.

For C, for the contents of variables, the property of having a valid value.

For C++, for the contents of variables of POD (plain old data) type, the property of having a valid value.

For variables of non-POD class type, the property of having been constructed but not subsequently destructed.

For Fortran, for the contents of variables, the property of having a valid value. For the allocation or association status of variables, the property of having a valid status.

COMMENT: Programs that rely upon variables that are not defined are non-conforming programs.

class type

For C++, variables declared with one of the class, struct, or union keywords.

static storage duration

For C/C++, the lifetime of an object with static storage duration, as defined by the base language.

For Fortran, the lifetime of a variable with a SAVE attribute, implicit or explicit, a common block object or a variable declared in a module.

NULL

A null pointer. For C, the value NULL. For C++, the value NULL or the value nullptr. For Fortran, the value C_NULL_PTR.

non-null value

A value that is not NULL.

non-null pointer

A pointer that is not NULL.