首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Clang OpenMP版本,不能获得最新版本

Clang OpenMP版本,不能获得最新版本
EN

Stack Overflow用户
提问于 2019-11-14 07:21:35
回答 1查看 391关注 0票数 2

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

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

代码语言:javascript
复制
#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;
}

并汇编如下:

代码语言:javascript
复制
clang++-9 -std=c++17 -fopenmp openmp_v.cpp -o openmp_v -fopenmp=libiomp5

结果是:

代码语言:javascript
复制
We have OpenMP 3.1.
Version: 201107.

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

我甚至安装了libomp-9-dev,没有什么改变。此外,我还找到了llvm-9包含和lib文件,它们位于: /usr/lib/llvm-9中,并尝试将它们添加为:

代码语言:javascript
复制
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/

但还是没用的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-14 11:11:35

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

在与一位clang开发人员进行了一番交谈之后,还不清楚这是clang中的bug还是更多的特性。当clang9.0从主线代码版本分支时,_OPENMP的版本字符串可能没有正确设置。

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

因此,clang10.0.0将正确报告版本号。我不确定是否会有一个补丁版本的clang9.0.0也将解决这个问题。

希望这能帮上忙!

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58851390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档