我正在尝试使用openmp通过std :: set多线程循环。当我写了下面的代码 -在openmp中通过std容器进行迭代
#pragma omp parallel for
for (std::set<A>::const_iterator i = s.begin(); i != s.end(); ++i) {
const A a = *i;
operate(a);
}
我得到这个错误:
error: invalid type for iteration variable 'i'
error: invalid controlling predicate
error: invalid increment expression.
是否有使用OpenMP通过STD容器迭代另一个,正确的方法? 我知道我可以使用int i
并从0
重复s.size()
和循环体中的迭代器或operator[]
,但这看起来不太干净。
哪个编译器? GCC有一个并行的实现(http://gcc.gnu.org/onlinedocs/libstdc++/manual/parallel_mode.html)'std :: for_each',它应该为你做好诀窍。也许你也可以看看那里的源代码?另见http://algo2.iti.kit.edu/singler/mcstl/。 – stephan 2010-03-25 09:08:15