我有这个MPI程序挂起而没有完成。知道哪里出错了吗?可能是我遗漏了一些东西,但我想不出代码可能存在的问题。更改发送和接收的顺序也不起作用。 (但我猜测任何命令都会因为呼叫的非阻塞特性而发生。)
#include <mpi.h>
int main(int argc, char** argv) {
int p = 2;
int myrank;
double in_buf[1];
double out_buf[1];
MPI_Comm comm = MPI_COMM_WORLD;
MPI_Status stat;
MPI_Init(&argc, &argv);
MPI_Comm_rank(comm, &myrank);
MPI_Comm_size(comm, &p);
MPI_Request requests[2];
MPI_Status statuses[2];
if (myrank == 0) {
MPI_Isend(out_buf,1, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD, &requests[0]);
MPI_Irecv(in_buf, 1, MPI_DOUBLE, 1, 1, MPI_COMM_WORLD, &requests[1]);
} else {
MPI_Irecv(in_buf, 1, MPI_DOUBLE, 1, 1, MPI_COMM_WORLD, &requests[0]);
MPI_Isend(out_buf, 1, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD, &requests[1]);
}
MPI_Waitall(2, requests, statuses);
printf("Done...\n");
}
答案 0 :(得分:4)
蝙蝠的权利看起来你的标签不匹配。 您从等级0发布isend,标签= 0但是从等级1发布irecv,标签= 1。
我假设您也启动了两个进程,对吧? int p = 2
没有做任何有用的事情。