Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clang 叮当的OpenMP版本,无法获取最新版本_Clang_Version_Openmp - Fatal编程技术网

Clang 叮当的OpenMP版本,无法获取最新版本

Clang 叮当的OpenMP版本,无法获取最新版本,clang,version,openmp,Clang,Version,Openmp,我已经使用中的说明安装了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{ {

我已经使用中的说明安装了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;
}
结果是:

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中的一个bug还是更多的一个特性。我想,可能是当clang 9.0从主线代码版本分支时,
\u OPENMP
的版本字符串设置不正确

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

因此,Clang10.0.0将正确报告版本号。我不确定clang 9.0.0是否会发布一个bug修复版本来解决这个问题


希望有帮助

谢谢你的帮助。我希望它能很快得到解决。使用
-fopenmp version=45
获得对OpenMP 4.5的完全支持。不记得9.0中是否将4.5设置为默认OpenMP版本。也许,它仍然使用3.1作为默认版本。
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/