2018-01-08 19:02:51 +00:00
|
|
|
.. raw:: html
|
|
|
|
|
|
|
|
<style type="text/css">
|
|
|
|
.none { background-color: #FFCCCC }
|
2019-09-04 17:15:37 +00:00
|
|
|
.part { background-color: #FFFF99 }
|
2018-01-08 19:02:51 +00:00
|
|
|
.good { background-color: #CCFF99 }
|
|
|
|
</style>
|
|
|
|
|
|
|
|
.. role:: none
|
2019-09-04 17:15:37 +00:00
|
|
|
.. role:: part
|
2018-01-08 19:02:51 +00:00
|
|
|
.. role:: good
|
|
|
|
|
2018-07-26 17:53:45 +00:00
|
|
|
.. contents::
|
|
|
|
:local:
|
|
|
|
|
2023-09-29 00:22:58 -07:00
|
|
|
==============
|
2018-01-08 19:02:51 +00:00
|
|
|
OpenMP Support
|
2019-11-06 13:25:16 -05:00
|
|
|
==============
|
2018-01-08 19:02:51 +00:00
|
|
|
|
2023-09-19 22:08:43 +01:00
|
|
|
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).
|
2018-07-26 17:53:45 +00:00
|
|
|
|
|
|
|
In addition, the LLVM OpenMP runtime `libomp` supports the OpenMP Tools
|
2019-01-18 19:57:37 +00:00
|
|
|
Interface (OMPT) on x86, x86_64, AArch64, and PPC64 on Linux, Windows, and macOS.
|
2023-09-19 22:08:43 +01:00
|
|
|
OMPT is also supported for NVIDIA and AMD GPUs.
|
2019-01-18 19:57:37 +00:00
|
|
|
|
2023-08-28 19:03:26 -07:00
|
|
|
For the list of supported features from OpenMP 5.0 and 5.1
|
|
|
|
see `OpenMP implementation details`_ and `OpenMP 51 implementation details`_.
|
2019-10-30 10:38:11 -04:00
|
|
|
|
2019-01-18 19:57:37 +00:00
|
|
|
General improvements
|
2019-11-06 13:25:16 -05:00
|
|
|
====================
|
2019-01-18 19:57:37 +00:00
|
|
|
- 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.
|
|
|
|
|
2019-11-06 13:25:16 -05:00
|
|
|
- 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`.
|
|
|
|
|
2018-07-26 17:53:45 +00:00
|
|
|
|
2023-09-19 22:08:43 +01:00
|
|
|
GPU devices support
|
2023-09-19 19:33:29 -05:00
|
|
|
===================
|
2018-07-26 17:53:45 +00:00
|
|
|
|
|
|
|
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
|
2023-09-19 22:08:43 +01:00
|
|
|
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.
|
2019-01-09 20:38:35 +00:00
|
|
|
|
2018-07-26 17:53:45 +00:00
|
|
|
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.
|
|
|
|
|
2019-02-05 20:38:36 +00:00
|
|
|
- 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.
|
2018-07-26 17:53:45 +00:00
|
|
|
|
2019-09-04 17:15:37 +00:00
|
|
|
|
|
|
|
.. _OpenMP implementation details:
|
|
|
|
|
|
|
|
OpenMP 5.0 Implementation Details
|
2019-11-06 13:25:16 -05:00
|
|
|
=================================
|
2019-09-04 17:15:37 +00:00
|
|
|
|
|
|
|
The following table provides a quick overview over various OpenMP 5.0 features
|
2022-07-01 14:07:48 -07:00
|
|
|
and their implementation status. Please post on the
|
2023-01-11 22:05:33 -05:00
|
|
|
`Discourse forums (Runtimes - OpenMP category)`_ for more
|
2022-07-01 14:07:48 -07:00
|
|
|
information or if you want to help with the
|
2019-09-04 17:15:37 +00:00
|
|
|
implementation.
|
|
|
|
|
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
|
|
|
|Category | Feature | Status | Reviews |
|
|
|
|
+==============================+==============================================================+==========================+=======================================================================+
|
2022-06-27 18:41:17 -04:00
|
|
|
| loop | support != in the canonical loop form | :good:`done` | D54441 |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2023-07-26 07:57:22 -05:00
|
|
|
| loop | #pragma omp loop (directive) | :part:`partial` | D145823 (combined forms) |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2023-07-26 07:57:22 -05:00
|
|
|
| loop | #pragma omp loop bind | :part:`worked on` | D144634 (needs review) |
|
2023-02-10 02:32:50 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| loop | collapse imperfectly nested loop | :good:`done` | |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| loop | collapse non-rectangular nested loop | :good:`done` | |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| loop | C++ range-base for loop | :good:`done` | |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| loop | clause: if for SIMD directives | :good:`done` | |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| loop | inclusive scan (matching C++17 PSTL) | :good:`done` | |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2021-08-21 12:17:58 -07:00
|
|
|
| memory management | memory allocators | :good:`done` | r341687,r357929 |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2021-08-21 12:17:58 -07:00
|
|
|
| memory management | allocate directive and allocate clause | :good:`done` | r355614,r335952 |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2023-09-19 22:08:43 +01:00
|
|
|
| OMPD | OMPD interfaces | :good:`done` | https://reviews.llvm.org/D99914 (Supports only HOST(CPU) and Linux |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2023-07-27 06:15:55 -04:00
|
|
|
| OMPT | OMPT interfaces (callback support) | :good:`done` | |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| thread affinity | thread affinity | :good:`done` | |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| task | taskloop reduction | :good:`done` | |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| task | task affinity | :part:`not upstream` | https://github.com/jklinkenberg/openmp/tree/task-affinity |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2023-08-25 15:50:39 -05:00
|
|
|
| task | clause: depend on the taskwait construct | :good:`done` | D113540 (regular codegen only) |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| task | depend objects and detachable tasks | :good:`done` | |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| task | mutexinoutset dependence-type for tasks | :good:`done` | D53380,D57576 |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| task | combined taskloop constructs | :good:`done` | |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| task | master taskloop | :good:`done` | |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| task | parallel master taskloop | :good:`done` | |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| task | master taskloop simd | :good:`done` | |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| task | parallel master taskloop simd | :good:`done` | |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| SIMD | atomic and simd constructs inside SIMD code | :good:`done` | |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| SIMD | SIMD nontemporal | :good:`done` | |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| device | infer target functions from initializers | :part:`worked on` | |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2023-09-19 22:08:43 +01:00
|
|
|
| device | infer target variables from initializers | :good:`done` | D146418 |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| device | OMP_TARGET_OFFLOAD environment variable | :good:`done` | D50522 |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| device | support full 'defaultmap' functionality | :good:`done` | D69204 |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| device | device specific functions | :good:`done` | |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| device | clause: device_type | :good:`done` | |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| device | clause: extended device | :good:`done` | |
|
2020-03-19 10:16:08 -04:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| device | clause: uses_allocators clause | :good:`done` | |
|
2020-03-19 10:16:08 -04:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| device | clause: in_reduction | :part:`worked on` | r308768 |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2023-07-19 12:32:19 -05:00
|
|
|
| device | omp_get_device_num() | :good:`done` | D54342,D128347 |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| device | structure mapping of references | :none:`unclaimed` | |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| device | nested target declare | :good:`done` | D51378 |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| device | implicitly map 'this' (this[:1]) | :good:`done` | D55982 |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| device | allow access to the reference count (omp_target_is_present) | :good:`done` | |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2023-08-25 15:50:39 -05:00
|
|
|
| device | requires directive | :good:`done` | |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| device | clause: unified_shared_memory | :good:`done` | D52625,D52359 |
|
2020-01-16 21:56:08 -10:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| device | clause: unified_address | :part:`partial` | |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2023-07-19 12:32:19 -05:00
|
|
|
| device | clause: reverse_offload | :part:`partial` | D52780,D155003 |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| device | clause: atomic_default_mem_order | :good:`done` | D53513 |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| device | clause: dynamic_allocators | :part:`unclaimed parts` | D53079 |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2023-08-25 15:50:39 -05:00
|
|
|
| device | user-defined mappers | :good:`done` | D56326,D58638,D58523,D58074,D60972,D59474 |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| device | mapping lambda expression | :good:`done` | D51107 |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| device | clause: use_device_addr for target data | :good:`done` | |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| device | support close modifier on map clause | :good:`done` | D55719,D55892 |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2023-09-19 22:08:43 +01:00
|
|
|
| device | teams construct on the host device | :good:`done` | r371553 |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| device | support non-contiguous array sections for target update | :good:`done` | |
|
2019-11-07 11:07:56 -05:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2023-08-25 15:50:39 -05:00
|
|
|
| device | pointer attachment | :good:`done` | |
|
2020-08-05 08:53:58 -04:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| atomic | hints for the atomic construct | :good:`done` | D51233 |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2020-05-20 10:54:53 -04:00
|
|
|
| base language | C11 support | :good:`done` | |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2020-05-20 10:54:53 -04:00
|
|
|
| base language | C++11/14/17 support | :good:`done` | |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
|
|
|
| base language | lambda support | :good:`done` | |
|
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| misc | array shaping | :good:`done` | D74144 |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2023-08-25 15:50:39 -05:00
|
|
|
| misc | library shutdown (omp_pause_resource[_all]) | :good:`done` | D55078 |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2023-09-19 19:33:29 -05:00
|
|
|
| misc | metadirectives | :part:`mostly done` | D91944 |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| misc | conditional modifier for lastprivate clause | :good:`done` | |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| misc | iterator and multidependences | :good:`done` | |
|
2020-01-16 21:56:08 -10:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| misc | depobj directive and depobj dependency kind | :good:`done` | |
|
2020-03-11 13:26:01 -04:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2023-09-19 22:08:43 +01:00
|
|
|
| misc | user-defined function variants | :good:`done`. | D67294, D64095, D71847, D71830, D109635 |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2023-08-25 15:50:39 -05:00
|
|
|
| misc | pointer/reference to pointer based array reductions | :good:`done` | |
|
2020-01-16 21:56:08 -10:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| misc | prevent new type definitions in clauses | :good:`done` | |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| memory model | memory model update (seq_cst, acq_rel, release, acquire,...) | :good:`done` | |
|
2019-09-04 17:15:37 +00:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2019-12-11 23:59:46 -06:00
|
|
|
|
|
|
|
|
2023-08-28 19:03:26 -07:00
|
|
|
.. _OpenMP 51 implementation details:
|
|
|
|
|
2019-12-11 23:59:46 -06:00
|
|
|
OpenMP 5.1 Implementation Details
|
|
|
|
=================================
|
|
|
|
|
|
|
|
The following table provides a quick overview over various OpenMP 5.1 features
|
2023-08-25 15:50:39 -05:00
|
|
|
and their implementation status.
|
2023-01-11 22:05:33 -05:00
|
|
|
Please post on the
|
|
|
|
`Discourse forums (Runtimes - OpenMP category)`_ for more
|
2022-07-01 14:07:48 -07:00
|
|
|
information or if you want to help with the
|
|
|
|
implementation.
|
2019-12-11 23:59:46 -06:00
|
|
|
|
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
|
|
|
|Category | Feature | Status | Reviews |
|
|
|
|
+==============================+==============================================================+==========================+=======================================================================+
|
2022-06-27 18:41:17 -04:00
|
|
|
| atomic | 'compare' clause on atomic construct | :good:`done` | D120290, D120007, D118632, D120200, D116261, D118547, D116637 |
|
2021-04-15 11:10:07 -04:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2023-08-25 15:50:39 -05:00
|
|
|
| atomic | 'fail' clause on atomic construct | :part:`worked on` | D123235 (in progress) |
|
2019-12-11 23:59:46 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2021-07-12 06:51:19 -04:00
|
|
|
| base language | C++ attribute specifier syntax | :good:`done` | D105648 |
|
2019-12-13 18:40:54 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| device | 'present' map type modifier | :good:`done` | D83061, D83062, D84422 |
|
2020-07-27 19:22:05 -04:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| device | 'present' motion modifier | :good:`done` | D84711, D84712 |
|
2020-06-24 14:18:08 -04:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| device | 'present' in defaultmap clause | :good:`done` | D92427 |
|
2020-11-18 10:43:43 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2023-08-25 15:50:39 -05:00
|
|
|
| device | map clause reordering based on 'present' modifier | :none:`unclaimed` | |
|
2020-08-05 08:53:58 -04:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| device | device-specific environment variables | :none:`unclaimed` | |
|
2020-11-18 10:43:43 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| device | omp_target_is_accessible routine | :none:`unclaimed` | |
|
2020-11-18 10:43:43 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2023-06-28 11:06:36 -04:00
|
|
|
| device | omp_get_mapped_ptr routine | :good:`done` | D141545 |
|
2020-11-18 10:43:43 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2023-07-19 12:32:19 -05:00
|
|
|
| device | new async target memory copy routines | :good:`done` | D136103 |
|
2020-11-18 10:43:43 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2023-08-25 15:50:39 -05:00
|
|
|
| device | thread_limit clause on target construct | :part:`partial` | D141540 (offload), D152054 (host, in progress) |
|
2020-11-18 10:43:43 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| device | has_device_addr clause on target construct | :none:`unclaimed` | |
|
2020-11-18 10:43:43 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-11-08 11:43:07 -06:00
|
|
|
| device | iterators in map clause or motion clauses | :none:`unclaimed` | |
|
2020-11-18 10:43:43 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| device | indirect clause on declare target directive | :none:`unclaimed` | |
|
2020-11-18 10:43:43 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2023-09-19 19:33:29 -05:00
|
|
|
| device | allow virtual functions calls for mapped object on device | :part:`partial` | |
|
2020-11-18 10:43:43 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| device | interop construct | :part:`partial` | parsing/sema done: D98558, D98834, D98815 |
|
2020-11-18 10:43:43 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2023-08-25 15:50:39 -05:00
|
|
|
| device | assorted routines for querying interoperable properties | :part:`partial` | D106674 |
|
2020-11-18 10:43:43 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| loop | Loop tiling transformation | :good:`done` | D76342 |
|
2020-11-18 10:43:43 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| loop | Loop unrolling transformation | :good:`done` | D99459 |
|
2020-11-18 10:43:43 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-07-07 11:29:48 -05:00
|
|
|
| loop | 'reproducible'/'unconstrained' modifiers in 'order' clause | :part:`partial` | D127855 |
|
2020-11-18 10:43:43 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2023-08-04 15:39:57 -04:00
|
|
|
| memory management | alignment for allocate directive and clause | :good:`done` | D115683 |
|
2020-11-18 10:43:43 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
|
|
|
| memory management | new memory management routines | :none:`unclaimed` | |
|
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
|
|
|
| memory management | changes to omp_alloctrait_key enum | :none:`unclaimed` | |
|
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| memory model | seq_cst clause on flush construct | :none:`unclaimed` | |
|
2020-11-18 10:43:43 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| misc | 'omp_all_memory' keyword and use in 'depend' clause | :good:`done` | D125828, D126321 |
|
2020-11-18 10:43:43 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2023-08-25 15:50:39 -05:00
|
|
|
| misc | error directive | :good:`done` | D139166 |
|
2020-11-18 10:43:43 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2023-08-09 15:28:09 -07:00
|
|
|
| misc | scope construct | :none:`worked on` | D157933 |
|
2020-11-18 10:43:43 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2023-08-25 15:50:39 -05:00
|
|
|
| misc | routines for controlling and querying team regions | :part:`partial` | D95003 (libomp only) |
|
2020-11-18 10:43:43 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| misc | changes to ompt_scope_endpoint_t enum | :none:`unclaimed` | |
|
2020-11-18 10:43:43 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2023-08-25 15:50:39 -05:00
|
|
|
| misc | omp_display_env routine | :good:`done` | D74956 |
|
2020-11-18 10:43:43 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| misc | extended OMP_PLACES syntax | :none:`unclaimed` | |
|
2020-11-18 10:43:43 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2023-07-19 12:32:19 -05:00
|
|
|
| misc | OMP_NUM_TEAMS and OMP_TEAMS_THREAD_LIMIT env vars | :good:`done` | D138769 |
|
2020-11-18 10:43:43 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| misc | 'target_device' selector in context specifier | :none:`unclaimed` | |
|
2020-11-18 10:43:43 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| misc | begin/end declare variant | :good:`done` | D71179 |
|
2020-11-18 10:43:43 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| misc | dispatch construct and function variant argument adjustment | :part:`worked on` | D99537, D99679 |
|
2020-11-18 10:43:43 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2024-04-26 10:31:55 +05:30
|
|
|
| misc | assumes directives | :part:`worked on` | |
|
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
|
|
|
| misc | assume directive | :part:`worked on` | |
|
2020-11-18 10:43:43 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2023-08-25 15:50:39 -05:00
|
|
|
| misc | nothing directive | :good:`done` | D123286 |
|
2020-11-18 10:43:43 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| misc | masked construct and related combined constructs | :part:`worked on` | D99995, D100514 |
|
2020-11-18 10:43:43 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2023-08-25 15:50:39 -05:00
|
|
|
| misc | default(firstprivate) & default(private) | :good:`done` | D75591 (firstprivate), D125912 (private) |
|
2020-11-18 10:43:43 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
|
|
|
| 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` | |
|
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2023-07-27 06:15:55 -04:00
|
|
|
| OMPT | new 'emi' callbacks for external monitoring interfaces | :good:`done` | |
|
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
|
|
|
| OMPT | device tracing interface | :none:`unclaimed` | |
|
2020-11-18 10:43:43 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2022-06-27 18:41:17 -04:00
|
|
|
| task | 'strict' modifier for taskloop construct | :none:`unclaimed` | |
|
2020-11-18 10:43:43 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2023-08-25 15:50:39 -05:00
|
|
|
| task | inoutset in depend clause | :good:`done` | D97085, D118383 |
|
2020-11-18 10:43:43 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
2023-08-25 15:50:39 -05:00
|
|
|
| task | nowait clause on taskwait | :part:`partial` | parsing/sema done: D131830, D141531 |
|
2020-11-18 10:43:43 -06:00
|
|
|
+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
|
[OpenMP][OpenACC] Implement `ompx_hold` map type modifier extension in Clang (1/2)
This patch implements Clang support for an original OpenMP extension
we have developed to support OpenACC: the `ompx_hold` map type
modifier. The next patch in this series, D106510, implements OpenMP
runtime support.
Consider the following example:
```
#pragma omp target data map(ompx_hold, tofrom: x) // holds onto mapping of x
{
foo(); // might have map(delete: x)
#pragma omp target map(present, alloc: x) // x is guaranteed to be present
printf("%d\n", x);
}
```
The `ompx_hold` map type modifier above specifies that the `target
data` directive holds onto the mapping for `x` throughout the
associated region regardless of any `target exit data` directives
executed during the call to `foo`. Thus, the presence assertion for
`x` at the enclosed `target` construct cannot fail. (As usual, the
standard OpenMP reference count for `x` must also reach zero before
the data is unmapped.)
Justification for inclusion in Clang and LLVM's OpenMP runtime:
* The `ompx_hold` modifier supports OpenACC functionality (structured
reference count) that cannot be achieved in standard OpenMP, as of
5.1.
* The runtime implementation for `ompx_hold` (next patch) will thus be
used by Flang's OpenACC support.
* The Clang implementation for `ompx_hold` (this patch) as well as the
runtime implementation are required for the Clang OpenACC support
being developed as part of the ECP Clacc project, which translates
OpenACC to OpenMP at the directive AST level. These patches are the
first step in upstreaming OpenACC functionality from Clacc.
* The Clang implementation for `ompx_hold` is also used by the tests
in the runtime implementation. That syntactic support makes the
tests more readable than low-level runtime calls can. Moreover,
upstream Flang and Clang do not yet support OpenACC syntax
sufficiently for writing the tests.
* More generally, the Clang implementation enables a clean separation
of concerns between OpenACC and OpenMP development in LLVM. That
is, LLVM's OpenMP developers can discuss, modify, and debug LLVM's
extended OpenMP implementation and test suite without directly
considering OpenACC's language and execution model, which can be
handled by LLVM's OpenACC developers.
* OpenMP users might find the `ompx_hold` modifier useful, as in the
above example.
See new documentation introduced by this patch in `openmp/docs` for
more detail on the functionality of this extension and its
relationship with OpenACC. For example, it explains how the runtime
must support two reference counts, as specified by OpenACC.
Clang recognizes `ompx_hold` unless `-fno-openmp-extensions`, a new
command-line option introduced by this patch, is specified.
Reviewed By: ABataev, jdoerfert, protze.joachim, grokos
Differential Revision: https://reviews.llvm.org/D106509
2021-08-31 15:17:07 -04:00
|
|
|
|
|
|
|
OpenMP Extensions
|
|
|
|
=================
|
|
|
|
|
2023-01-11 22:05:33 -05:00
|
|
|
The following table provides a quick overview over various OpenMP
|
[OpenMP][OpenACC] Implement `ompx_hold` map type modifier extension in Clang (1/2)
This patch implements Clang support for an original OpenMP extension
we have developed to support OpenACC: the `ompx_hold` map type
modifier. The next patch in this series, D106510, implements OpenMP
runtime support.
Consider the following example:
```
#pragma omp target data map(ompx_hold, tofrom: x) // holds onto mapping of x
{
foo(); // might have map(delete: x)
#pragma omp target map(present, alloc: x) // x is guaranteed to be present
printf("%d\n", x);
}
```
The `ompx_hold` map type modifier above specifies that the `target
data` directive holds onto the mapping for `x` throughout the
associated region regardless of any `target exit data` directives
executed during the call to `foo`. Thus, the presence assertion for
`x` at the enclosed `target` construct cannot fail. (As usual, the
standard OpenMP reference count for `x` must also reach zero before
the data is unmapped.)
Justification for inclusion in Clang and LLVM's OpenMP runtime:
* The `ompx_hold` modifier supports OpenACC functionality (structured
reference count) that cannot be achieved in standard OpenMP, as of
5.1.
* The runtime implementation for `ompx_hold` (next patch) will thus be
used by Flang's OpenACC support.
* The Clang implementation for `ompx_hold` (this patch) as well as the
runtime implementation are required for the Clang OpenACC support
being developed as part of the ECP Clacc project, which translates
OpenACC to OpenMP at the directive AST level. These patches are the
first step in upstreaming OpenACC functionality from Clacc.
* The Clang implementation for `ompx_hold` is also used by the tests
in the runtime implementation. That syntactic support makes the
tests more readable than low-level runtime calls can. Moreover,
upstream Flang and Clang do not yet support OpenACC syntax
sufficiently for writing the tests.
* More generally, the Clang implementation enables a clean separation
of concerns between OpenACC and OpenMP development in LLVM. That
is, LLVM's OpenMP developers can discuss, modify, and debug LLVM's
extended OpenMP implementation and test suite without directly
considering OpenACC's language and execution model, which can be
handled by LLVM's OpenACC developers.
* OpenMP users might find the `ompx_hold` modifier useful, as in the
above example.
See new documentation introduced by this patch in `openmp/docs` for
more detail on the functionality of this extension and its
relationship with OpenACC. For example, it explains how the runtime
must support two reference counts, as specified by OpenACC.
Clang recognizes `ompx_hold` unless `-fno-openmp-extensions`, a new
command-line option introduced by this patch, is specified.
Reviewed By: ABataev, jdoerfert, protze.joachim, grokos
Differential Revision: https://reviews.llvm.org/D106509
2021-08-31 15:17:07 -04:00
|
|
|
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
|
2022-07-01 14:07:48 -07:00
|
|
|
considered for standardization. Please post on the
|
2023-01-11 22:05:33 -05:00
|
|
|
`Discourse forums (Runtimes - OpenMP category)`_ to provide feedback.
|
[OpenMP][OpenACC] Implement `ompx_hold` map type modifier extension in Clang (1/2)
This patch implements Clang support for an original OpenMP extension
we have developed to support OpenACC: the `ompx_hold` map type
modifier. The next patch in this series, D106510, implements OpenMP
runtime support.
Consider the following example:
```
#pragma omp target data map(ompx_hold, tofrom: x) // holds onto mapping of x
{
foo(); // might have map(delete: x)
#pragma omp target map(present, alloc: x) // x is guaranteed to be present
printf("%d\n", x);
}
```
The `ompx_hold` map type modifier above specifies that the `target
data` directive holds onto the mapping for `x` throughout the
associated region regardless of any `target exit data` directives
executed during the call to `foo`. Thus, the presence assertion for
`x` at the enclosed `target` construct cannot fail. (As usual, the
standard OpenMP reference count for `x` must also reach zero before
the data is unmapped.)
Justification for inclusion in Clang and LLVM's OpenMP runtime:
* The `ompx_hold` modifier supports OpenACC functionality (structured
reference count) that cannot be achieved in standard OpenMP, as of
5.1.
* The runtime implementation for `ompx_hold` (next patch) will thus be
used by Flang's OpenACC support.
* The Clang implementation for `ompx_hold` (this patch) as well as the
runtime implementation are required for the Clang OpenACC support
being developed as part of the ECP Clacc project, which translates
OpenACC to OpenMP at the directive AST level. These patches are the
first step in upstreaming OpenACC functionality from Clacc.
* The Clang implementation for `ompx_hold` is also used by the tests
in the runtime implementation. That syntactic support makes the
tests more readable than low-level runtime calls can. Moreover,
upstream Flang and Clang do not yet support OpenACC syntax
sufficiently for writing the tests.
* More generally, the Clang implementation enables a clean separation
of concerns between OpenACC and OpenMP development in LLVM. That
is, LLVM's OpenMP developers can discuss, modify, and debug LLVM's
extended OpenMP implementation and test suite without directly
considering OpenACC's language and execution model, which can be
handled by LLVM's OpenACC developers.
* OpenMP users might find the `ompx_hold` modifier useful, as in the
above example.
See new documentation introduced by this patch in `openmp/docs` for
more detail on the functionality of this extension and its
relationship with OpenACC. For example, it explains how the runtime
must support two reference counts, as specified by OpenACC.
Clang recognizes `ompx_hold` unless `-fno-openmp-extensions`, a new
command-line option introduced by this patch, is specified.
Reviewed By: ABataev, jdoerfert, protze.joachim, grokos
Differential Revision: https://reviews.llvm.org/D106509
2021-08-31 15:17:07 -04:00
|
|
|
|
2022-05-27 18:53:19 -04:00
|
|
|
+------------------------------+-----------------------------------------------------------------------------------+--------------------------+--------------------------------------------------------+
|
|
|
|
|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>`_ | | |
|
|
|
|
+------------------------------+-----------------------------------------------------------------------------------+--------------------------+--------------------------------------------------------+
|
2022-07-01 14:07:48 -07:00
|
|
|
|
|
|
|
.. _Discourse forums (Runtimes - OpenMP category): https://discourse.llvm.org/c/runtimes/openmp/35
|