Wenn ein anderer Prozess einen anderen Wert an die anderen Prozesse in der Gruppe eines bestimmten Kommunikators sendet, was würde passieren?Könnte MPI_Bcast zum Problem der Datenunsicherheit führen?
Nehmen Sie das folgende Programm durch zwei Prozesse als Beispiel läuft,
int rank, size;
int x;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
if (rank == 0)
{
x = 0;
MPI_Bcast(&x, 1, MPI_INT, 0, MPI_COMM_WORLD);
}
else if (rank==1)
{
x = 1;
MPI_Bcast(&x, 1, MPI_INT, 1, MPI_COMM_WORLD);
}
cout << "Process " << rank << "'s value is:" << x << endl;
MPI_Finalize();
Ich denke, es am Ende des Programms verschiedene Möglichkeiten des gedruckten Ergebnisses sein könnte. Wenn der Prozess 0 schneller als Prozess 1 ausgeführt wird, sendet er seinen Wert früher als Prozess 1, so dass Prozess 1 den gleichen Wert mit Prozess 0 hat, wenn er beginnt, seinen Wert zu senden, wodurch der gedruckte Wert von x zu 0 wird Der Prozess 0 läuft langsamer als Prozess 1, der Prozess 0 hat den gleichen Wert wie Prozess 1, der am Ende 1 ist. Ist das, was ich beschrieben habe, tatsächlich passiert?
Genau genommen ist dieser Code nicht konform, da nicht alle Prozesse des Communicators 'MPI_Bcast()' mit dem gleichen Wurzelargument aufrufen (was vom MPI-Standard explizit gefordert wird). Daher ist das Verhalten nicht definiert: Alles kann passieren. – Gilles