C 关于使用MPI_发送的一个问题

C 关于使用MPI_发送的一个问题,c,mpi,C,Mpi,我正在学习MPI_Send,但我对这种方法感到困惑。我编写了一个简单的乒乓球程序,rank-0节点将消息发送给rank-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(

我正在学习MPI_Send,但我对这种方法感到困惑。我编写了一个简单的乒乓球程序,rank-0节点将消息发送给rank-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节点时会发生错误?谢谢。

您确实检查过strlenpingmsg在MPI\u发送和MPI\u接收中是否相同吗


使用MPI_SEND发送的数据量应小于或等于MPI_RECV接收的数据量,否则将导致错误。

您使用类似mpiexec-np 3的程序名运行此操作?运行mpiexec-np 3 hostname时会发生什么情况?谢谢,实际上,集群上存在配置问题。