我收到MPI_Bcast的錯誤(我認爲它是舊的錯誤)我不知道爲什麼會發生這種情況。錯誤如下:MPI_Bcast的錯誤
An error occurred in MPI_Bcast
on communicator MPI_COMM_WORLD
MPI_ERR_TRUNCATE: message truncated
MPI_ERRORS_ARE_FATAL: your MPI job will now abort
它發生在哪裏的代碼是:
for (int i = 0; i < nbProcs; i++){
for (int j = firstLocalGrainRegion; j < lastLocalGrainRegion; j++){
GrainRegion * grainRegion = microstructure->getGrainRegionAt(j);
int grainSize = grainRegion->getBoxSize(nb);
double * newValues;
if (myId == i)
newValues = grainRegion->getNewValues();
else
newValues = new double[grainSize];
MPI_Bcast(newValues, grainSize, MPI_DOUBLE, i, MPI_COMM_WORLD);
MPI_Barrier(MPI_COMM_WORLD);
if (myId != i)
grainRegion->setNewValues(newValues);
}
}
您的問題可能與[此問題]中的問題相同(http://stackoverflow.com/q/13290608/1374437)。向我們展示更多代碼上下文 –
另外:檢查'grainRegion-> getBoxSize(nb)'是否在所有進程中返回相同的值,否則最終可能會在'MPI_Bcast'調用中導致'grainSize'的值不匹配。 –
請注意,所有進程的緩衝區必須相同(因爲最終每個人都會在緩衝區中持有相同的東西)。如果你想發送1個值給所有的進程,你不需要整個數組。 – nhahtdh