我正在测试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 ):
#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;
}
}我得到:
<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出什么事啦?
发布于 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循环的范围。
演示。
https://stackoverflow.com/questions/64239850
复制相似问题