ATOMIC_DEFAULT_MEM_ORDER (SEQ_CST | ACQ_REL | RELAXED)
Specifies the default memory ordering behavior that an implementation must support for ATOMIC constructs.
If more than one REQUIRES directive contains an ATOMIC_DEFAULT_MEM_ORDER clause, each REQUIRES directive in the same compilation unit that specifies ATOMIC_DEFAULT_MEM_ORDER must specify the same parameter for that clause.
When this clause is specified, it must appear lexically prior to any ATOMIC construct that does not contain a memory order clause.
For information about settings SEQ_CST, ACQ_REL, and RELAXED, see the ATOMIC construct.
DYNAMIC_ALLOCATORS
Tells the compiler that the USES_ALLOCATORS clause is optional in TARGET constructs that use allocators in the corresponding TARGET regions.
If DYNAMIC_ALLOCATORS are supported:
Calls to OMP_INIT_ALLOCATOR and OMP_DESTROY_ALLOCATOR are permitted in TARGET regions.
Default allocators can be used by ALLOCATE directives and clauses, and in the OMP_ALLOC routines in TARGET regions.
UNIFIED_ADDRESS
Tells the compiler that all devices available through OpenMP* directives and API procedures must have a unified address space.
A pointer to this address space will refer to the same memory location when referenced from all available devices. OpenMP* mechanisms returning device pointers, return device addresses supporting pointer arithmetic.
When this clause is specified, the IS_DEVICE_POINTER clause is not needed to obtain device addresses from device pointers for use in TARGET regions.
Host device pointers can be passed as device pointer arguments to device memory procedures, and device pointers can be passed as host pointer arguments to device procedures. A non-host device may have discreet memory. In this case, referencing a host pointer on such a device or referencing a device pointer on the host will result in unspecified behavior.
Memory local to a specific execution context may be exempt from the UNIFIED_ADDRESS requirements. It may adhere to the requirements of locality to a given thread, contention group, or execution context.
UNIFIED_SHARED_MEMORY
This clause implies the UNIFIED_ADDRESS clause. It also causes memory addresses to be accessible to threads on all available devices, with the exception of memory that is local to a specific execution context as described in UNIFIED_ADDRESS.
All device addresses referring to memory allocated through OpenMP* device memory routines are valid host pointers that may be dereferenced.
If UNIFIED_SHARED_MEMORY is supported:
By default, scalar variables are FIRSTPRIVATE inside TARGET constructs.
A value stored to memory by one device may not be visible to another device until the two devices have synchronized, or both devices synchronize with the host.
Only one occurrence of each clause is permitted in the REQUIRES directive. At least one clause is required.