J'essaie d'utiliser openmp pour multithread une boucle à travers std :: set. Quand j'écris le code suivant -Itération par conteneurs std dans openmp
#pragma omp parallel for
for (std::set<A>::const_iterator i = s.begin(); i != s.end(); ++i) {
const A a = *i;
operate(a);
}
Je reçois cette erreur:
error: invalid type for iteration variable 'i'
error: invalid controlling predicate
error: invalid increment expression.
Y at-il une autre bonne façon de itérer conteneurs std en utilisant OpenMP? Je sais que je peux utiliser int i
et itérer de 0
à s.size()
et un itérateur ou operator[]
dans le corps de la boucle, mais cela semble beaucoup moins propre.
Quel compilateur? GCC a une implémentation parallèle (http://gcc.gnu.org/onlinedocs/libstdc++/manual/parallel_mode.html) de 'std :: for_each' qui devrait faire l'affaire pour vous. Peut-être que vous pouvez également regarder la source là-bas? Voir aussi http://algo2.iti.kit.edu/singler/mcstl/. – stephan