我是否必须从 Ubuntu 18.04 上的源代码构建 clang-11 才能卸载 OpenMP GPU 目标?

Do I have to build clang-11 from source on Ubuntu 18.04 to have OpenMP GPU target offload?

我从 https://apt.llvm.org/ on Ubuntu 18.04 and I have OpenMP host device functionality working in my C++ test project, but omp_get_num_devices() returns 0, even though I have Nvidia GPU and working CUDA 11 toolkit. Do I have to build a special version of Clang from source in order to get OpenMP GPU offload working, as described here: https://hpc-wiki.info/hpc/Building_LLVM/Clang_with_OpenMP_Offloading_to_NVIDIA_GPUs 安装了 clang-11 ?

是的,我相信您必须从源代码构建您自己的版本。我编写了一个简单的脚本来构建具有 GPU 卸载支持的 Clang/LLVM。请检查:https://gist.github.com/ouankou/27c1fc22aee9125190492ea126125249

该脚本采用三个参数:位置、LLVM 版本、CUDA 计算能力编号。例如,要在 NVIDIA Tesla V100 (Volta) 上构建 Clang/LLVM 11:

./install_llvm.sh $HOME/llvm11 11 70

如有必要,您也可以将脚本末尾的变量设置添加到.bashrc

用于 LLVM 的 Debian/Ubuntue 包不附带对 GPU [0] 的 OpenMP 卸载支持(至少在 LLVM 11 之前)。打包这有点棘手,但我们正在努力。目前,棘手的部分之一是,为了获得合理的性能,它需要两阶段构建,并且您需要(编辑)指定您的目标 GPU 架构。现在,当我们查看构建机器配置并做出合理猜测时,后一个要求在 LLVM 中已部分消失,但在 LLVM 11 版本 (IIRC) 中仍然存在。我们也在努力消除两阶段要求等。

虽然很新而且大部分是空的,但最终将在此处描述这些内容: http://openmp.llvm.org/docs

此外,如果您有任何问题或疑虑,请随时发送电子邮件至 openmp-dev@lists.llvm.org :)

最后,@ouankou 的脚本乍一看还不错,除了我通常推荐最新的 top-of-trunk 而不是一个版本。它可能不稳定,但是,TBH,对于 OpenMP 卸载支持,它可能不亚于发行版。

[0] CMake 摘录:https://paste.debian.net/1171752/(感谢 Sylvestre!)