| OPENMP API Specification: Version 5.1 November 2020
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
A structured block, or, for C/C++, a sequence of two or more executable
statements that together have 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 executable constructs, where the first executable construct is not a
Fortran
BLOCK construct, with a single entry at the top and a single exit at the bottom, or an OpenMP
construct.
COMMENT:
In
Fortran
code,
when
a
strictly
structured
block
appears
within
an
OpenMP
construct,
that
OpenMP
construct
does
not
usually
require
a
paired
end directive
to
define
the
range
of
the
OpenMP
construct,
while
an
OpenMP
construct
that
contains
a
loosely
structured
block
relies
on
the
paired
end directive
to
define
the
range
of
the
OpenMP
construct.
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 2.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 is neither declarative nor executable, but otherwise facilitates
interactions with the compiler and/or supports code readability.
stand-alone directive
An OpenMP executable directive that has no associated user code, but may produce
implementation code resulting from clauses in the directive.
construct
An OpenMP executable directive (and for Fortran, the paired enddirective, if any) and the
associated statement, loop nest or structured block, if any, not including the code in any called routines.
That is, the lexical extent of an executable directive.
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 parallelregion that is executed by a team consisting of more than one thread.
inactive parallel region
A parallelregion that is executed by a team of only one thread.
active target region
A targetregion that is executed on a device other than the device that encountered the
targetconstruct.
inactive target region
A targetregion 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
parallelregion corresponding to a
parallelconstruct or a
taskregion 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 parallelconstruct, creates a team, generates a set of implicit tasks, and then
executes one of those tasks as thread number 0.
parent thread
The thread that encountered the parallelconstruct and generated a parallelregion is
the parent thread of each of the threads in the team of that parallelregion. The primary thread of a
parallelregion 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
parallelregion.
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
parallelconstruct.
Implicit parallel regions surround the whole
OpenMP program, all
targetregions, 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 2.22
for
the
restrictions
on
nesting.
closely nested region
A region nested inside another region with no parallelregion 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 parallelregion.
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
parallelregion 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 teamsregion, 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.
worksharing construct
A construct that divides the work within its structured block into partitions, each
of which is executed exactly once by one of the threads in the team executing the construct.
device construct
An OpenMP construct that accepts the device clause.
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.
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.