sto lavorando con OpenMP per parallelizzare uno scalare nidificato ciclo for:Come parallelizzare correttamente un cicli for innestati
double P[N][N];
double x=0.0,y=0.0;
for (int i=0; i<N; i++)
{
for (int j=0; j<N; j++)
{
P[i][j]=someLongFunction(x,y);
y+=1;
}
x+=1;
}
In questo ciclo la cosa importante è che matrice P deve essere la stessa in entrambi i scalare versioni parallele:
tutti i miei eventuali prove non ci sono riusciti ...
Ok, grazie per le risposte. Posso farti un'altra domanda? Cosa succede se voglio resettare ogni volta che y = 0 prima del ciclo interno? Come cambierebbe l'implementazione di openmp? – linello
Quindi cambia '(doppio) N * i + j' a' (doppio) j'. La chiave qui è che ho derivato le espressioni per 'x' e' y' come una funzione degli indici del ciclo. Questo ti permette di rompere le dipendenze. – Mysticial
Mille grazie alle vostre risposte, mi hanno chiarito come districare i loop per prepararli alla parallelizzazione di OpenMP. Un'ultima domanda, perché le versioni seriali e parallele di questo codice mi forniscono una porzione molto piccola di elementi diversi? 'for (int i = 0; i
linello