1
我有下面的代碼現在可以使用,但我不認爲隨着進程和發送數據的數量增長將會擴展。MPI發送和接收(多對多)
這裏是我要去:
首先我有一個發送迴路,每個處理器將消息發送到所有其他。 每個進程發送的消息長度將不同,但不是類型。
for (int i = 0; i < n_proc; ++i){
if (i != my_rank){
int N = Xcoord_top[my_rank].size();
MPI_Send(&Xcoord_top[my_rank][0], N, MPI_DOUBLE, i, 1000, MPI_COMM_WORLD);
}
}
MPI_Barrier(MPI_COMM_WORLD);
我發送的消息後,我收到他們使用類似的循環
for (int i = 0; i < n_proc; ++i){
if (i != my_rank){
std::vector<double> temp(max_n);
MPI_Recv(&temp[0], points_per_proc[i], MPI_DOUBLE,
MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
...
}
}
在第二循環中我也有把信息在正確的地方基於標籤幾行,消息來源
這隻有當我把環路之間的障礙,否則崩潰。
根據我的理解,消息的MPI內部存儲可能會溢出(我不確定是否使用正確的術語)。所以在這種情況下,程序會在第一個循環中掛起。
任何想法我應該怎麼做呢?
感謝它就這麼簡單! 只用於記錄disps應該被計算爲 disps [i] = disps [i-1] + points_per_proc [i-1];'和proc'i'的數據應該在'temp [disps [i ]] ... temp [disps [i + 1] -1]' – giorgk
非常正確,我會相應地更正答案。 –