首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >clang 10 & OpenMP关于基于范围的错误(docs说应该可以)

clang 10 & OpenMP关于基于范围的错误(docs说应该可以)
EN

Stack Overflow用户
提问于 2020-10-07 08:07:54
回答 1查看 355关注 0票数 1

我正在测试c++17 & OpenMP项目上的clang10.0,并在基于范围的OpenMP项目上使用#pragma omp parallel for时获取错误。

Clang中的OpenMP支持一节中,clang 10的发行说明非常清楚地说明:

  • 增加了对基于范围的循环的支持。

当我用clang++-10 -fopenmp -std=c++17编译MWE时(在线编译器请参见https://godbolt.org/z/fdTeMo ):

代码语言:javascript
复制
#include<vector>
#include<iostream>
int main(int argc, char** argv){
    std::vector<int> ii{0,11,22,33,44,55,66};
    #pragma omp parallel for
    for(int& i: ii){
        std::cerr<<i<<std::endl;
    }
}

我得到:

代码语言:javascript
复制
<source>:6:5: error: statement after '#pragma omp parallel for' must be a for loop

    for(int& i: ii){

    ^

1 error generated.

Compiler returned: 1

出什么事啦?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-07 08:21:43

对基于范围的for循环的支持已经添加到OpenMP 5.0中,并且正如链接到的Clang 10发行说明中所描述的那样,您需要显式地使用-fopenmp-version=50选项来激活对它的支持:

Clang中的OpenMP支持 使用-fopenmp-version=50选项激活对OpenMP 5.0的支持。

因此,如果我们将编译命令扩展到clang++-10 -fopenmp -fopenmp-version=50 -std=c++17,OMP实用化将接受后面基于for循环的范围。

演示

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

https://stackoverflow.com/questions/64239850

复制
相关文章

相似问题

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