summaryrefslogtreecommitdiff
path: root/docs/OpenMPSupport.rst
blob: c121df3e201083780b4165ee3a7cafb3051adfa9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
.. raw:: html

  <style type="text/css">
    .none { background-color: #FFCCCC }
    .partial { background-color: #FFFF99 }
    .good { background-color: #CCFF99 }
  </style>

.. role:: none
.. role:: partial
.. role:: good

==================
OpenMP Support
==================

Clang fully supports OpenMP 3.1 + some elements of OpenMP 4.5. Clang supports offloading to X86_64, AArch64 and PPC64[LE] devices.
Support for Cuda devices is not ready yet.
The status of major OpenMP 4.5 features support in Clang.

Standalone directives
=====================

* #pragma omp [for] simd: :good:`Complete`.

* #pragma omp declare simd: :partial:`Partial`.  We support parsing/semantic
  analysis + generation of special attributes for X86 target, but still
  missing the LLVM pass for vectorization.

* #pragma omp taskloop [simd]: :good:`Complete`.

* #pragma omp target [enter|exit] data: :good:`Complete`.

* #pragma omp target update: :good:`Complete`.

* #pragma omp target: :partial:`Partial`.  No support for the `depend` clauses.

* #pragma omp declare target: :partial:`Partial`.  No full codegen support.

* #pragma omp teams: :good:`Complete`.

* #pragma omp distribute [simd]: :good:`Complete`.

* #pragma omp distribute parallel for [simd]: :good:`Complete`.

Combined directives
===================

* #pragma omp parallel for simd: :good:`Complete`.

* #pragma omp target parallel: :partial:`Partial`.  No support for the `depend` clauses.

* #pragma omp target parallel for [simd]: :partial:`Partial`.  No support for the `depend` clauses.

* #pragma omp target simd: :partial:`Partial`.  No support for the `depend` clauses.

* #pragma omp target teams: :partial:`Partial`.  No support for the `depend` clauses.

* #pragma omp teams distribute [simd]: :good:`Complete`.

* #pragma omp target teams distribute [simd]: :partial:`Partial`.  No support for the and `depend` clauses.

* #pragma omp teams distribute parallel for [simd]: :good:`Complete`.

* #pragma omp target teams distribute parallel for [simd]: :partial:`Partial`.  No full codegen support.

Clang does not support any constructs/updates from upcoming OpenMP 5.0 except for `reduction`-based clauses in the `task` and `target`-based directives.
In addition, the LLVM OpenMP runtime `libomp` supports the OpenMP Tools Interface (OMPT) on x86, x86_64, AArch64, and PPC64 on Linux, Windows, and mac OS.