【发布时间】:2015-05-14 07:41:00
【问题描述】:
我正在尝试在这里实现一个工作池。我应该总共向从属进程发送 100 个不同的数字。然后每个从属进程返回一些东西给主进程,另一个不同的数字由主进程发送给从属进程。这种情况一直持续到所有 100 次迭代结束。
我的程序陷入了无限循环,我认为这是由于 MPI_Send 和 MPI_Recv 的映射不正确。我无法弄清楚我做错了什么。我花了好几个小时研究这个但无济于事。我是 MPI 和一般编程的新手。代码如下:
if(rank == 0) {
int i,iteration = 0, a=0,inside=0,temp=0;
for(i = 1; i < slaves; i++) {
MPI_Send(&iteration,1,MPI_INT,i,0,MPI_COMM_WORLD);
MPI_Send(&a,1,MPI_INT,i,1,MPI_COMM_WORLD);
iteration++;
}
while(iteration < 100+slaves){
MPI_Recv(&temp,1,MPI_INT,MPI_ANY_SOURCE,0, MPI_COMM_WORLD, &status);
if(iteration < 100) {
MPI_Send(&iteration,1,MPI_INT,status.MPI_SOURCE,0,MPI_COMM_WORLD);
MPI_Send(&a,1,MPI_INT,status.MPI_SOURCE,1,MPI_COMM_WORLD);
}
iteration++;
inside = inside + temp;
}
}
else {
int iteration=0,count=0;
if(iteration < 100) {
MPI_Recv(&iteration,1,MPI_INT,0,0,MPI_COMM_WORLD,&status);
MPI_Recv(&count,1,MPI_INT,0,1,MPI_COMM_WORLD,&status);
MPI_Send(&count,1,MPI_INT,0,0,MPI_COMM_WORLD);
}
}
【问题讨论】:
-
为什么 for 循环从 1 开始而不是从 0 开始:
for(i = 1; i < slaves; i++) {? -
@AntoJurković 因为master(rank=0)只应该向slave(rank>0)发送数据。