1Support, Getting Involved, and FAQ 2================================== 3 4Please do not hesitate to reach out to us via [email protected] or join 5one of our :ref:`regular calls <calls>`. Some common questions are answered in 6the :ref:`faq`. 7 8.. _calls: 9 10Calls 11----- 12 13OpenMP in LLVM Technical Call 14^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 15 16- Development updates on OpenMP (and OpenACC) in the LLVM Project, including Clang, optimization, and runtime work. 17- Join `OpenMP in LLVM Technical Call <https://bluejeans.com/544112769//webrtc>`__. 18- Time: Weekly call on every Wednesday 7:00 AM Pacific time. 19- Meeting minutes are `here <https://docs.google.com/document/d/1Tz8WFN13n7yJ-SCE0Qjqf9LmjGUw0dWO9Ts1ss4YOdg/edit>`__. 20- Status tracking `page <https://openmp.llvm.org/docs>`__. 21 22 23OpenMP in Flang Technical Call 24^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 25- Development updates on OpenMP and OpenACC in the Flang Project. 26- Join `OpenMP in Flang Technical Call <https://bit.ly/39eQW3o>`_ 27- Time: Weekly call on every Thursdays 8:00 AM Pacific time. 28- Meeting minutes are `here <https://docs.google.com/document/d/1yA-MeJf6RYY-ZXpdol0t7YoDoqtwAyBhFLr5thu5pFI>`__. 29- Status tracking `page <https://docs.google.com/spreadsheets/d/1FvHPuSkGbl4mQZRAwCIndvQx9dQboffiD-xD0oqxgU0/edit#gid=0>`__. 30 31 32.. _faq: 33 34FAQ 35--- 36 37.. note:: 38 The FAQ is a work in progress and most of the expected content is not 39 yet available. While you can expect changes, we always welcome feedback and 40 additions. Please contact, e.g., through ``[email protected]``. 41 42 43Q: How to contribute a patch to the webpage or any other part? 44^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 45 46All patches go through the regular `LLVM review process 47<https://llvm.org/docs/Contributing.html#how-to-submit-a-patch>`_. 48 49 50.. _build_offload_capable_compiler: 51 52Q: How to build an OpenMP offload capable compiler? 53^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 54 55To build an *effective* OpenMP offload capable compiler, only one extra CMake 56option, `LLVM_ENABLE_RUNTIMES="openmp"`, is needed when building LLVM (Generic 57information about building LLVM is available `here <https://llvm.org/docs/GettingStarted.html>`__.). 58Make sure all backends that are targeted by OpenMP to be enabled. By default, 59Clang will be built with all backends enabled. 60 61If your build machine is not the target machine or automatic detection of the 62available GPUs failed, you should also set: 63 64- `CLANG_OPENMP_NVPTX_DEFAULT_ARCH=sm_XX` where `XX` is the architecture of your GPU, e.g, 80. 65- `LIBOMPTARGET_NVPTX_COMPUTE_CAPABILITIES=YY` where `YY` is the numeric compute capacity of your GPU, e.g., 75. 66 67.. note:: 68 The compiler that generates the offload code should be the same (version) as 69 the compiler that builds the OpenMP device runtimes. The OpenMP host runtime 70 can be built by a different compiler. 71 72.. _advanced_builds: https://llvm.org//docs/AdvancedBuilds.html 73 74 75 76Q: Does OpenMP offloading support work in pre-packaged LLVM releases? 77^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 78For now, the answer is most likely *no*. Please see :ref:`build_offload_capable_compiler`. 79 80Q: Does OpenMP offloading support work in packages distributed as part of my OS? 81^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 82For now, the answer is most likely *no*. Please see :ref:`build_offload_capable_compiler`. 83 84 85.. _math_and_complex_in_target_regions: 86 87Q: Does Clang support `<math.h>` and `<complex.h>` operations in OpenMP target on GPUs? 88^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 89 90Yes, LLVM/Clang allows math functions and complex arithmetic inside of OpenMP target regions 91that are compiled for GPUs. 92 93Clang provides a set of wrapper headers that are found first when `math.h` and 94`complex.h`, for C, `cmath` and `complex`, for C++, or similar headers are 95included by the application. These wrappers will eventually include the system 96version of the corresponding header file after setting up a target device 97specific environment. The fact that the system header is included is important 98because they differ based on the architecture and operating system and may 99contain preprocessor, variable, and function definitions that need to be 100available in the target region regardless of the targeted device architecture. 101However, various functions may require specialized device versions, e.g., 102`sin`, and others are only available on certain devices, e.g., `__umul64hi`. To 103provide "native" support for math and complex on the respective architecture, 104Clang will wrap the "native" math functions, e.g., as provided by the device 105vendor, in an OpenMP begin/end declare variant. These functions will then be 106picked up instead of the host versions while host only variables and function 107definitions are still available. Complex arithmetic and functions are support 108through a similar mechanism. It is worth noting that this support requires 109`extensions to the OpenMP begin/end declare variant context selector 110<https://clang.llvm.org/docs/AttributeReference.html#pragma-omp-declare-variant>`__ 111that are exposed through LLVM/Clang to the user as well. 112 113Q: What is a way to debug errors from mapping memory to a target device? 114^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 115 116An experimental way to debug these errors is to use :ref:`remote process 117offloading <remote_offloading_plugin>`. 118By using ``libomptarget.rtl.rpc.so`` and ``openmp-offloading-server``, it is 119possible to explicitly perform memory transfers between processes on the host 120CPU and run sanitizers while doing so in order to catch these errors. 121 122Q: Why does my application say "Named symbol not found" and abort when I run it? 123^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 124 125This is most likely caused by trying to use OpenMP offloading with static 126libraries. Static libraries do not contain any device code, so when the runtime 127attempts to execute the target region it will not be found and you will get an 128an error like this. 129 130.. code-block:: text 131 132 CUDA error: Loading '__omp_offloading_fd02_3231c15__Z3foov_l2' Failed 133 CUDA error: named symbol not found 134 Libomptarget error: Unable to generate entries table for device id 0. 135 136Currently, the only solution is to change how the application is built and avoid 137the use of static libraries. 138