我在我的代碼中有一個錯誤。我有多個進程處理來自二叉樹的數據。最後,他們應該將結果發送到將要處理結果的主節點(節點0)。但是,由於某些原因,某些MPI_Sends沒有收到。MPI_Recv沒有收到所有的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個的進程中運行它,一切被髮送/接收。任何人都知道爲什麼會發生這種情況
哇......這樣一個愚蠢的錯誤...謝謝:) –