C++ OpenMP和STL样式用于

C++ OpenMP和STL样式用于,c++,stl,for-loop,openmp,C++,Stl,For Loop,Openmp,我正在尝试用openMP并行化我的程序。该程序大量使用STL迭代器。openMP 3.0可以处理以下问题: std::vector<int> N(2*N_max+1); std::vector<int>::const_iterator n,m; #pragma omp parallel for for (n=N.begin(); n!=N.end(); ++n){ //Task to be in parallel }; 我使用的是gcc 4.5.0(open

我正在尝试用openMP并行化我的程序。该程序大量使用STL迭代器。openMP 3.0可以处理以下问题:

std::vector<int> N(2*N_max+1);

std::vector<int>::const_iterator n,m;
#pragma omp parallel for
for (n=N.begin(); n!=N.end(); ++n){
     //Task to be in parallel
};
我使用的是gcc 4.5.0(openMP3在4.4.0中实现),我的构建字符串是:

g++  -O0 -g3 -Wall -c -fmessage-length=0 -fopenmp -MMD -MP  

不幸的是,OpenMP V3.0规范没有将“!=”作为规范for循环的合法语法的一部分。但是,如果你有一个最近的英特尔编译器,他们允许它作为一个扩展。

标准OpenMP一般不接受C++迭代器。该标准要求迭代器为随机访问迭代器,随机访问时间为常数。它还只允许for循环的测试表达式中出现

=
,但不允许出现
=

如果大量使用迭代器和STL,则最好使用。

for(n=n.begin();n
g++  -O0 -g3 -Wall -c -fmessage-length=0 -fopenmp -MMD -MP