Das Problem, das ich zu lösen versuche, ist folgendes:
Der serielle C++-Code, den ich habe, rechnet über eine große 2D-Matrix. Um diesen Prozess zu optimieren, möchte ich diese große 2D-Matrix aufteilen und mit MPI auf (sagen wir) 4 Knoten ausführen. Die einzige Kommunikation, die zwischen den Knoten stattfindet, ist die gemeinsame Nutzung der Kantenwerte am Ende eines jeden Zeitschritts. Jeder Knoten teilt die Daten der Kantenmatrix, A[i][j], mit seinem Nachbarn.
Basierend auf der Lektüre über MPI, habe ich das folgende Schema zu implementieren.
if (myrank == 0)
{
for (i= 0 to x)
for (y= 0 to y)
{
C++ CODE IMPLEMENTATION
....
MPI_SEND(A[x][0], A[x][1], A[x][2], Destination= 1.....)
MPI_RECEIVE(B[0][0], B[0][1]......Sender = 1.....)
MPI_BARRIER
}
if (myrank == 1)
{
for (i = x+1 to xx)
for (y = 0 to y)
{
C++ CODE IMPLEMENTATION
....
MPI_SEND(B[x][0], B[x][1], B[x][2], Destination= 0.....)
MPI_RECEIVE(A[0][0], A[0][1]......Sender = 1.....)
MPI BARRIER
}
Ich wollte wissen, ob mein Ansatz richtig ist und wäre auch dankbar für Hinweise auf andere MPI-Funktionen, die ich für die Implementierung in Betracht ziehen sollte.
Danke, Ashwin.