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

问题描述

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

解决方法

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

该脚本采用三个参数:location,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的脚本看起来还不错,除了我通常会在发行版中推荐最新版的主干。它可能不稳定,但是TBH,对于OpenMP卸载支持,它的稳定性可能至少不低于发行版。

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...