我正在跟踪文档中的源代码,但当我尝试使用Open MPI库中的MPI_Send()
和MPI_Recv()
时遇到错误。我在Google上搜索并阅读了此站点中的一些线程,但我无法找到解决方案来解决我的错误。这是我的错误:
mca_oob_tcp_msg_recv: readv faled : Unknown error (108)
下面是详细信息图像:
这是我要用的代码
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <mpi.h>
int main(int argc, char **argv) {
int rank, size, mesg, tag = 123;
MPI_Status status;
MPI_Init(&argv, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
if (size < 2) {
printf("Need at least 2 processes!\n");
} else if (rank == 0) {
mesg = 11;
MPI_Send(&mesg,1,MPI_INT,1,tag,MPI_COMM_WORLD);
MPI_Recv(&mesg,1,MPI_INT,1,tag,MPI_COMM_WORLD,&status);
printf("Rank 0 received %d from rank 1\n",mesg);
} else if (rank == 1) {
MPI_Recv(&mesg,1,MPI_INT,0,tag,MPI_COMM_WORLD,&status);
printf("Rank 1 received %d from rank 0/n",mesg);
mesg = 42;
MPI_Send(&mesg,1,MPI_INT,0,tag,MPI_COMM_WORLD);
}
MPI_Finalize();
return 0;
}
我注解了所有的MPI_Send()
和MPI_Recv()
,我的程序可以运行。另一方面,我注解了MPI_Send()
或MPI_Recv()
,我仍然得到那个错误。所以我认为问题出在MPI_Send()
和MPI_Recv()
函数上。
P.S.:我正在Windows 8.1操作系统上使用Open MPI v1.6。
2条答案
按热度按时间juud5qan1#
您向
MPI_Init
传递了错误的参数(两次argv,而不是argc和argv各一次)。我认为发送和接收实际上看起来很好。但是在您的一个打印文件中有一个打字错误,使用/n
而不是\n
。以下是对我有效的方法(不过在MacOSX上):
如果这不起作用,我猜您的操作系统不允许进程通过OpenMPI选择的方法相互通信。
xqnpmsa82#
在MPI_Recv的两个位置设置
MPI_STATUS_IGNORED
而不是&status
。