Clang OpenMP版本,无法获取最新版本



我使用中的说明安装了clang和llvm版本9https://apt.llvm.org/。

接下来,我尝试从clang编译器中获取我的openmp版本,因此我创建了文件openmp_v.cpp:

#include <unordered_map>
#include <cstdio>
#include <omp.h>
int main(int argc, char *argv[])
{
std::unordered_map<unsigned,std::string> map{
{200505,"2.5"},{200805,"3.0"},{201107,"3.1"},{201307,"4.0"},{201511,"4.5"}};
printf("We have OpenMP %s.n", map.at(_OPENMP).c_str());
printf("Version: %d.n", _OPENMP);
return 0;
}

并编译它:

clang++-9 -std=c++17 -fopenmp openmp_v.cpp -o openmp_v -fopenmp=libiomp5

结果是:

We have OpenMP 3.1.
Version: 201107.

问题是openmp版本应该是4.5而不是3.1,因为clang-9支持openmp 4.5。

我甚至安装了libomp-9-dev,但没有任何变化。此外,我还找到了llvm-9的include和lib文件,它们位于:/usr/lib/lilvm-9并尝试将它们添加为:

clang++-9 -std=c++17 -fopenmp openmp_v.cpp -o openmp_v -fopenmp=libiomp5 -I /usr/lib/llvm-9/include/openmp -L /usr/lib/llvm-9/lib/

但它仍然不起作用。

编辑:用回复替换占位符。

在与clang的一位开发人员进行了一番交谈后,还不清楚这是clang中的一个bug还是一个功能。IMHO,当clang 9.0从主线代码版本分支时,可能是_OPENMP的版本字符串设置不正确。

存储库中的主线版本正确报告_OPENMP201511,这对应于OpenMP API 4.5版。我认为这是正确的,因为clang(据我所知(还没有完全支持OpenMP 5.0。

因此,clang 10.0.0将正确地报告版本号。我不确定clang 9.0.0是否会有一个错误修复版本来修复这个问题。

希望能有所帮助!

最新更新