Estoy tratando de usar openmp para multiprocesar un bucle a través de std :: set. Cuando escribo el siguiente código -Iteración a través de contenedores estándar en openmp
#pragma omp parallel for
for (std::set<A>::const_iterator i = s.begin(); i != s.end(); ++i) {
const A a = *i;
operate(a);
}
consigo este error:
error: invalid type for iteration variable 'i'
error: invalid controlling predicate
error: invalid increment expression.
¿Hay alguna otra forma correcta de iterar a través de contenedores std usando OpenMP? Sé que puedo utilizar int i
e iterar 0
-s.size()
y un iterador o operator[]
en el cuerpo del bucle, pero esto se ve mucho menos limpio.
¿Qué compilador? GCC tiene una implementación paralela (http://gcc.gnu.org/onlinedocs/libstdc++/manual/parallel_mode.html) de 'std :: for_each' que debería ser el truco para usted. Tal vez también puede ver la fuente allí? Ver también http://algo2.iti.kit.edu/singler/mcstl/. – stephan