我是不是必须在 Ubuntu 18.04 上从源代码构建 clang-11 才能卸载 OpenMP GPU 目标?
Posted
技术标签:
【中文标题】我是不是必须在 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?我是否必须在 Ubuntu 18.04 上从源代码构建 clang-11 才能卸载 OpenMP GPU 目标? 【发布时间】:2021-02-23 05:53:56 【问题描述】:我在 Ubuntu 18.04 上从 https://apt.llvm.org/ 安装了 clang-11
,并且我的 C++ 测试项目中有 OpenMP 主机设备功能,但 omp_get_num_devices()
返回 0
,即使我有 Nvidia GPU 和工作 CUDA 11 工具包。我是否必须从源代码构建一个特殊版本的 Clang 才能使 OpenMP GPU 卸载工作,如下所述:https://hpc-wiki.info/hpc/Building_LLVM/Clang_with_OpenMP_Offloading_to_NVIDIA_GPUs?
【问题讨论】:
【参考方案1】:是的,我相信您必须从源代码构建自己的版本。我编写了一个简单的脚本来构建具有 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
。
【讨论】:
经过一番搜索,我得出了相同的结论。我将尝试构建它并报告结果。不过,我的文档补丁没有通过。添加注释Clang 必须从源代码构建以启用对给定 GPU 的卸载支持 到releases.llvm.org/11.0.0/tools/clang/docs/OpenMPSupport.html 会有所帮助【参考方案2】: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!)
【讨论】:
感谢您的详细回复。在 LLVM 和 GCC 中,OpenMP 卸载的第一个问题是文档中缺乏关于需要构建自定义版本来启用此功能的明确声明。我尝试了一个带有简短注释的 LLVM 文档的拉取请求(必须从源代码构建 Clang 以启用对给定 GPU 的卸载支持),但是通过在 Github 上进行简单编辑来完成此操作被自动拒绝。 LLVM 尚未执行拉取请求。补丁需要转到提交列表或 reviews.llvm.org 。更多信息可在此处llvm.org/docs/Contributing.html#how-to-submit-a-patch 获得。我确实更新了openmp.llvm.org/docs/SupportAndFAQ.html 下的常见问题解答,以包含一个简短的声明。我鼓励您提交补丁以改进您认为合适的文档!以上是关于我是不是必须在 Ubuntu 18.04 上从源代码构建 clang-11 才能卸载 OpenMP GPU 目标?的主要内容,如果未能解决你的问题,请参考以下文章
如何在Ubuntu 18.04 Server上安装Redis
在 Ubuntu 14.04 上从源代码编译时如何链接到 opencv 3.0?
fgets 无法在 Ubuntu 20.04 上从管道读取两次