diff --git a/clang/docs/OpenMPSupport.rst b/clang/docs/OpenMPSupport.rst --- a/clang/docs/OpenMPSupport.rst +++ b/clang/docs/OpenMPSupport.rst @@ -17,7 +17,7 @@ OpenMP Support ================== -Clang supports the following OpenMP 5.0 features +Clang supports the following OpenMP 5.0 features (see also `OpenMP implementation details`_): * The `reduction`-based clauses in the `task` and `target`-based directives. @@ -44,6 +44,7 @@ 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. + General improvements -------------------- - New collapse clause scheme to avoid expensive remainder operations. @@ -129,3 +130,136 @@ 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 contact *openmp-dev* at +*lists.llvm.org* for more information or if you want to help with the +implementation. + ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +|Category | Feature | Status | Reviews | ++==============================+==============================================================+==============+============================================+ +| loop extension | support != in the canonical loop form | done | D54441 | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| loop extension | #pragma omp loop (directive) | unclaimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| loop extension | collapse imperfectly nested loop | unclaimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| loop extension | collapse non-rectangular nested loop | unclaimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| loop extension | C++ range-base for loop | unclaimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| loop extension | clause: nosimd for SIMD directives | unclaimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| loop extension | inclusive scan extension (matching C++17 PSTL) | unclaimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| memory mangagement | memory allocators | claimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| memory mangagement | allocate directive and allocate clause | claimed | r355614,r335952 | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| OMPD | OMPD interfaces | mostly done | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| OMPT | OMPT interfaces | mostly done | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| thread affinity extension | thread affinity extension | done | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| task extension | taskloop reduction | done | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| task extension | task affinity | done | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| task extension | clause: depend on the taskwait construct | claimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| task extension | depend objects and detachable tasks | claimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| task extension | mutexinoutset dependence-type for tasks | done | D53380,D57576 | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| task extension | combined taskloop constructs | unclaimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| task extension | master taskloop | unclaimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| task extension | parallell master taskloop | unclaimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| task extension | master taskloop simd | unclaimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| task extension | parallell master taskloop simd | unclaimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| SIMD extension | atomic and critical constructs inside SIMD code | unclaimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| SIMD extension | SIMD nontemporal | unclaimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| device extension | infer target functions from initializers | claimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| device extension | infer target variables from initializers | claimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| device extension | OMP_TARGET_FALLBACK env variable | claimed | D50522 | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| device extension | support full 'defaultmap' functionality | claimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| device extension | device specific functions | unclaimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| device extension | clause: device_type | claimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| device extension | clause: in_reduction | claimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| device extension | omp_get_device_num() | claimed | D54342 | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| device extension | structure mapping of references | unclaimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| device extension | nested target declare | claimed | D51378 | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| device extension | implicitly map 'this' (this[:1]) | claimed | D55982 | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| device extension | allow access to the reference count (omp_target_is_present) | claimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| device extension | Fortran pointer mapping | unclaimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| device extension | requires directive (unified shared memory) | claimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| device extension | clause: unified_address, unified_shared_memory | claimed | D52625,D52359 | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| device extension | clause: reverse_offload | done | D52780 | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| device extension | clause: atomic_default_mem_order | done | D53513 | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| device extension | clause: dynamic_allocators | done | D53079 | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| device extension | user-defined mappers | claimed | D56326,D58638,D58523,D58074,D60972,D59474 | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| device extension | mapping lambda expression | claimed | D51107 | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| device extension | clause: use_device_addr for target data | claimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| device extension | map(replicate) or map(local) when requires unified_shared_me | done | D55719,D55892 | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| device extension | reverse offload | unclaimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| device extension | teams construct on the host device | claimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| atomic extension | hints for the atomic construct | done | D51233 | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| base language | C11 support | unclaimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| base language | C++11/14/17 support | unclaimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| base language | lambda support | claimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| misc extension | array shaping | unclaimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| misc extension | library shutdown (omp_pause_resource[_all]) | claimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| misc extension | metadirectives | unclaimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| misc extension | conditional modifier for lastprivate clause | unclaimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| misc extension | user-defined function variants | unclaimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| misc extensions | pointer/reference to pointer based array reductions | unclaimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +| misc extensions | prevent new type definitions in clauses | unclaimed | | ++------------------------------+--------------------------------------------------------------+--------------+--------------------------------------------+ +