OpenMP* Directives
Intel® compilers,
icx
, icpx
, and ifx
support various OpenMP*
device directives that control the offloading of computations and
mapping of data onto a device. These include:- target
- teams
- distribute
- target data
- target enter data
- target exit data
- target update
- declare target
- dispatch
The
target
construct specifies that a specific part of the code is
to be executed on the device and how data is to be mapped to the
device.The
teams
construct creates a number of thread teams, where each
team is composed of a master thread and a number of worker threads. If
teams
is specified without the num_teams
clause, then the
number of teams is implementation defined.The
distribute
construct distributes iterations of a loop to the
master thread of each team.The
target data
construct maps variables to a device data
environment. Variables are mapped for the extent of the target
data
region, according to any map
clauses.The
target enter data
directive specifies that variables are
mapped to a device. With this directive, the map-type specified in
map
clauses must be either to
or alloc
.The
target exit data
directive specifies that variables are
unmapped
from the device. With this directive, the map-type
specified in map
clauses must be from
, release
, or
delete
.The
target update
directive makes the values of variables on the
device consistent with their original host variables, according to the
specified motion clauses.The
declare target
directive specifies that variables, functions
(C, C++ and Fortran), and subroutines (Fortran) are mapped to a
device.The
declare variant
directive declares a specialized variant of a
base function and specifies the context in which that specialized
variant is used.The
dispatch
construct controls whether variant substitution
occurs for a given function call. The declare variant
and
dispatch
directives are useful when calling Intel oneAPI Math
Kernel Library (oneMKL) routines from within a target
construct.The
map
clause determines how an original host variable is mapped
to a corresponding variable on the device. Map-types include:- to: The value of the original host variable is copied to the device on entry to thetargetregion.
- from: The value of the variable on the device is copied from the device to the original host variable on exit from thetargetregion.
- tofrom: The value of the original host variable is copied to the device on entry to thetargetregion, and copied back to the host on exit from thetargetregion.
- alloc: Allocate an uninitialized copy of the original host variable on the device (values are not copied from the host to the device).
Directives can be combined. For example, the following combined
directives may be used:
- target teams
- target teams distribute
- target teams distribute parallel for
- target teams distribute parallel for simd
It is recommended that combined directives be used where possible because
they allow the compiler and runtime to decide how to best partition the
iterations of an offloaded loop for execution on the GPU.