【发布时间】:2012-03-07 04:01:26
【问题描述】:
我正在构建一个简单的应用程序,它在三个迭代中构建一个逻辑循环,然后打印结果。首先,我使用阻塞发送和接收,从进程 0,我使用发送和接收,直到最后的 n-1 个进程,它发送到进程 0。在进程 0 中,我在 main 中有这段代码:
int i;
MPI_Status status;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD,&numtasks);
MPI_Comm_rank(MPI_COMM_WORLD;&myrank);
if(myrank==0){
for(i=0;i<3;i++){
MPI_Send(msg,MPI_CHAR,myrank+1,99,MPI_COMM_WORLD);
MPI_Recv(msg,100,MPI_CHAR, numtasks-1,99,MPI_COMM_WORLD,&status);
printf("hello");
}
}
else if(myrank==(numtasks-1)){
MPI_Recv(msg,100,MPI_CHAR,numtasks-2,99,MPI_COMM_WORLD,&status);
MPI_Send(msg,100,MPI_CHAR,0,99,MPI_COMM_WORLD);
}
else{
MPI_Recv(msg,100,MPI_CHAR,myrank-1,99,MPI_COMM_WORLD,&status);
MPI_Send(msg,100,MPI_CHAR,myrank+1,99,MPI_COMM_WORLD);
}
我现在正在尝试获得 3 个结果,对吗?但我仍然只得到一个。其余代码很简单,对于 0 以外的进程,它们从 myrank-1 接收(myrank 是实际进程的数量)并发送到 rank+1 ......我还是不明白......谢谢你的想法。
【问题讨论】: