Problem:
Sie haben eine große 2D-Matrix, die eine Verarbeitung über mehrere hinweg erfordert Knoten mit MPI. Die einzige Kommunikation zwischen Knoten besteht darin, Kantenwerte nach jedem Zeitschritt zu teilen.
Ansatz:
Ihr vorgeschlagener Ansatz, der in der Frage beschrieben wird, ist für dieses Problem geeignet. Die folgenden Codesegmente veranschaulichen die vorgeschlagene Implementierung:
// (assume A is a 2D array) if (myrank == 0) { for (i = 0; i < x; i++) { for (j = 0; j < y; j++) { // Perform C++ code implementation MPI_Send(&A[i][0], 3, MPI_INT, 1, 0, MPI_COMM_WORLD); MPI_Recv(&B[0][0], 3, MPI_INT, 1, 0, MPI_COMM_WORLD, &status); MPI_Barrier(MPI_COMM_WORLD); } } } if (myrank == 1) { for (i = x; i < xx; i++) { for (j = 0; j < y; j++) { // Perform C++ code implementation MPI_Send(&B[i][0], 3, MPI_INT, 0, 0, MPI_COMM_WORLD); MPI_Recv(&A[0][0], 3, MPI_INT, 0, 0, MPI_COMM_WORLD, &status); MPI_Barrier(MPI_COMM_WORLD); } } }
Zusätzliche MPI-Funktionen:
Überlegungen:
Das obige ist der detaillierte Inhalt vonWie kann man 2D-Arrays in MPI effektiv senden und empfangen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!