2015-03-19 3 views
2

J'utilise la fonction MPI MPI_Sendrecv pour communiquer des tableaux de données entre les processus. Je le fais en Python en utilisant mpi4py, mais je suis sûr que ma question est indépendante de la langue utilisée.MPI_Sendrecv avec opération sur recvbuf?

Ce que je veux vraiment, c'est ajouter un tableau résidant sur un autre processus à un tableau local existant. Cela devrait être fait pour tous les processus, donc j'utilise la fonction MPI_Sendrecv pour envoyer et recevoir les tableaux en une seule fois. Je peux ensuite ajouter le tableau reçu dans le recvbuf à la matrice locale et j'ai terminé.

Ce serait bien si je pouvais sauver l'étape d'avoir un tableau recvbuf séparé, et recevoir simplement les données directement dans le tableau local sans écraser les données existantes, mais la mise à jour plutôt à l'aide d'une opération (addition dans mon cas). Je suppose que ce que je cherche est une fonction combinée MPI_Sendrecv/MPI_Reduce. Est-ce que certaines fonctions comme celle-ci existent dans MPI?

+0

Est-ce une opération par paire - par exemple, chaque rang a un seul voisin cela doit se produire? Pouvez-vous nous en dire un peu plus sur le modèle de communication? –

Répondre

1

MPI_Recvreduce est ce que vous cherchez. Malheureusement, il n'existe pas encore. C'est quelque chose que le Forum MPI a cherché à ajouter à une future version de la norme, mais n'a pas encore été adopté et ne sera pas dans la prochaine MPI 3.1.