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

1.2.2  OpenMP Language Terminology

base language

A programming language that serves as the foundation of the OpenMP specification.

COMMENT: See Section 1.7 for a listing of current base languages for the OpenMP API.

base program

A program written in a base language.

preprocessed code

For C/C++, a sequence of preprocessing tokens that result from the first six phases of translation, as defined by the base language.

program order

An ordering of operations performed by the same thread as determined by the execution sequence of operations specified by the base language.

COMMENT: For versions of C and C++ that include base language support for threading, program order corresponds to the sequenced before relation between operations performed by the same thread.

structured block

For C/C++, an executable statement, possibly compound, with a single entry at the top and a single exit at the bottom, or an OpenMP construct.

For Fortran, a strictly structured block or a loosely structured block.

structured block sequence

For C/C++, a sequence of zero or more executable statements (including OpenMP constructs) that together have a single entry at the top and a single exit at the bottom.

For Fortran, a block of zero or more executable constructs (including OpenMP constructs) with a single entry at the top and a single exit at the bottom.

strictly structured block

A single Fortran BLOCK construct, with a single entry at the top and a single exit at the bottom.

loosely structured block

A block of zero or more executable constructs (including OpenMP constructs), where the first executable construct (if any) is not a Fortran BLOCK construct, with a single entry at the top and a single exit at the bottom.

compilation unit

For C/C++, a translation unit.

For Fortran, a program unit.

enclosing context

For C/C++, the innermost scope enclosing an OpenMP directive.

For Fortran, the innermost scoping unit enclosing an OpenMP directive.

directive

A base language mechanism to specify OpenMP program behavior.

COMMENT: See Section 3.1 for a description of OpenMP directive syntax in each base language.

white space

A non-empty sequence of space and/or horizontal tab characters.

OpenMP program

A program that consists of a base program that is annotated with OpenMP directives or that calls OpenMP API runtime library routines.

conforming program

An OpenMP program that follows all rules and restrictions of the OpenMP specification.

implementation code

Implicit code that is introduced by the OpenMP implementation.

metadirective

A directive that conditionally resolves to another directive.

declarative directive

An OpenMP directive that may only be placed in a declarative context and results in one or more declarations only; it is not associated with the immediate execution of any user code or implementation code. For C++, if a declarative directive applies to a function declaration or definition and it is specified with one or more C++ attribute specifiers, the specified attributes must be applied to the function as permitted by the base language. For Fortran, a declarative directive must appear after any USE, IMPORT, and IMPLICIT statements in a declarative context.

executable directive

An OpenMP directive that appears in an executable context and results in implementation code and/or prescribes the manner in which associated user code must execute.

informational directive

An OpenMP directive that is neither declarative nor executable, but otherwise conveys user code properties to the compiler.

utility directive

An OpenMP directive that facilitates interactions with the compiler and/or supports code readability; it may be either informational or executable.

stand-alone directive

An OpenMP construct in which no user code is associated, but may produce implementation code.

construct

An OpenMP executable directive and its paired end directive (if any) and the associated structured block (if any) not including the code in any called routines. That is, the lexical extent of an executable directive.

subsidiary directive

An OpenMP directive that is not an executable directive and that appears only as part of an OpenMP construct.

combined construct

A construct that is a shortcut for specifying one construct immediately nested inside another construct. A combined construct is semantically identical to that of explicitly specifying the first construct containing one instance of the second construct and no other statements.

composite construct

A construct that is composed of two constructs but does not have identical semantics to specifying one of the constructs immediately nested inside the other. A composite construct either adds semantics not included in the constructs from which it is composed or provides an effective nesting of the one construct inside the other that would otherwise be non-conforming.

constituent construct

For a given combined or composite construct, a construct from which it, or any one of its constituent constructs, is composed.

COMMENT: The constituent constructs of a target teams distribute parallel for simd construct are the following constructs: target, teams distribute parallel for simd, teams, distribute parallel for simd, distribute, parallel for simd, parallel, for simd, for, and simd.

leaf construct

For a given combined or composite construct, a constituent construct that is not itself a combined or composite construct.

COMMENT: The leaf constructs of a target teams distribute parallel for simd construct are the following constructs: target, teams, distribute, parallel, for, and simd.

combined target construct

A combined construct that is composed of a target construct along with another construct.

region

All code encountered during a specific instance of the execution of a given construct, structured block sequence or OpenMP library routine. A region includes any code in called routines as well as any implementation code. The generation of a task at the point where a task generating construct is encountered is a part of the region of the encountering thread. However, an explicit task region that corresponds to a task generating construct is not part of the region of the encountering thread unless it is an included task region. The point where a target or teams directive is encountered is a part of the region of the encountering thread, but the region that corresponds to the target or teams directive is not.

COMMENTS:

A region may also be thought of as the dynamic or runtime extent of a construct or of an OpenMP library routine.

During the execution of an OpenMP program, a construct may give rise to many regions.

active parallel region

A parallel region that is executed by a team consisting of more than one thread.

inactive parallel region

A parallel region that is executed by a team of only one thread.

active target region

A target region that is executed on a device other than the device that encountered the target construct.

inactive target region

A target region that is executed on the same device that encountered the target construct.

sequential part

All code encountered during the execution of an initial task region that is not part of a parallel region corresponding to a parallel construct or a task region corresponding to a task construct.

COMMENTS:

A sequential part is enclosed by an implicit parallel region.

Executable statements in called routines may be in both a sequential part and any number of explicit parallel regions at different points in the program execution.

primary thread

