J'ai des problèmes pour exécuter ce programme dans mpi4py. Mon objectif est d'envoyer des données spécifiques à un nœud particulier (c'est pourquoi je n'utilise pas scatter). Après cela, traiter les données dans chaque nœud, et finalement rassembler tous les résultats.Envoi de données spécifiques par nœud et collecte des résultats dans MPI-Python
Apparemment, mon programme ne comprend pas comment rassembler les données de différents nœuds (peut-être parce que gather est conçu pour fonctionner avec scatter). J'ai essayé d'envoyer la date avec comm.send() et rassembler avec comm.gather(). Quand j'exécute le programme, il s'exécute pour toujours, et je ne vois aucun résultat.
Pouvez-vous m'aider à trouver comment rassembler les données des différents nœuds? Y a-t-il d'autres fonctions pour le faire? Puis-je avoir besoin d'une boucle sur les nœuds?
from mpi4py import MPI
import numpy as np
comm = MPI.COMM_WORLD
size = comm.Get_size()
rank = comm.Get_rank()
if rank == 0:
data = list(np.arange(size) + 1)
for i in range(size):
comm.send(data[i], dest=i)
else:
data = comm.recv(source=0)
data += 1
print("rank", rank, "has data", data)
newData = comm.gather(data, root = 0)
if rank == 0:
print("master collected", newData)
Dans mon cas, il ne fonctionne pas toujours et je vois les résultats. – Shibli