Salutation,

encore une question en relation avec ce problème de parallélisation.


J'ai deux questions, qui en fait font partie du même problème, mais je vais décomposer ici pour simplifier.


J'ai une boucle séquentielle qui calcule un minimum

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
for(int i=0;i<N;i++){
  if(min<val){
     val= min
  }
}
Ici, admettons que je veuille paralléliser cette boucle.

Je vais faire un pragma omp for private (min)

De cette façon chacun des threads va calculer un minimum local.

Par exemple T0 aura le min de i=0 à 5 / T1 de i=6 à N

En sortie de boucle il reste donc à récupérer le min entre T0 et T1.

Comment effectuer cette opération là ?


======================================

Seconde question, toujours lié

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
for(int i=0;i<N;i++){
  if(min<val){
     val= min
     val2=i
  }
}
Ici si je parallélise ma boucle, en admettant que la réponse à la q1 soit ok et que mes T0 et T1 se synchronise bien sur leur propre min. Ici, j'ai en plus à me synchro sur la val2 qui correspond à celle affecte en même temps que le min.


De façon globale, la question est donc, comment synchroniser toutes mes variables en sorties.