| OpenMP Optimization Remarks |
| =========================== |
| |
| The :doc:`OpenMP-Aware optimization pass </optimizations/OpenMPOpt>` is able to |
| generate compiler remarks for performed and missed optimisations. To emit them, |
| pass ``-Rpass=openmp-opt``, ``-Rpass-analysis=openmp-opt``, and |
| ``-Rpass-missed=openmp-opt`` to the Clang invocation. For more information and |
| features of the remark system the clang documentation should be consulted: |
| |
| + `Clang options to emit optimization reports <https://clang.llvm.org/docs/UsersManual.html#options-to-emit-optimization-reports>`_ |
| + `Clang diagnostic and remark flags <https://clang.llvm.org/docs/ClangCommandLineReference.html#diagnostic-flags>`_ |
| + The `-foptimization-record-file flag |
| <https://clang.llvm.org/docs/ClangCommandLineReference.html#cmdoption-clang-foptimization-record-file>`_ |
| and the `-fsave-optimization-record flag |
| <https://clang.llvm.org/docs/ClangCommandLineReference.html#cmdoption-clang1-fsave-optimization-record>`_ |
| |
| |
| OpenMP Remarks |
| -------------- |
| |
| .. toctree:: |
| :hidden: |
| :maxdepth: 1 |
| |
| OMP100 |
| OMP101 |
| OMP102 |
| OMP110 |
| OMP111 |
| OMP112 |
| OMP113 |
| OMP120 |
| OMP121 |
| OMP130 |
| OMP131 |
| OMP132 |
| OMP133 |
| OMP140 |
| OMP150 |
| OMP160 |
| OMP170 |
| OMP180 |
| |
| .. list-table:: |
| :widths: 15 15 70 |
| :header-rows: 1 |
| |
| * - Diagnostics Number |
| - Diagnostics Kind |
| - Diagnostics Description |
| * - :ref:`OMP100 <omp100>` |
| - Analysis |
| - Potentially unknown OpenMP target region caller. |
| * - :ref:`OMP101 <omp101>` |
| - Analysis |
| - Parallel region is used in unknown / unexpected ways. Will not attempt to |
| rewrite the state machine. |
| * - :ref:`OMP102 <omp102>` |
| - Analysis |
| - Parallel region is not called from a unique kernel. Will not attempt to |
| rewrite the state machine. |
| * - :ref:`OMP110 <omp110>` |
| - Optimization |
| - Moving globalized variable to the stack. |
| * - :ref:`OMP111 <omp111>` |
| - Optimization |
| - Replaced globalized variable with X bytes of shared memory. |
| * - :ref:`OMP112 <omp112>` |
| - Missed |
| - Found thread data sharing on the GPU. Expect degraded performance due to |
| data globalization. |
| * - :ref:`OMP113 <omp113>` |
| - Missed |
| - Could not move globalized variable to the stack. Variable is potentially |
| captured in call. Mark parameter as `__attribute__((noescape))` to |
| override. |
| * - :ref:`OMP120 <omp120>` |
| - Optimization |
| - Transformed generic-mode kernel to SPMD-mode. |
| * - :ref:`OMP121 <omp121>` |
| - Analysis |
| - Value has potential side effects preventing SPMD-mode execution. Add |
| `__attribute__((assume(\"ompx_spmd_amenable\")))` to the called function |
| to override. |
| * - :ref:`OMP130 <omp130>` |
| - Optimization |
| - Removing unused state machine from generic-mode kernel. |
| * - :ref:`OMP131 <omp131>` |
| - Optimization |
| - Rewriting generic-mode kernel with a customized state machine. |
| * - :ref:`OMP132 <omp132>` |
| - Analysis |
| - Generic-mode kernel is executed with a customized state machine that |
| requires a fallback. |
| * - :ref:`OMP133 <omp133>` |
| - Analysis |
| - Call may contain unknown parallel regions. Use |
| `__attribute__((assume("omp_no_parallelism")))` to override. |
| * - :ref:`OMP140 <omp140>` |
| - Analysis |
| - Could not internalize function. Some optimizations may not be possible. |
| * - :ref:`OMP150 <omp150>` |
| - Optimization |
| - Parallel region merged with parallel region at <location>. |
| * - :ref:`OMP160 <omp160>` |
| - Optimization |
| - Removing parallel region with no side-effects. |
| * - :ref:`OMP170 <omp170>` |
| - Optimization |
| - OpenMP runtime call <call> deduplicated. |
| * - :ref:`OMP180 <omp180>` |
| - Optimization |
| - Replacing OpenMP runtime call <call> with <value>. |