2011-01-25 7 views
10

Sto provando a parallelizzare il mio programma con openMP. Il programma utilizza pesantemente gli iteratori STL. È said che OpenMP 3.0 può trattare con questo:OpenMP e STL-style per

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

ma ho ottenuto il seguente errore:

error: invalid controlling predicate 

sto usando gcc 4.5.0, (openMP3 implementato in 4.4.0) e la mia stringa di build è:

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

risposta

7

Standard OpenMP non supporta gli iteratori C++ in generale. Lo standard richiede che gli iteratori siano iteratori ad accesso casuale con tempo costante per l'accesso casuale. Permette anche solo < e <= o > e >= nelle espressioni di prova di cicli for, ma non !=.

Se si utilizzano fortemente iteratori e STL, è possibile che si stia meglio con Thread building blocks.

+0

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

7

Purtroppo la V3.0 spec OpenMP non ha incluso "=" come parte della sintassi legale per un canonico per ciclo. Tuttavia, se si ha accesso a un recente compilatore Intel, lo hanno consentito come estensione.