MPI_SEND deja de funcionar después de MPI_BARRIER

Estoy creando un servidor web distribuido en C / MPI y parece que la comunicación punto a punto deja de funcionar por completo después del primer MPI_BARRIER en mi código. El código C estándar funciona después de la barrera, así que sé que cada uno de los hilos atraviesa la barrera. La comunicación punto a punto también funciona bien antes de la barrera. Sin embargo, cuando copio y pego el mismo código que trabajó la línea antes de la barrera en la línea después de la barrera, deja de funcionar por completo. El ENVIAR solo esperará por siempre. Cuando intento usar un ISEND en su lugar, lo hace a través de la línea, pero el mensaje nunca se recibe. He estado buscando mucho en Google este problema y a todos los que tienen problemas con MPI_BARRIER se les dice que la barrera funciona correctamente y que su código es incorrecto, pero no puedo, por mi vida, averiguar por qué mi código es incorrecto. ¿Qué podría estar causando este comportamiento?

Aquí hay un programa de ejemplo que demuestra esto:

<code>#include <mpi.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
  int procID;
  int val;
  MPI_Status status;

  MPI_Init(&argc, &argv);
  MPI_Comm_rank(MPI_COMM_WORLD, &procID);
  MPI_Barrier(MPI_COMM_WORLD);

  if (procID == 0)
  {
    val = 4;
    printf("Before send\n");
    MPI_Send(&val, 1, MPI_INT, 1, 4, MPI_COMM_WORLD);
    printf("after send\n");
  }

  if (procID == 1)
  {
    val = 1;
    printf("before: val = %d\n", val);
    MPI_Recv(&val, 1, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
    printf("after: val = %d\n", val);
  }

  MPI_Finalize();
  return 0;
}
</code>

Moviendo los dosif declaraciones antes de la barrera hace que este programa se ejecute correctamente.

EDITAR - Parece que la primera comunicación, independientemente del tipo, funciona y todas las comunicaciones futuras fallan. Esto es mucho más general de lo que pensé al principio. No importa si la primera comunicación es una barrera o algún otro mensaje, ninguna comunicación futura funciona correctamente.

Respuestas a la pregunta(1)

Su respuesta a la pregunta