Full
support
of
C11,
C++11,
C++14,
C++17,
C++20
and
Fortran
2008
was
completed
(see
Section 1.7).
Various
changes
throughout
the
specification
were
made
to
provide
initial
support
of
Fortran
2018
(see
Section 1.7).
To
support
device-specific
ICV
settings
the
environment
variable
syntax
was
extended
to
support
device-specific
variables
(see
Section 2.2
and
Chapter 21).
The
OpenMP
directive
syntax
was
extended
to
include
C++
attribute
specifiers
(see
Section 3.1).
The
omp_all_memory
reserved
locator
was
added
(see
Section 3.1),
and
the
depend
clause
was
extended
to
allow
its
use
(see
Section 15.9.5).
Support
for
private
and
firstprivate
as
an
argument
to
the
default
clause
in
C
and
C++
was
added
(see
Section 5.4.1).
Support
was
added
so
that
iterators
may
be
defined
and
used
in
a
map
clause
(see
Section 5.8.3)
or
in
data-motion
clause
on
a
targetupdate
directive
(see
Section 13.9).
The
present
argument
was
added
to
the
defaultmap
clause
(see
Section 5.8.7).
Support
for
the
align
clause
on
the
allocate
directive
and
allocator
and
align
modifiers
on
the
allocate
clause
was
added
(see
Chapter 6).
The
target_device
trait
set
was
added
to
the
OpenMP
context
(see
Section 7.1),
and
the
target_device
selector
set
was
added
to
context
selectors
(see
Section 7.2).
For
C/C++,
the
declare
variant
directive
was
extended
to
support
elision
of
preprocessed
code
and
to
allow
enclosed
function
definitions
to
be
interpreted
as
variant
functions
(see
Section 7.5).
The
declarevariant
directive
was
extended
with
new
clauses
(adjust_args
and
append_args)
that
support
adjustment
of
the
interface
between
the
original
function
and
its
variants
(see
Section 7.5).
The
dispatch
construct
was
added
to
allow
users
to
control
when
variant
substitution
happens
and
to
define
additional
information
that
can
be
passed
as
arguments
to
the
function
variants
(see
Section 7.6).
Support
was
added
for
indirect
calls
to
the
device
version
of
a
procedure
or
function
in
target
regions
(see
Section 7.8).
Assumption
directives
were
added
to
allow
users
to
specify
invariants
(see
Section 8.3).
To
support
clarity
in
metadirectives,
the
nothing
directive
was
added
(see
Section 8.4).
To
allow
users
to
control
the
compilation
process
and
runtime
error
actions,
the
error
directive
was
added
(see
Section 8.5).
Loop
transformation
constructs
were
added
(see
Chapter 7).
The
masked
construct
was
added
to
support
restricting
execution
to
a
specific
thread
(see
Section 10.5).
The
scope
directive
was
added
to
support
reductions
without
requiring
a
parallel
or
worksharing
region
(see
Section 11.2).
The
grainsize
and
num_tasks
clauses
for
the
taskloop
construct
were
extended
with
a
strict
modifier
to
ensure
a
deterministic
distribution
of
logical
iterations
to
tasks
(see
Section 12.6).
The
thread_limit
clause
was
added
to
the
target
construct
to
control
the
upper
bound
on
the
number
of
threads
in
the
created
contention
group
(see
Section 13.8).
The
has_device_addr
clause
was
added
to
the
target
construct
to
allow
access
to
variables
or
array
sections
that
already
have
a
device
address
(see
Section 13.8).
The
interop
directive
was
added
to
enable
portable
interoperability
with
foreign
execution
contexts
used
to
implement
OpenMP
(see
Section 14.1).
Runtime
routines
that
facilitate
use
of
omp_interop_t
objects
were
also
added
(see
Section 18.12).
The
nowait
clause
was
added
to
the
taskwait
directive
to
support
insertion
of
non-blocking
join
operations
in
a
task
dependence
graph
(see
Section 15.5).
Support
was
added
for
compare-and-swap
and
(for
C
and
C++)
minimum
and
maximum
atomic
operations
through
the
compare
clause.
Support
was
also
added
for
the
specification
of
the
memory
order
to
apply
to
a
failed
comparing
atomic
operation
with
the
fail
clause
(see
Section 15.8.4).
Specification
of
the
seq_cst
clause
on
a
flush
construct
was
allowed,
with
the
same
meaning
as
a
flush
construct
without
a
list
and
without
a
clause
(see
Section 15.8.5).
To
support
inout
sets,
the
inoutset
argument
was
added
to
the
depend
clause
(see
Section 15.9.5).
The
omp_set_num_teams
and
omp_set_teams_thread_limit
runtime
routines
were
added
to
control
the
number
of
teams
and
the
size
of
those
teams
on
the
teams
construct
(see
Section 18.4.3
and
Section 18.4.5).
Additionally,
the
omp_get_max_teams
and
omp_get_teams_thread_limit
runtime
routines
were
added
to
retrieve
the
values
that
will
be
used
in
the
next
teams
construct
(see
Section 18.4.4
and
Section 18.4.6).
The
omp_target_is_accessible
runtime
routine
was
added
to
test
whether
host
memory
is
accessible
from
a
given
device
(see
Section 18.8.4).
To
support
asynchronous
device
memory
management,
omp_target_memcpy_async
and
omp_target_memcpy_rect_async
runtime
routines
were
added
(see
Section 18.8.7
and
Section 18.8.8).
The
omp_get_mapped_ptr
runtime
routine
was
added
to
support
obtaining
the
device
pointer
that
is
associated
with
a
host
pointer
for
a
given
device
(see
Section 18.8.11).
The
omp_calloc,
omp_realloc,
omp_aligned_alloc
and
omp_aligned_calloc
API
routines
were
added
(see
Section 18.13).
For
the
omp_alloctrait_key_t
enum,
the
omp_atv_serialized
value
was
added
and
the
omp_atv_default
value
was
changed
(see
Section 18.13.1).
The
omp_display_env
runtime
routine
was
added
to
provide
information
about
ICVs
and
settings
of
environment
variables
(see
Section 18.15).
The
ompt_scope_beginend
value
was
added
to
the
ompt_scope_endpoint_t
enum
to
indicate
the
coincident
beginning
and
end
of
a
scope
(see
Section 19.4.4.11).
The
ompt_sync_region_barrier_implicit_workshare,
ompt_sync_region_barrier_implicit_parallel,
and
ompt_sync_region_barrier_teams
values
were
added
to
the
ompt_sync_region_t
enum
(see
Section 19.4.4.14).
Values
for
asynchronous
data
transfers
were
added
to
the
ompt_target_data_op_t
enum
(see
Section 19.4.4.15).
The
ompt_state_wait_barrier_implementation
and
ompt_state_wait_barrier_teams
values
were
added
to
the
ompt_state_t
enum
(see
Section 19.4.4.28).
The
ompt_callback_target_data_op_emi_t,
ompt_callback_target_emi_t,
ompt_callback_target_map_emi_t,
and
ompt_callback_target_submit_emi_t
callbacks
were
added
to
support
external
monitoring
interfaces
(see
Section 19.5.2.25,
Section 19.5.2.26,
Section 19.5.2.27
and
Section 19.5.2.28).
The
OMP_PLACES
syntax
was
extended
(see
Section 21.1.6).
The
OMP_NUM_TEAMS
and
OMP_TEAMS_THREAD_LIMIT
environment
variables
were
added
to
control
the
number
and
size
of
teams
on
the
teams
construct
(see
Section 21.6.1
and
Section 21.6.2).