Проблема с использованием MPI_Send - PullRequest
1 голос
/ 22 апреля 2011

Я изучаю 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 узел?Спасибо.

1 Ответ

0 голосов
/ 25 апреля 2011

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

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

...