-
Notifications
You must be signed in to change notification settings - Fork 10.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[OpenMP][Docs] Added offloading command line reference to OpenMP FAQ
This command adds an OpenMP offloading specific command line reference. The OpenMP FAQ links to the .rst new file. Reviewed By: jhuber6 Differential Revision: https://reviews.llvm.org/D156387
- Loading branch information
1 parent
239777c
commit 5c0f98c
Showing
3 changed files
with
246 additions
and
9 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,187 @@ | ||
OpenMP Command-Line Argument Reference | ||
====================================== | ||
Welcome to the OpenMP in LLVM command line argument reference. The content is | ||
not a complete list of arguments but includes the essential command-line | ||
arguments you may need when compiling and linking OpenMP. | ||
Section :ref:`general_command_line_arguments` lists OpenMP command line options | ||
for multicore programming while :ref:`offload_command_line_arguments` lists | ||
options relevant to OpenMP target offloading. | ||
|
||
.. _general_command_line_arguments: | ||
|
||
OpenMP Command-Line Arguments | ||
----------------------------- | ||
|
||
``-fopenmp`` | ||
^^^^^^^^^^^^ | ||
Enable the OpenMP compilation toolchain. The compiler will parse OpenMP | ||
compiler directives and generate parallel code. | ||
|
||
``-fopenmp-extensions`` | ||
^^^^^^^^^^^^^^^^^^^^^^^ | ||
Enable all ``Clang`` extensions for OpenMP directives and clauses. A list of | ||
current extensions and their implementation status can be found on the | ||
`support <https://clang.llvm.org/docs/OpenMPSupport.html#openmp-extensions>`_ | ||
page. | ||
|
||
``-fopenmp-simd`` | ||
^^^^^^^^^^^^^^^^^ | ||
This option enables OpenMP only for single instruction, multiple data | ||
(SIMD) constructs. | ||
|
||
``-static-openmp`` | ||
^^^^^^^^^^^^^^^^^^ | ||
Use the static OpenMP host runtime while linking. | ||
|
||
``-fopenmp-version=<arg>`` | ||
^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
Set the OpenMP version to a specific version ``<arg>`` of the OpenMP standard. | ||
For example, you may use ``-fopenmp-version=45`` to select version 4.5 of | ||
the OpenMP standard. The default value is ``-fopenmp-version=50`` for ``Clang`` | ||
and ``-fopenmp-version=11`` for ``flang-new``. | ||
|
||
.. _offload_command_line_arguments: | ||
|
||
Offloading Specific Command-Line Arguments | ||
------------------------------------------ | ||
|
||
.. _fopenmp-targets: | ||
|
||
``-fopenmp-targets`` | ||
^^^^^^^^^^^^^^^^^^^^ | ||
| Specify which OpenMP offloading targets should be supported. For example, you | ||
may specify ``-fopenmp-targets=amdgcn-amd-amdhsa,nvptx64``. This option is | ||
often optional when :ref:`offload_arch` is provided. | ||
| It is also possible to offload to CPU architectures, for instance with | ||
``-fopenmp-targets=x86_64-pc-linux-gnu``. | ||
.. _offload_arch: | ||
|
||
``--offload-arch`` | ||
^^^^^^^^^^^^^^^^^^ | ||
| Specify the device architecture for OpenMP offloading. For instance | ||
``--offload-arch=sm_80`` to target an Nvidia Tesla A100, | ||
``--offload-arch=gfx90a`` to target an AMD Instinct MI250X, or | ||
``--offload-arch=sm_80,gfx90a`` to target both. | ||
| It is also possible to specify :ref:`fopenmp-targets` without specifying | ||
``--offload-arch``. In that case, the executables ``amdgpu-arch`` or | ||
``nvptx-arch`` will be executed as part of the compiler driver to | ||
detect the device arhitecture automatically. | ||
| Finally, the device architecture will also be automatically inferred with | ||
``--offload-arch=native``. | ||
``--offload-device-only`` | ||
^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
Compile only the code that goes on the device. This option is mainly for | ||
debugging purposes. It is primarily used for inspecting the intermediate | ||
representation (IR) output when compiling for the device. It may also be used | ||
if device-only runtimes are created. | ||
|
||
``--offload-host-only`` | ||
^^^^^^^^^^^^^^^^^^^^^^^ | ||
Compile only the code that goes on the host. With this option enabled, the | ||
``.llvm.offloading`` section with embedded device code will not be included in | ||
the intermediate representation. | ||
|
||
``--offload-host-device`` | ||
^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
Compile the target regions for both the host and the device. That is the | ||
default option. | ||
|
||
``-Xopenmp-target <arg>`` | ||
^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
Pass an argument ``<arg>`` to the offloading toolchain, for instance | ||
``-Xopenmp-target -march=sm_80``. | ||
|
||
``-Xopenmp-target=<triple> <arg>`` | ||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
Pass an argument ``<arg>`` to the offloading toolchain for the target | ||
``<triple>``. That is especially useful when an argument must differ for each | ||
triple. For instance ``-Xopenmp-target=nvptx64 --offload-arch=sm_80 | ||
-Xopenmp-target=amdgcn --offload-arch=gfx90a`` to specify the device | ||
architecture. Alternatively, :ref:`Xarch_host` and :ref:`Xarch_device` can | ||
pass an argument to the host and device compilation toolchain. | ||
|
||
``-Xoffload-linker<triple> <arg>`` | ||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
Pass an argument ``<arg>`` to the offloading linker for the target specified in | ||
``<triple>``. | ||
|
||
.. _Xarch_device: | ||
|
||
``-Xarch_device <arg>`` | ||
^^^^^^^^^^^^^^^^^^^^^^^ | ||
Pass an argument ``<arg>`` to the device compilation toolchain. | ||
|
||
.. _Xarch_host: | ||
|
||
``-Xarch_host <arg>`` | ||
^^^^^^^^^^^^^^^^^^^^^ | ||
Pass an argument ``<arg>`` to the host compilation toolchain. | ||
|
||
``-foffload-lto[=<arg>]`` | ||
^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
Enable device link time optimization (LTO) and select the LTO mode ``<arg>``. | ||
Select either ``-foffload-lto=thin`` or ``-foffload-lto=full``. Thin LTO takes | ||
less time while still achieving some performance gains. If no argument is set, | ||
this option defaults to ``-foffload-lto=full``. | ||
|
||
``-fopenmp-offload-mandatory`` | ||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
| This option is set to avoid generating the host fallback code | ||
executed when offloading to the device fails. That is | ||
helpful when the target contains code that cannot be compiled for the host, for | ||
instance, if it contains unguarded device intrinsics. | ||
| This option can also be used to reduce compile time. | ||
| This option should not be used when one wants to verify that the code is being | ||
offloaded to the device. Instead, set the environment variable | ||
``OMP_TARGET_OFFLOAD='MANDATORY'`` to confirm that the code is being offloaded to | ||
the device. | ||
``-fopenmp-target-debug[=<arg>]`` | ||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
Enable debugging in the device runtime library (RTL). Note that it is both | ||
necessary to configure the debugging in the device runtime at compile-time with | ||
``-fopenmp-target-debug=<arg>`` and enable debugging at runtime with the | ||
environment variable ``LIBOMPTARGET_DEVICE_RTL_DEBUG=<arg>``. Further, it is | ||
currently only supported for Nvidia targets as of July 2023. Alternatively, the | ||
environment variable ``LIBOMPTARGET_DEBUG`` can be set to debug both Nvidia and | ||
AMD GPU targets. For more information, see the | ||
`debugging instructions <https://openmp.llvm.org/design/Runtimes.html#debugging>`_. | ||
The debugging instructions list the supported debugging arguments. | ||
|
||
``-fopenmp-target-jit`` | ||
^^^^^^^^^^^^^^^^^^^^^^^ | ||
| Emit code that is Just-in-Time (JIT) compiled for OpenMP offloading. Embed | ||
LLVM-IR for the device code in the object files rather than binary code for the | ||
respective target. At runtime, the LLVM-IR is optimized again and compiled for | ||
the target device. The optimization level can be set at runtime with | ||
``LIBOMPTARGET_JIT_OPT_LEVEL``, for instance, | ||
``LIBOMPTARGET_JIT_OPT_LEVEL=3`` corresponding to optimizations level ``-O3``. | ||
See the | ||
`OpenMP JIT details <https://openmp.llvm.org/design/Runtimes.html#libomptarget-jit-pre-opt-ir-module>`_ | ||
for instructions on extracting the embedded device code before or after the | ||
JIT and more. | ||
| We want to emphasize that JIT for OpenMP offloading is good for debugging as | ||
the target IR can be extracted, modified, and injected at runtime. | ||
``--offload-new-driver`` | ||
^^^^^^^^^^^^^^^^^^^^^^^^ | ||
In upstream LLVM, OpenMP only uses the new driver. However, enabling this | ||
option for experimental linking with CUDA or HIP files is necessary. | ||
|
||
``--offload-link`` | ||
^^^^^^^^^^^^^^^^^^ | ||
Use the new offloading linker `clang-linker-wrapper` to perform the link job. | ||
`clang-linker-wrapper` is the default offloading linker for OpenMP. This option | ||
can be used to use the new offloading linker in toolchains that do not automatically | ||
use it. It is necessary to enable this option when linking with CUDA or HIP files. | ||
|
||
``-nogpulib`` | ||
^^^^^^^^^^^^^ | ||
Do not link the device library for CUDA or HIP device compilation. | ||
|
||
``-nogpuinc`` | ||
^^^^^^^^^^^^^ | ||
Do not include the default CUDA or HIP headers, and do not add CUDA or HIP | ||
include paths. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters