2011-01-25 11 views
10

Estoy intentando paralelizar mi programa con openMP. El programa está utilizando fuertemente los iteradores de STL. Es said que OpenMP 3.0 puede hacer frente a esto:OpenMP y estilo STL para

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

pero me dio el siguiente error:

error: invalid controlling predicate 

estoy usando gcc 4.5.0, (openMP3 implementado en 4.4.0) y mi cadena de construcción es:

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

Respuesta

7

Standard OpenMP no soporta los iteradores de C++ en general. El estándar requiere que los iteradores sean iteradores de acceso aleatorio con tiempo constante para acceso aleatorio. También solo permite < y <= o > y >= en expresiones de prueba de bucles for, pero no !=.

Si está utilizando iteradores y STL en gran medida, es posible que sea mejor con Thread building blocks.

+0

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

7

Desafortunadamente la especificación V3.0 OpenMP no incluía "=" como parte de la sintaxis legal para un canónico de bucle. Sin embargo, si tiene acceso a un compilador reciente de Intel, lo permitieron como una extensión.