Проблема с использованием MPI_Send

Я изучаю MPI_Send, но меня смущает этот метод. Я написал простую программу для пинг-понга, в которой узел ранга 0 отправляет сообщение узлу ранга 1, а затем последний возвращает сообщение первому.

if (rank == 0) {   /* Send Ping, Receive Pong */
  dest = 2;
  source = 2;
  rc = MPI_Send(pingmsg, strlen(pingmsg)+1, MPI_CHAR, dest, tag, MPI_COMM_WORLD);
  rc = MPI_Recv(buff, strlen(pongmsg)+1, MPI_CHAR, source, tag, MPI_COMM_WORLD, &Stat);
   printf("Rank0 Sent: %s & Received: %s\n", pingmsg, buff);
  }
else if (rank == 2) { /* Receive Ping, Send Pong */
  dest = 0;
  source = 0;
  rc = MPI_Recv(buff, strlen(pingmsg)+1, MPI_CHAR, source, tag, MPI_COMM_WORLD, &Stat);
  printf("Rank1 received: %s & Sending: %s\n", buff, pongmsg);
  rc = MPI_Send(pongmsg, strlen(pongmsg)+1, MPI_CHAR, dest, tag, MPI_COMM_WORLD);
  }

Я запускаю эту программу в среде с 3 узлами. Однако система показывает:

Fatal error in MPI_Send: Other MPI error, error stack:
MPI_Send(173)..............: MPI_Send(buf=0xbffffb90, count=10, MPI_CHAR, dest=2, tag=1, MPI_COMM_WORLD) failed
MPID_nem_tcp_connpoll(1811): Communication error with rank 2: Unknown error 4294967295

Мне интересно, почему я могу отправить сообщение с узла ранга 0 на узел ранга 1, но возникает ошибка при переходе с узла ранга 0 на узел ранга 1? Спасибо.


c mpi
person Hengfeng Li    schedule 21.04.2011    source источник
comment
Вы запускаете это с чем-то вроде mpiexec -np 3 your-program-name? Что происходит, когда вы запускаете mpiexec -np 3 имя хоста?   -  person Jonathan Dursi    schedule 22.04.2011


Ответы (1)


На самом деле вы проверили, является ли strlen (pingmsg) одинаковым как в MPI_SEND, так и в MPI_RECV.

Количество данных, отправленных с помощью MPI_SEND, должно быть меньше или равно количеству данных, которые должны быть получены MPI_RECV, иначе это приведет к ошибке.

person veda    schedule 25.04.2011
comment
Спасибо, на самом деле возникла проблема конфигурации на кластере. - person Hengfeng Li; 15.06.2011