Ich bin neu in MPI und dieses Programm wurde in C-Sprache geschrieben. Im folgenden Programm frage ich andere Prozessoren, Nachrichten zu drucken. Aber ich möchte die "END" Nachricht bei Prozess/Rang 0 drucken, nachdem alle diese anderen Prozesse abgeschlossen wurden. Um dieses Programm auszuführen, verwende ich 4 Prozessoren und folgende Befehle mpicc file.c -o objfile
und mpirun -np 4 objfile
Bitte zeigen Sie mir mit einem Beispiel, wenn möglich.In MPI, wie das folgende Programm zu machen warte, bis alle Berechnungen abgeschlossen sind
#include <mpi.h>
#include <stdio.h>
#include <unistd.h>
int main(int argc, char** argv)
{
MPI_Init(&argc, &argv);
int world_rank;
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
int world_size;
MPI_Comm_size(MPI_COMM_WORLD, &world_size);
int i;
double centroid[3];/*ignore this array*/
if (world_rank == 0)
{
int destination;
for (i=0; i<3; i++)
{
/*Ignore centroid buffer been sent for now*/
destination = i+1;/*destination rank or process*/
MPI_Send(¢roid, 3, MPI_DOUBLE, destination, 0, MPI_COMM_WORLD);
}
printf("\nEND: This need to print after all MPI_Send/MPI_Recv has been completed\n\n");
}
else
{
MPI_Recv(¢roid, 3, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
sleep(1); /*This represent many calculations that will happen here later, instead of sleep*/
printf("Printing at Rank/Process number: %d\n", world_rank);
}
MPI_Finalize();
return 0;
}
Ergebnis:
END: This need to print after all MPI_Send/MPI_Recv has been completed
Printing at Rank/Process number: 2 Printing at Rank/Process number: 3 Printing at Rank/Process number: 1
Bitte diesen Code ändern oder zu mir zeigen, mit einem Beispiel dafür, wie bis all diesen anderen Prozessoren zu warten sind
Vielen Dank für die klare Nachricht und zeigen mit einem Beispiel. Ich habe eine ähnliche Frage in der folgenden Verbindung, wenn Sie antworten können: http://stackoverflow.com/questions/39967886/how-to-send-receive-in-mpi-using-all-processors –