【发布时间】:2016-09-02 12:04:29
【问题描述】:
我的代码中有一个错误。我有多个进程,所有处理来自二叉树的数据。最后,他们应该将结果发送到将处理结果的主节点(节点 0)。但是,由于某种原因,一些 MPI_Send 没有被接收。
int *output=(int*) malloc(sizeof(int)*(varNum+2)); //contains all variable values and maxSAT and assignNum
if(proc_id!=0 && proc_id<nodeNums){
output[0]=maxSAT;
output[1]=assignNum;
for(i=2;i<varNum+2;i++){
output[i]=varValues[i-2];
}
MPI_Send(output,varNum+2,MPI_INT,0,TAG,MPI_COMM_WORLD);
printf("proc %d sent data\n",proc_id);
}
else if(proc_id==0){
for(i=1;i<nodeNums;i++){
printf("receiving data from %d\n",i);
MPI_Recv(output,varNum+2,MPI_INT,i,TAG,MPI_COMM_WORLD,MPI_STATUS_IGNORE);
if(output[0]>maxSAT){
maxSAT=output[0];
assignNum=output[1];
for(i=0;i<varNum;i++){
varValues[i]=output[i+2];
}
}
else if(output[0]==maxSAT){
assignNum+=output[1];
}
}
}
当我使用 8 个进程 (nodeNums=8) 运行它时,这是输出。
proc 2 sent data
receiving data from 1
proc 5 sent data
proc 6 sent data
proc 3 sent data
proc 7 sent data
proc 1 sent data
proc 4 sent data
由于某种原因,所有进程都在发送数据,但它仅从 1 接收。但是,如果我使用 4 个进程运行它,则所有内容都已发送/接收。有人知道为什么会这样吗?
【问题讨论】:
标签: c mpi distributed-computing