0

我在 Ubuntu 18.04 上clang-11https://apt.llvm.org/安装,并且我的 C++ 测试项目中有 OpenMP 主机设备功能,但即使我有 Nvidia GPU 和工作 CUDA 11 工具包,也会omp_get_num_devices()返回。0我是否必须从源代码构建特殊版本的 Clang 才能使 OpenMP GPU 卸载工作,如此处所述:https ://hpc-wiki.info/hpc/Building_LLVM/Clang_with_OpenMP_Offloading_to_NVIDIA_GPUs ?

4

2 回答 2

2

是的,我相信您必须从源代码构建自己的版本。我编写了一个简单的脚本来构建具有 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如有必要,您还可以在脚本末尾添加变量设置。

于 2020-11-11T12:25:20.740 回答
1

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

虽然很新而且大部分都是空的,但这些东西最终会在这里描述:http: //openmp.llvm.org/docs

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

最后,乍一看@ouankou 的脚本看起来不错,除了我通常推荐最新的顶级主干而不是发布。它可能不稳定,但 TBH,对于 OpenMP 卸载支持,它可能不会比发布版本更不稳定。

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

于 2020-11-11T17:45:38.883 回答