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

Clang OpenMP version, can not get latest

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

接下来我尝试从 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/llvm-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 中的一个错误还是一个功能。恕我直言,当 clang 9.0 从主线代码版本分支时,可能是 _OPENMP 的版本字符串设置不正确。

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

因此,clang 10.0.0 将正确报告版本号。我不确定是否会有 clang 9.0.0 的错误修复版本也能解决这个问题。

希望对您有所帮助!