OpenMP 5.0 (GNU libgomp)

### 2.2 OpenMP 5.0 ¶

#### New features listed in Appendix B of the OpenMP specification ¶

Description | Status | Comments
--- | --- | ---
Array shaping | N |
Array sections with non-unit strides in C and C++ | N |
Iterators | Y |
`metadirective` directive | Y |
`declare variant` directive | Y |
target-offload-var ICV and `OMP_TARGET_OFFLOAD` env variable | Y |
Nested-parallel changes to max-active-levels-var ICV | Y |
`requires` directive | Y | See also Offload-Target Specifics
`teams` construct outside an enclosing target region | Y |
Non-rectangular loop nests | P | Full support for C/C++, partial for Fortran (PR110735)
`!=` as relational-op in canonical loop form for C/C++ | Y |
`nonmonotonic` as default loop schedule modifier for worksharing-loop constructs | Y |
Collapse of associated loops that are imperfectly nested loops | Y |
Clauses `if`, `nontemporal` and `order(concurrent)` in `simd` construct | Y |
`atomic` constructs in `simd` | Y |
`loop` construct | Y |
`order(concurrent)` clause | Y |
`scan` directive and `in_scan` modifier for the `reduction` clause | Y |
`in_reduction` clause on `task` constructs | Y |
`in_reduction` clause on `target` constructs | P | `nowait` only stub
`task_reduction` clause with `taskgroup` | Y |
`task` modifier to `reduction` clause | Y |
`affinity` clause to `task` construct | Y | Stub only
`detach` clause to `task` construct | Y |
`omp_fulfill_event` runtime routine | Y |
`reduction` and `in_reduction` clauses on `taskloop` and `taskloop simd` constructs | Y |
`taskloop` construct cancelable by `cancel` construct | Y |
`mutexinoutset` dependence-type for `depend` clause | Y |
Predefined memory spaces, memory allocators, allocator traits | Y | See also Memory allocation
Memory management routines | Y |
`allocate` directive | P | C++ unsupported; see also Memory allocation
`allocate` clause | Y |
`use_device_addr` clause on `target data` | Y |
`ancestor` modifier on `device` clause | Y |
Implicit declare target directive | Y |
Discontiguous array section with `target update` construct | N |
C/C++’s lvalue expressions in `to`, `from` and `map` clauses | Y |
C/C++’s lvalue expressions in `depend` clauses | Y |
Nested `declare target` directive | Y |
Combined `master` constructs | Y |
`depend` clause on `taskwait` | Y |
Weak memory ordering clauses on `atomic` and `flush` construct | Y |
`hint` clause on the `atomic` construct | Y | Stub only
`depobj` construct and depend objects | Y |
Lock hints were renamed to synchronization hints | Y |
`conditional` modifier to `lastprivate` clause | Y |
Map-order clarifications | P |
`close` map-type-modifier | Y |
Mapping C/C++ pointer variables and to assign the address of device memory mapped by an array section | P |
Mapping of Fortran pointer and allocatable variables, including pointer and allocatable components of variables | Y |
`defaultmap` extensions | Y |
`declare mapper` directive | P | Initial support and for C/C++, only
`omp_get_supported_active_levels` routine | Y |
Runtime routines and environment variables to display runtime thread affinity information | Y |
`omp_pause_resource` and `omp_pause_resource_all` runtime routines | Y |
`omp_get_device_num` runtime routine | Y |
OMPT interface | N |
OMPD interface | N |

#### Other new OpenMP 5.0 features ¶

Description | Status | Comments
--- | --- | ---
Supporting C++’s range-based for loop | Y |