.. raw:: html | |
<style type="text/css"> | |
.none { background-color: #FFCCCC } | |
.part { background-color: #FFFF99 } | |
.good { background-color: #CCFF99 } | |
</style> | |
.. role:: none | |
.. role:: part | |
.. role:: good | |
.. contents:: | |
:local: | |
============== | |
OpenMP Support | |
============== | |
Clang fully supports OpenMP 4.5, almost all of 5.0 and most of 5.1/2. | |
Clang supports offloading to X86_64, AArch64, PPC64[LE], NVIDIA GPUs (all models) and AMD GPUs (all models). | |
In addition, the LLVM OpenMP runtime `libomp` supports the OpenMP Tools | |
Interface (OMPT) on x86, x86_64, AArch64, and PPC64 on Linux, Windows, and macOS. | |
OMPT is also supported for NVIDIA and AMD GPUs. | |
For the list of supported features from OpenMP 5.0 and 5.1 | |
see `OpenMP implementation details`_ and `OpenMP 51 implementation details`_. | |
General improvements | |
==================== | |
- New collapse clause scheme to avoid expensive remainder operations. | |
Compute loop index variables after collapsing a loop nest via the | |
collapse clause by replacing the expensive remainder operation with | |
multiplications and additions. | |
- When using the collapse clause on a loop nest the default behavior | |
is to automatically extend the representation of the loop counter to | |
64 bits for the cases where the sizes of the collapsed loops are not | |
known at compile time. To prevent this conservative choice and use | |
at most 32 bits, compile your program with the | |
`-fopenmp-optimistic-collapse`. | |
GPU devices support | |
=================== | |
Data-sharing modes | |
------------------ | |
Clang supports two data-sharing models for Cuda devices: `Generic` and `Cuda` | |
modes. The default mode is `Generic`. `Cuda` mode can give an additional | |
performance and can be activated using the `-fopenmp-cuda-mode` flag. In | |
`Generic` mode all local variables that can be shared in the parallel regions | |
are stored in the global memory. In `Cuda` mode local variables are not shared | |
between the threads and it is user responsibility to share the required data | |
between the threads in the parallel regions. Often, the optimizer is able to | |
reduce the cost of `Generic` mode to the level of `Cuda` mode, but the flag, | |
as well as other assumption flags, can be used for tuning. | |
Features not supported or with limited support for Cuda devices | |
--------------------------------------------------------------- | |
- Cancellation constructs are not supported. | |
- Doacross loop nest is not supported. | |
- User-defined reductions are supported only for trivial types. | |
- Nested parallelism: inner parallel regions are executed sequentially. | |
- Debug information for OpenMP target regions is supported, but sometimes it may | |
be required to manually specify the address class of the inspected variables. | |
In some cases the local variables are actually allocated in the global memory, | |
but the debug info may be not aware of it. | |
.. _OpenMP implementation details: | |
OpenMP 5.0 Implementation Details | |
================================= | |
The following table provides a quick overview over various OpenMP 5.0 features | |
and their implementation status. Please post on the | |
`Discourse forums (Runtimes - OpenMP category)`_ for more | |
information or if you want to help with the | |
implementation. | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
|Category | Feature | Status | Reviews | | |
+==============================+==============================================================+==========================+=======================================================================+ | |
| loop | support != in the canonical loop form | :good:`done` | D54441 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| loop | #pragma omp loop (directive) | :part:`partial` | D145823 (combined forms) | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| loop | #pragma omp loop bind | :part:`worked on` | D144634 (needs review) | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| loop | collapse imperfectly nested loop | :good:`done` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| loop | collapse non-rectangular nested loop | :good:`done` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| loop | C++ range-base for loop | :good:`done` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| loop | clause: if for SIMD directives | :good:`done` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| loop | inclusive scan (matching C++17 PSTL) | :good:`done` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| memory management | memory allocators | :good:`done` | r341687,r357929 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| memory management | allocate directive and allocate clause | :good:`done` | r355614,r335952 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| OMPD | OMPD interfaces | :good:`done` | https://reviews.llvm.org/D99914 (Supports only HOST(CPU) and Linux | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| OMPT | OMPT interfaces (callback support) | :good:`done` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| thread affinity | thread affinity | :good:`done` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| task | taskloop reduction | :good:`done` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| task | task affinity | :part:`not upstream` | https://github.com/jklinkenberg/openmp/tree/task-affinity | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| task | clause: depend on the taskwait construct | :good:`done` | D113540 (regular codegen only) | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| task | depend objects and detachable tasks | :good:`done` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| task | mutexinoutset dependence-type for tasks | :good:`done` | D53380,D57576 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| task | combined taskloop constructs | :good:`done` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| task | master taskloop | :good:`done` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| task | parallel master taskloop | :good:`done` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| task | master taskloop simd | :good:`done` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| task | parallel master taskloop simd | :good:`done` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| SIMD | atomic and simd constructs inside SIMD code | :good:`done` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| SIMD | SIMD nontemporal | :good:`done` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | infer target functions from initializers | :part:`worked on` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | infer target variables from initializers | :good:`done` | D146418 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | OMP_TARGET_OFFLOAD environment variable | :good:`done` | D50522 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | support full 'defaultmap' functionality | :good:`done` | D69204 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | device specific functions | :good:`done` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | clause: device_type | :good:`done` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | clause: extended device | :good:`done` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | clause: uses_allocators clause | :good:`done` | https://github.com/llvm/llvm-project/pull/157025 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | clause: in_reduction | :part:`worked on` | r308768 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | omp_get_device_num() | :good:`done` | D54342,D128347 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | structure mapping of references | :none:`unclaimed` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | nested target declare | :good:`done` | D51378 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | implicitly map 'this' (this[:1]) | :good:`done` | D55982 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | allow access to the reference count (omp_target_is_present) | :good:`done` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | requires directive | :good:`done` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | clause: unified_shared_memory | :good:`done` | D52625,D52359 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | clause: unified_address | :part:`partial` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | clause: reverse_offload | :part:`partial` | D52780,D155003 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | clause: atomic_default_mem_order | :good:`done` | D53513 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | clause: dynamic_allocators | :part:`unclaimed parts` | D53079 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | user-defined mappers | :good:`done` | D56326,D58638,D58523,D58074,D60972,D59474 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | map array-section with implicit mapper | :good:`done` | https://github.com/llvm/llvm-project/pull/101101 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | mapping lambda expression | :good:`done` | D51107 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | clause: use_device_addr for target data | :good:`done` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | support close modifier on map clause | :good:`done` | D55719,D55892 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | teams construct on the host device | :good:`done` | r371553 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | support non-contiguous array sections for target update | :good:`done` | https://github.com/llvm/llvm-project/pull/144635 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | pointer attachment | :good:`done` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| atomic | hints for the atomic construct | :good:`done` | D51233 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| base language | C11 support | :good:`done` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| base language | C++11/14/17 support | :good:`done` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| base language | lambda support | :good:`done` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| misc | array shaping | :good:`done` | D74144 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| misc | library shutdown (omp_pause_resource[_all]) | :good:`done` | D55078 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| misc | metadirectives | :part:`mostly done` | D91944, https://github.com/llvm/llvm-project/pull/128640 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| misc | conditional modifier for lastprivate clause | :good:`done` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| misc | iterator and multidependences | :good:`done` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| misc | depobj directive and depobj dependency kind | :good:`done` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| misc | user-defined function variants | :good:`done`. | D67294, D64095, D71847, D71830, D109635 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| misc | pointer/reference to pointer based array reductions | :good:`done` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| misc | prevent new type definitions in clauses | :good:`done` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| memory model | memory model update (seq_cst, acq_rel, release, acquire,...) | :good:`done` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
.. _OpenMP 51 implementation details: | |
OpenMP 5.1 Implementation Details | |
================================= | |
The following table provides a quick overview over various OpenMP 5.1 features | |
and their implementation status. | |
Please post on the | |
`Discourse forums (Runtimes - OpenMP category)`_ for more | |
information or if you want to help with the | |
implementation. | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
|Category | Feature | Status | Reviews | | |
+==============================+==============================================================+==========================+=======================================================================+ | |
| atomic | 'compare' clause on atomic construct | :good:`done` | D120290, D120007, D118632, D120200, D116261, D118547, D116637 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| atomic | 'fail' clause on atomic construct | :part:`worked on` | D123235 (in progress) | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| base language | C++ attribute specifier syntax | :good:`done` | D105648 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | 'present' map type modifier | :good:`done` | D83061, D83062, D84422 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | 'present' motion modifier | :good:`done` | D84711, D84712 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | 'present' in defaultmap clause | :good:`done` | D92427 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | map clause reordering based on 'present' modifier | :none:`unclaimed` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | device-specific environment variables | :none:`unclaimed` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | omp_target_is_accessible routine | :part:`In Progress` | https://github.com/llvm/llvm-project/pull/138294 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | omp_get_mapped_ptr routine | :good:`done` | D141545 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | new async target memory copy routines | :good:`done` | D136103 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | thread_limit clause on target construct | :part:`partial` | D141540 (offload), D152054 (host, in progress) | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | has_device_addr clause on target construct | :none:`unclaimed` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | iterators in map clause or motion clauses | :none:`unclaimed` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | indirect clause on declare target directive | :part:`In Progress` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | allow virtual functions calls for mapped object on device | :part:`partial` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | interop construct | :part:`partial` | parsing/sema done: D98558, D98834, D98815 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| device | assorted routines for querying interoperable properties | :part:`partial` | D106674 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| loop | Loop tiling transformation | :good:`done` | D76342 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| loop | Loop unrolling transformation | :good:`done` | D99459 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| loop | 'reproducible'/'unconstrained' modifiers in 'order' clause | :part:`partial` | D127855 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| memory management | alignment for allocate directive and clause | :good:`done` | D115683 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| memory management | 'allocator' modifier for allocate clause | :good:`done` | https://github.com/llvm/llvm-project/pull/114883 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| memory management | 'align' modifier for allocate clause | :good:`done` | https://github.com/llvm/llvm-project/pull/121814 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| memory management | new memory management routines | :none:`unclaimed` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| memory management | changes to omp_alloctrait_key enum | :none:`unclaimed` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| memory model | seq_cst clause on flush construct | :good:`done` | https://github.com/llvm/llvm-project/pull/114072 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| misc | 'omp_all_memory' keyword and use in 'depend' clause | :good:`done` | D125828, D126321 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| misc | error directive | :good:`done` | D139166 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| misc | scope construct | :good:`done` | D157933, https://github.com/llvm/llvm-project/pull/109197 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| misc | routines for controlling and querying team regions | :part:`partial` | D95003 (libomp only) | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| misc | changes to ompt_scope_endpoint_t enum | :none:`unclaimed` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| misc | omp_display_env routine | :good:`done` | D74956 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| misc | extended OMP_PLACES syntax | :none:`unclaimed` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| misc | OMP_NUM_TEAMS and OMP_TEAMS_THREAD_LIMIT env vars | :good:`done` | D138769 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| misc | 'target_device' selector in context specifier | :none:`worked on` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| misc | begin/end declare variant | :good:`done` | D71179 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| misc | dispatch construct and function variant argument adjustment | :part:`worked on` | D99537, D99679 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| misc | assumes directives | :part:`worked on` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| misc | assume directive | :good:`done` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| misc | nothing directive | :good:`done` | D123286 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| misc | masked construct and related combined constructs | :good:`done` | D99995, D100514, PR-121741(parallel_masked_taskloop) | | |
| | | | PR-121746(parallel_masked_task_loop_simd),PR-121914(masked_taskloop) | | |
| | | | PR-121916(masked_taskloop_simd) | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| misc | default(firstprivate) & default(private) | :good:`done` | D75591 (firstprivate), D125912 (private) | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| other | deprecating master construct | :none:`unclaimed` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| OMPT | new barrier types added to ompt_sync_region_t enum | :none:`unclaimed` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| OMPT | async data transfers added to ompt_target_data_op_t enum | :none:`unclaimed` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| OMPT | new barrier state values added to ompt_state_t enum | :none:`unclaimed` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| OMPT | new 'emi' callbacks for external monitoring interfaces | :good:`done` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| OMPT | device tracing interface | :none:`in progress` | jplehr | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| task | 'strict' modifier for taskloop construct | :none:`unclaimed` | | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| task | inoutset in depend clause | :good:`done` | D97085, D118383 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
| task | nowait clause on taskwait | :part:`partial` | parsing/sema done: D131830, D141531 | | |
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ | |
.. _OpenMP 5.2 implementation details: | |
OpenMP 5.2 Implementation Details | |
================================= | |
The following table provides a quick overview of various OpenMP 5.2 features | |
and their implementation status. Please post on the | |
`Discourse forums (Runtimes - OpenMP category)`_ for more | |
information or if you want to help with the | |
implementation. | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
|Feature | C/C++ Status | Fortran Status | Reviews | | |
+=============================================================+===========================+===========================+==========================================================================+ | |
| omp_in_explicit_task() | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| semantics of explicit_task_var and implicit_task_var | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| ompx sentinel for C/C++ directive extensions | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| ompx prefix for clause extensions | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| if clause on teams construct | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| step modifier added | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| declare mapper: Add iterator modifier on map clause | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| declare mapper: Add iterator modifier on map clause | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| memspace and traits modifiers to uses allocator i | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| Add otherwise clause to metadirectives | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| doacross clause with support for omp_cur_iteration | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| position of interop_type in init clause on iterop | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| implicit map type for target enter/exit data | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| work OMPT type for work-sharing loop constructs | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| allocate and firstprivate on scope directive | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| Change loop consistency for order clause | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| Add memspace and traits modifiers to uses_allocators | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| Keep original base pointer on map w/o matched candidate | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| Pure procedure support for certain directives | :none:`N/A` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| ALLOCATE statement support for allocators | :none:`N/A` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| dispatch construct extension to support end directive | :none:`N/A` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
|OpenMP 5.2 Deprecations | C/C++ Status | Fortran Status | Reviews | | |
+=============================================================+===========================+===========================+==========================================================================+ | |
| Linear clause syntax | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| The minus operator | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| Map clause modifiers without commas | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| The use of allocate directives with ALLOCATE statement | :good:`N/A` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| uses_allocators list syntax | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| The default clause on metadirectives | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| The delimited form of the declare target directive | :none:`unclaimed` | :good:`N/A` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| The use of the to clause on the declare target directive | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| The syntax of the destroy clause on the depobj construct | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| keyword source and sink as task-dependence modifiers | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| interop types in any position on init clause of interop | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| ompd prefix usage for some ICVs | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
.. _OpenMP 6.0 implementation details: | |
OpenMP 6.0 Implementation Details | |
================================= | |
The following table provides a quick overview of various OpenMP 6.0 features | |
and their implementation status. Please post on the | |
`Discourse forums (Runtimes - OpenMP category)`_ for more | |
information or if you want to help with the | |
implementation. | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
|Feature | C/C++ Status | Fortran Status | Reviews | | |
+=============================================================+===========================+===========================+==========================================================================+ | |
| free-agent threads | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| threadset clause | :part:`in progress` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| Recording of task graphs | :part:`in progress` | :part:`in progress` | clang: jtb20, flang: kparzysz | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| Parallel inductions | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| init_complete for scan directive | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| loop interchange transformation | :good:`done` | :none:`unclaimed` | Clang (interchange): https://github.com/llvm/llvm-project/pull/93022 | | |
| | | | Clang (permutation): https://github.com/llvm/llvm-project/pull/92030 | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| loop reverse transformation | :good:`done` | :none:`unclaimed` | https://github.com/llvm/llvm-project/pull/92916 | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| loop stripe transformation | :good:`done` | :none:`unclaimed` | https://github.com/llvm/llvm-project/pull/119891 | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| loop fusion transformation | :part:`in progress` | :none:`unclaimed` | https://github.com/llvm/llvm-project/pull/139293 | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| loop index set splitting transformation | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| loop transformation apply clause | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| workdistribute construct | | :none:`in progress` | @skc7, @mjklemm | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| task_iteration | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| memscope clause for atomic and flush | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| transparent clause (hull tasks) | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| rule-based compound directives | :none:`unclaimed` | :part:`In Progress` | Testing for Fortran missing | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| C23, C++23 | :none:`unclaimed` | | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| Fortran 2023 | | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| decl attribute for declarative directives | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| C attribute syntax | :none:`unclaimed` | | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| pure directives in DO CONCURRENT | | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| Optional argument for all clauses | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| Function references for locator list items | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| All clauses accept directive name modifier | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| Extensions to depobj construct | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| Extensions to atomic construct | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| Private reductions | :good:`mostly` | :none:`unclaimed` | Parse/Sema:https://github.com/llvm/llvm-project/pull/129938 | | |
| | | | Codegen: https://github.com/llvm/llvm-project/pull/134709 | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| Self maps | :part:`partial` | :none:`unclaimed` | parsing/sema done: https://github.com/llvm/llvm-project/pull/129888 | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| Release map type for declare mapper | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| Extensions to interop construct | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| no_openmp_constructs | :good:`done` | :none:`unclaimed` | https://github.com/llvm/llvm-project/pull/125933 | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| safe_sync and progress with identifier and API | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| OpenMP directives in concurrent loop regions | :good:`done` | :none:`unclaimed` | https://github.com/llvm/llvm-project/pull/125621 | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| atomics constructs on concurrent loop regions | :good:`done` | :none:`unclaimed` | https://github.com/llvm/llvm-project/pull/125621 | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| Loop construct with DO CONCURRENT | | :part:`In Progress` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| device_type clause for target construct | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| nowait for ancestor target directives | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| New API for devices' num_teams/thread_limit | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| Host and device environment variables | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| num_threads ICV and clause accepts list | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| Numeric names for environment variables | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| Increment between places for OMP_PLACES | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| OMP_AVAILABLE_DEVICES envirable | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| Traits for default device envirable | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| Optionally omit array length expression | :good:`done` | :none:`unclaimed` | (Parse) https://github.com/llvm/llvm-project/pull/148048, | | |
| | | | (Sema) https://github.com/llvm/llvm-project/pull/152786 | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| Canonical loop sequences | :part:`in progress` | :part:`in progress` | Clang: https://github.com/llvm/llvm-project/pull/139293 | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| Clarifications to Fortran map semantics | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| default clause at target construct | :part:`In Progress` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| ref count update use_device_{ptr, addr} | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| Clarifications to implicit reductions | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| ref modifier for map clauses | :part:`In Progress` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| map-type modifiers in arbitrary position | :good:`done` | :none:`unclaimed` | https://github.com/llvm/llvm-project/pull/90499 | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| Lift nesting restriction on concurrent loop | :good:`done` | :none:`unclaimed` | https://github.com/llvm/llvm-project/pull/125621 | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| priority clause for target constructs | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| changes to target_data construct | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| Non-const do_not_sync for nowait/nogroup | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| need_device_addr modifier for adjust_args clause | :part:`partial` | :none:`unclaimed` | Parsing/Sema: https://github.com/llvm/llvm-project/pull/143442 | | |
| | | | https://github.com/llvm/llvm-project/pull/149586 | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| Prescriptive num_threads | :part:`In Progress` | :none:`unclaimed` | ro-i | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| Message and severity clauses | :part:`In Progress` | :none:`unclaimed` | ro-i | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| Local clause on declare target | :part:`In Progress` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| groupprivate directive | :part:`In Progress` | :part:`partial` | Flang: kparzysz, mjklemm | | |
| | | | | | |
| | | | Flang parser: https://github.com/llvm/llvm-project/pull/153807 | | |
| | | | Flang sema: https://github.com/llvm/llvm-project/pull/154779 | | |
| | | | Clang parse/sema: https://github.com/llvm/llvm-project/pull/158134 | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| variable-category on default clause | :good:`done` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| Changes to omp_target_is_accessible | :part:`In Progress` | :part:`In Progress` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| defaultmap implicit-behavior 'storage' | :good:`done` | :none:`unclaimed` | https://github.com/llvm/llvm-project/pull/158336 | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| defaultmap implicit-behavior 'private' | :good:`done` | :none:`unclaimed` | https://github.com/llvm/llvm-project/pull/158712 | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
.. _OpenMP 6.1 implementation details: | |
OpenMP 6.1 Implementation Details (Experimental) | |
================================================ | |
The following table provides a quick overview over various OpenMP 6.1 features | |
and their implementation status. Since OpenMP 6.1 has not yet been released, the | |
following features are experimental and are subject to change at any time. | |
Please post on the `Discourse forums (Runtimes - OpenMP category)`_ for more | |
information or if you want to help with the | |
implementation. | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
|Feature | C/C++ Status | Fortran Status | Reviews | | |
+=============================================================+===========================+===========================+==========================================================================+ | |
| dyn_groupprivate clause | :part:`In Progress` | :part:`In Progress` | C/C++: kevinsala (https://github.com/llvm/llvm-project/pull/152651 | | |
| | | | https://github.com/llvm/llvm-project/pull/152830 | | |
| | | | https://github.com/llvm/llvm-project/pull/152831) | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| loop flatten transformation | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
| loop grid/tile modifiers for sizes clause | :none:`unclaimed` | :none:`unclaimed` | | | |
+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ | |
OpenMP Extensions | |
================= | |
The following table provides a quick overview over various OpenMP | |
extensions and their implementation status. These extensions are not | |
currently defined by any standard, so links to associated LLVM | |
documentation are provided. As these extensions mature, they will be | |
considered for standardization. Please post on the | |
`Discourse forums (Runtimes - OpenMP category)`_ to provide feedback. | |
+------------------------------+-----------------------------------------------------------------------------------+--------------------------+--------------------------------------------------------+ | |
|Category | Feature | Status | Reviews | | |
+==============================+===================================================================================+==========================+========================================================+ | |
| atomic extension | `'atomic' strictly nested within 'teams' | :good:`prototyped` | D126323 | | |
| | <https://openmp.llvm.org/docs/openacc/OpenMPExtensions.html#atomicWithinTeams>`_ | | | | |
+------------------------------+-----------------------------------------------------------------------------------+--------------------------+--------------------------------------------------------+ | |
| device extension | `'ompx_hold' map type modifier | :good:`prototyped` | D106509, D106510 | | |
| | <https://openmp.llvm.org/docs/openacc/OpenMPExtensions.html#ompx-hold>`_ | | | | |
+------------------------------+-----------------------------------------------------------------------------------+--------------------------+--------------------------------------------------------+ | |
| device extension | `'ompx_bare' clause on 'target teams' construct | :good:`prototyped` | #66844, #70612 | | |
| | <https://www.osti.gov/servlets/purl/2205717>`_ | | | | |
+------------------------------+-----------------------------------------------------------------------------------+--------------------------+--------------------------------------------------------+ | |
| device extension | Multi-dim 'num_teams' and 'thread_limit' clause on 'target teams ompx_bare' | :good:`partial` | #99732, #101407, #102715 | | |
| | construct | | | | |
+------------------------------+-----------------------------------------------------------------------------------+--------------------------+--------------------------------------------------------+ | |
.. _Discourse forums (Runtimes - OpenMP category): https://discourse.llvm.org/c/runtimes/openmp/35 |