Enviando y recibiendo una matriz 2D sobre MPI

El problema que estoy tratando de resolver es el siguiente:

El código de serie C ++ que tengo computa a través de una gran matriz 2D. Para optimizar este proceso, deseo dividir esta gran matriz 2D y ejecutarla en 4 nodos (digamos) usando MPI. La única comunicación que se produce entre nodos es compartir valores de borde al final de cada paso de tiempo. Cada nodo comparte los datos de la matriz de borde, A [i] [j], con su vecino.

e acuerdo con la lectura sobre MPI, tengo que implementar el siguiente esquema.

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
}

Quería saber si mi enfoque es correcto y también agradecería cualquier orientación sobre otras funciones de MPI que también se tienen en cuenta para la implementación.

Gracias Ashwin.

Respuestas a la pregunta(2)

Su respuesta a la pregunta