2012-05-29 3 views
1

J'ai ce tableau [1 2 3 4 5 6 7 8 9] et j'effectue une opération de balayage sur cela.Rassembler les résultats de MPI_SCAN

J'ai 3 tâches mpi et chaque tâche obtient 3 éléments alors chaque tâche calcule son analyse et renvoie le résultat à la tâche maître

task 0 - [1 2 3] => [1 3 6] 
task 1 - [4 5 6 ] => [4 9 15] 
task 2 - [7 8 9] => [7 15 24] 

Maintenant, la tâche 0 obtient tous les résultats [1 3 6] [4 9 15 ] [7 15 24]

Comment puis-je combiner ces résultats pour produire une sortie de numérisation finale?

sortie numérisation finale de la matrice serait [1 3 6 10 15 21 28 36 45]

quelqu'un peut me aider s'il vous plaît? Etes-vous en train d'implémenter votre propre opération d'analyse?

Répondre

4

Puisque ce n'est pas ce que fait MPI_SCAN. Il applique le élément par élément d'opération de balayage sur chaque i -ième élément du tableau d'entrée stockées sur chaque noeud et le résultat sera plus comme:

rank 0 - [1 2 3] => [ 1 2 3] 
rank 1 - [4 5 6] => [ 5 7 9] 
rank 2 - [7 8 9] => [12 15 18] 

Néanmoins, afin d'obtenir le résultat que vous voulez, vous devrait ajouter 6 (le dernier élément de la première analyse dans la tâche 0) à tous les éléments dans les prochains scans:

[ 1 3 6][ 4 9 15][ 7 15 24] 
      +6 --------------> 
      = 
[ 1 3 6][10 15 21][13 21 30] 

Ensuite, vous devez ajouter 15 (le dernier élément de l'analyse dans la tâche 1 avant6 a été ajouté) à tous les éléments dans les analyses suivantes et ainsi de suite.

[ 1 3 6][10 15 21][13 21 30] 
        +15 ----> 
        = 
[ 1 3 6][10 15 21][28 36 45] 

Sinon, vous pouvez ajouter 6 que les résultats de la deuxième analyse, puis ajoutez 21 aux résultats du troisième balayage et ainsi de suite. Peut-être que vous pouvez trouver une façon intelligente de faire cela en utilisant les opérations MPI.

+0

+1; On pourrait mettre en œuvre ce qui précède en utilisant un MPI_Scan sur les derniers éléments des tableaux (par exemple, pour obtenir le 6 et 15) et ensuite procéder comme ci-dessus, mais si tout va juste être envoyé au processeur 0, c'est beaucoup mieux façon de le faire, car il n'y a pas de frais généraux de communication supplémentaires. –

Questions connexes