【发布时间】:2016-01-26 16:34:02
【问题描述】:
我有以下带有 Microsoft MPI 的 c/c++ 代码
#include <stdio.h>
#include <stdlib.h>
#include "mpi.h"
int main (int argc, char *argv[])
{
int err, numtasks, taskid;
int out=0,val;
MPI_Status status;
MPI_Request req;
err=MPI_Init(&argc, &argv);
err=MPI_Comm_size(MPI_COMM_WORLD, &numtasks);
err=MPI_Comm_rank(MPI_COMM_WORLD, &taskid);
int receiver=(taskid+1)% numtasks;
int sender= (taskid-1+numtasks)% numtasks;
printf("sender %d, receiver %d, rank %d\n",sender,receiver, taskid);
val=50;
MPI_Isend(&val, 1, MPI_INT, receiver, 1, MPI_COMM_WORLD, &req);
MPI_Irecv(&out, 1, MPI_INT, sender, 1, MPI_COMM_WORLD, &req);
printf ("Rank: %d , Value: %d\n", taskid, out );
err=MPI_Finalize();
return 0;
}
如果使用超过 2 个进程启动应用程序,则会陷入死锁。 使用 2 个进程,应用程序可以工作,但不会执行“输出”写入。 此代码适用于 linux mpi 发行版,问题似乎仅在 microsoft 版本中。有什么帮助吗?
【问题讨论】: