0
披露:這是一個家庭作業問題。我目前正在編寫MPI中的矩陣乘法器,並且正在嘗試診斷段錯誤。我將它縮小到了代碼的一個給定部分,對於爲什麼會發生這種情況,我完全感到困惑,否則我對MPI有一個根本性的誤解(完全有可能)。MPI局部變量被破壞,爲什麼?
主進程ID爲0,4個從進程有ID 1-4。在從屬進程已經計算出它們的輸出矩陣塊後,他們將它們發回給主設備,我用這段代碼接收它們。我已經提供了一個展示地方這個變量腐敗發生的一些打印語句:
for(i=1;i<numtasks;i++) {
source = i;
thischunksize = lindex-findex+1;
rc = MPI_Irecv(&Rbuf, thischunksize*rnx, MPI_INT, source, RCHUNKTAG, MP\
I_COMM_WORLD, request+4);
printf("0: D Just checking, i is %d and source is %d\n", i, source);
rc = MPI_Wait(request+4, status+4);
printf("0: E Just checking, i is %d and source is %d\n", i, source);
for(j=0;j<thischunksize*rnx;j++)
{
R[findex*rnx + j] = Rbuf[j];
}
}
,輸出是:
0: D Just checking, i is 1 and source is 1
0: E Just checking, i is 0 and source is 0
所以這些變量中的值MPI_WAIT功能運行時更改。爲什麼?主變量和從變量都使用i變量,但我認爲這不重要;我假定每個過程都有自己的記憶;這不是MPI的全部觀點嗎?
如果需要,我可以顯示剩餘的代碼,但我不確定是否有必要。謝謝你的幫助!