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
非常正确,我会相应地更正答案。 –