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).
The
OpenMP
directive
syntax
was
extended
to
include
C++
attribute
specifiers
(see
Section 2.1).
The
omp_all_memory
reserved
locator
was
added
(see
Section 2.1),
and
the
depend
clause
was
extended
to
allow
its
use
(see
Section 2.19.11).
The
target_device
trait
set
was
added
to
the
OpenMP
Context
(see
Section 2.3.1),
and
the
target_device
selector
set
was
added
to
context
selectors
(see
Section 2.3.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 2.3.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 2.3.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 2.3.6).
To
support
device-specific
ICV
settings
the
environment
variable
syntax
was
extended
to
support
device-specific
variables
(see
Section 2.4.2
and
Section 6).
The
assume
directive
was
added
to
allow
users
to
specify
invariants
(see
Section 2.5.2).
To
support
clarity
in
metadirectives,
the
nothing
directive
was
added
(see
Section 2.5.3).
To
allow
users
to
control
the
compilation
process
and
runtime
error
actions,
the
error
directive
was
added
(see
Section 2.5.4).
The
masked
construct
was
added
to
support
restricting
execution
to
a
specific
thread
(see
Section 2.8).
The
scope
directive
was
added
to
support
reductions
without
requiring
a
parallel
or
worksharing
region
(see
Section 2.9).
Loop
transformation
constructs
were
added
(see
Section 2.11.9).
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 2.12.2).
Support
for
the
align
clause
on
the
allocate
directive
and
allocator
and
align
modifiers
on
the
allocate
clause
was
added
(see
Section 2.13).
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 2.14.5).
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 2.14.5).
Support
was
added
so
that
iterators
may
be
defined
and
used
in
a
motion
clause
on
a
targetupdate
directive
(see
Section 2.14.6)
or
in
a
map
clause
(see
Section 2.21.7.1).
Support
was
added
for
indirect
calls
to
the
device
version
of
a
procedure
or
function
in
target
regions.
(see
Section 2.14.7).
The
interop
directive
was
added
to
enable
portable
interoperability
with
foreign
execution
contexts
used
to
implement
OpenMP
(see
Section 2.15.1).
Runtime
routines
that
facilitate
use
of
omp_interop_t
objects
were
also
added
(see
Section 3.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 2.19.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 2.19.7).
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 2.19.8).
To
support
inout
sets,
the
inoutset
argument
was
added
to
the
depend
clause
(see
Section 2.19.11).
Support
for
private
and
firstprivate
as
an
argument
to
the
default
clause
in
C
and
C++
was
added
(see
Section 2.21.4.1).
The
present
argument
was
added
to
the
defaultmap
clause
(see
Section 2.21.7.3).
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 3.4.3
and
Section 3.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 3.4.4
and
Section 3.4.6).
The
omp_target_is_accessible
runtime
routine
was
added
to
test
whether
host
memory
is
accessible
from
a
given
device
(see
Section 3.8.4).
To
support
asynchronous
device
memory
management,
omp_target_memcpy_async
and
omp_target_memcpy_rect_async
runtime
routines
were
added
(see
Section 3.8.7
and
Section 3.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 3.8.11).
The
omp_calloc,
omp_realloc,
omp_aligned_alloc
and
omp_aligned_calloc
API
routines
were
added
(see
Section 3.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 3.13.1).
The
omp_display_env
runtime
routine
was
added
to
provide
information
about
ICVs
and
settings
of
environment
variables
(see
Section 3.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 4.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 4.4.4.13).
Values
for
asynchronous
data
transfers
were
added
to
the
ompt_target_data_op_t
enum
(see
Section 4.4.4.14).
The
ompt_state_wait_barrier_implementation
and
ompt_state_wait_barrier_teams
values
were
added
to
the
ompt_state_t
enum
(see
Section 4.4.4.27).
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 4.5.2.25,
Section 4.5.2.26,
Section 4.5.2.27
and
Section 4.5.2.28).
The
ompt_callback_error_t
type
was
added
(see
Section 4.5.2.30).
The
OMP_PLACES
syntax
was
extended
(see
Section 6.5).
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 6.23
and
Section 6.24).