OpenMP和STL风格

gal*_*dog 10 c++ for-loop stl 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
};
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

error: invalid controlling predicate
Run Code Online (Sandbox Code Playgroud)

我正在使用gcc 4.5.0,(4.4.0中实现的openMP3),我的构建字符串是:

g++  -O0 -g3 -Wall -c -fmessage-length=0 -fopenmp -MMD -MP  
Run Code Online (Sandbox Code Playgroud)

ejd*_*ejd 7

不幸的是,OpenMP V3.0规范没有包含"!="作为规范for循环的法律语法的一部分.但是,如果您可以访问最近的英特尔编译器,则允许将其作为扩展.


lun*_*orn 7

标准OpenMP通常不支持C++迭代器.该标准要求迭代器是随机访问迭代器,具有恒定的随机访问时间.它也只允许<<=>>=在for循环测试表达式,但没有!=.

如果您正在大量使用迭代器和STL,那么使用Thread构建块可能会更好.