2012-10-01 1 views

Répondre

1

Si je reçois votre question correctement MPI_Reduce est ce qu'il vous faut. EDIT: je n'ai pas compris votre question correctement. Ce dont vous avez besoin est MPI_Gather. Et dans ce document, vous voyez que: Each process (root process included) sends the contents of its send buffer to the root process. The root process receives the messages and stores them in rank order. Espérons que cela répond à votre question.

+0

mais MPI_Reduce prendra-t-il en charge la commande d'envoi? –

+0

Vous voulez dire qu'il sera exécuté seulement quand toutes les données sont envoyées? Oui c'est ce qui arrivera à moins qu'une erreur se produise dans MPI. –

+0

'MPI_Reduce' effectuera une opération de réduction parmi un communicateur. Si vous devez recevoir des données de N processus dans un seul processus, je pense que vous recherchez 'MPI_Gather'. – Massimiliano

1

Essayez d'examiner la fonction MPI_Gather. Après l'appel, vous pouvez vérifier l'exécution conditionnelle de la façon suivante:

if (ierr == MPI_SUCCESS) { 
    // Execute a function 
} 
+0

MPI_Gather placera-t-il la pièce dans le même ordre que celui qui a été envoyé? –

+0

De la norme 2.2, section 5.5 sur MPI_Gather: _Le processus racine reçoit les messages et les stocke dans l'ordre. – Massimiliano

+0

La vérification de la valeur de retour de 'MPI_Gather' est inutile à moins que le gestionnaire d'erreur du communicateur ne soit changé en MPI_ERRORS_RETURN (ce dont je doute que la plupart des gens s'embarrassent ou sachent comment faire). Le gestionnaire d'erreur par défaut appelle 'MPI_Abort()' en cas d'erreur et la ligne de code suivante ne s'exécuterait pas du tout. –

Questions connexes