2011-01-25 4 views
10

J'essaie de paralléliser mon programme avec openMP. Le programme utilise beaucoup les itérateurs STL. Il est said que OpenMP 3.0 peut traiter ceci:OpenMP et STL-style pour

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 
}; 

Mais j'ai l'erreur suivante:

error: invalid controlling predicate 

J'utilise gcc 4.5.0, (openMP3 mis en œuvre 4.4.0) et ma chaîne de construction est:

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

Répondre

7

Standard OpenMP ne supporte pas les itérateurs C++ en général. La norme exige que les itérateurs soient des itérateurs à accès aléatoire avec un temps constant pour un accès aléatoire. Il autorise également uniquement < et <= ou > et >= dans les expressions de test des boucles for, mais pas !=.

Si vous utilisez des itérateurs et STL fortement, vous pourriez être mieux avec Thread building blocks.

+0

pour (n = N.begin(); n galadog

7

Malheureusement, la spécification V3.0 OpenMP ne comprend pas « = » dans le cadre de la syntaxe juridique pour une boucle canonique. Cependant, si vous avez accès à un compilateur Intel récent, ils l'ont autorisé en tant qu'extension.