Il codice C++ è legale o esiste un problema con il compilatore? Il codice è stato rispettato in una libreria condivisa utilizzandoPerché il loop while in una sezione parallela OMP non si interrompe quando la condizione di terminazione dipende dall'aggiornamento dalla sezione differente
gcc version 4.4.6 20.110.731 (Red Hat 4.4.6-3) (GCC)
e openMP e poi chiamato via R 2.15.2.
int it=0;
#pragma omp parallel sections shared(it)
{
#pragma omp section
{
std::cout<<"Entering section A"<<std::endl;
for(it=0;it<10;it++)
{
std::cout<<"Iteration "<<it<<std::endl;
}
std::cout<<"Leaving section A with it="<<it<<std::endl;
}
#pragma omp section
{
std::cout<<"Entering section B with it="<<it<<std::endl;
while(it<10)
{
1;
}
std::cout<<"Leaving section B"<<std::endl;
}
}
ottengo il seguente output (scuse per intrecciare uscita da 2 fili ma ritengo sia interpretabile):
Entering section A
Iteration Entering section B with it=0
0
Iteration 1
Iteration 2
Iteration 3
Iteration 4
Iteration 5
Iteration 6
Iteration 7
Iteration 8
Iteration 9
Leaving section A with it=10
Il programma stalle quindi: Sezione B sembra arrestarsi nel ciclo while . Poiché la variabile 'it' è condivisa, non capisco perché il ciclo while non termini quando la sezione A è completa.
Grazie mille. – wjastle
Per motivi di interesse è strettamente necessario aggiungere il comando flush nella sezione A? Non tutti i dati vengono copiati dalla cache del processore nella memoria principale alla fine di una sezione? – wjastle