An OpenMP thread that has thread number 0. A primary thread may be an initial thread or the thread that encounters a parallel construct, creates a team, generates a set of implicit tasks, and then executes one of those tasks as thread number 0.

worker thread

An OpenMP thread that is not the primary thread of a team and that executes one of the implicit tasks of a parallel region.

parent thread

The thread that encountered the parallel construct and generated a parallel region is the parent thread of each of the threads in the team of that parallel region. The primary thread of a parallel region is the same thread as its parent thread with respect to any resources associated with an OpenMP thread.

child thread

When a thread encounters a parallel construct, each of the threads in the generated parallel region’s team are child threads of the encountering thread. The target or teams region’s initial thread is not a child thread of the thread that encountered the target or teams construct.

ancestor thread

For a given thread, its parent thread or one of its parent thread’s ancestor threads.

descendent thread

For a given thread, one of its child threads or one of its child threads’ descendent threads.

team

A set of one or more threads participating in the execution of a parallel region.

COMMENTS:

For an active parallel region, the team comprises the primary thread and at least one additional thread.

For an inactive parallel region, the team comprises only the primary thread.

league

The set of teams created by a teams construct.

contention group

An initial thread and its descendent threads.

implicit parallel region

An inactive parallel region that is not generated from a parallel construct. Implicit parallel regions surround the whole OpenMP program, all target regions, and all teams regions.

initial thread

The thread that executes an implicit parallel region.

initial team

The team that comprises an initial thread executing an implicit parallel region.

nested construct

A construct (lexically) enclosed by another construct.

closely nested construct

A construct nested inside another construct with no other construct nested between them.

explicit region

A region that corresponds to either a construct of the same name or a library routine call that explicitly appears in the program.

nested region

A region (dynamically) enclosed by another region. That is, a region generated from the execution of another region or one of its nested regions.

COMMENT: Some nestings are conforming and some are not. See Section 17.1 for the restrictions on nesting.

closely nested region

A region nested inside another region with no parallel region nested between them.

strictly nested region

A region nested inside another region with no other explicit region nested between them.

all threads

All OpenMP threads participating in the OpenMP program.

current team

All threads in the team executing the innermost enclosing parallel region.

encountering thread

For a given region, the thread that encounters the corresponding construct.

all tasks

All tasks participating in the OpenMP program.

current team tasks

All tasks encountered by the corresponding team. The implicit tasks constituting the parallel region and any descendent tasks encountered during the execution of these implicit tasks are included in this set of tasks.

generating task

For a given region, the task for which execution by a thread generated the region.

binding thread set

The set of threads that are affected by, or provide the context for, the execution of a region.

The binding thread set for a given region can be all threads on a specified set of devices, all threads in a contention group, all primary threads executing an enclosing teams region, the current team, or the encountering thread.

COMMENT: The binding thread set for a particular region is described in its corresponding subsection of this specification.

binding task set

The set of tasks that are affected by, or provide the context for, the execution of a region.

The binding task set for a given region can be all tasks, the current team tasks, all tasks of the current team that are generated in the region, the binding implicit task, or the generating task.

COMMENT: The binding task set for a particular region (if applicable) is described in its corresponding subsection of this specification.

binding region

The enclosing region that determines the execution context and limits the scope of the effects of the bound region is called the binding region.

Binding region is not defined for regions for which the binding thread set is all threads or the encountering thread, nor is it defined for regions for which the binding task set is all tasks.

orphaned construct

A construct that gives rise to a region for which the binding thread set is the current team, but is not nested within another construct that gives rise to the binding region.

work-distribution construct

A construct that is cooperatively executed by threads in the binding thread set of the corresponding region.

worksharing construct

A work-distribution construct that is executed by the thread team of the innermost enclosing parallel region and includes, by default, an implicit barrier.

device construct

An OpenMP construct that accepts the device clause.

cancellable construct

An OpenMP construct that can be cancelled.

device routine

A function (for C/C++ and Fortran) or subroutine (for Fortran) that can be executed on a target device, as part of a target region.

target variant

A version of a device routine that can only be executed as part of a target region.

foreign runtime environment

A runtime environment that exists outside the OpenMP runtime with which the OpenMP implementation may interoperate.

foreign execution context

A context that is instantiated from a foreign runtime environment in order to facilitate execution on a given device.

foreign task

A unit of work executed in a foreign execution context.

indirect device invocation

An indirect call to the device version of a procedure on a device other than the host device, through a function pointer (C/C++), a pointer to a member function (C++) or a procedure pointer (Fortran) that refers to the host version of the procedure.

place

An unordered set of processors on a device.

place list

The ordered list that describes all OpenMP places available to the execution environment.

place partition

An ordered list that corresponds to a contiguous interval in the OpenMP place list. It describes the places currently available to the execution environment for a given parallel region.

place number

A number that uniquely identifies a place in the place list, with zero identifying the first place in the place list, and each consecutive whole number identifying the next place in the place list.

thread affinity

A binding of threads to places within the current place partition.

SIMD instruction

A single machine instruction that can operate on multiple data elements.

SIMD lane

A software or hardware mechanism capable of processing one data element from a SIMD instruction.

SIMD chunk

A set of iterations executed concurrently, each by a SIMD lane, by a single thread by means of SIMD instructions.

memory

A storage resource to store and to retrieve variables accessible by OpenMP threads.

memory space

A representation of storage resources from which memory can be allocated or deallocated. More than one memory space may exist.

memory allocator

An OpenMP object that fulfills requests to allocate and to deallocate memory for program variables from the storage resources of its associated memory space.

handle

An opaque reference that uniquely identifies an abstraction.