【发布时间】:2019-04-25 09:17:25
【问题描述】:
我有一个 3D 笛卡尔过程拓扑。但是,我用 2D 来描述我的问题以简化它。
对于集体最近邻通信(左图),我使用MPI_Neighbor_alltoallw(),它允许发送和接收不同的数据类型。但是,此函数不适用于 对角邻居(右图),我需要另一个函数用于对角邻居。
实现对角邻居通信的想法是:
int main_rank; // rank of the gray process
int main_coords[2]; // coordinates of the gray process
MPI_Comm_rank (comm_cart, &main_rank);
MPI_Cart_coords (comm_cart, main_rank, 2, main_coords);
// finding the rank of the top-right neighbor
int top_right_rank;
int top_right_coords[2] = {main_coords[0]+1, main_coords[1]+1};
MPI_Cart_rank (comm_cart, top_right_coords, &top_right_rank);
// SEND DATA: MPI_Isend(...);
// RECEIVE DATA: MPI_Irecv(...);
// MPI_Waitall(...);
// REPEAT FOR OTHER DIAGONAL NEIGHBORS
问题
- MPI 标准中是否有集体对角邻域通信?
- 什么是高效且不易出错的实施方式?
- 您有什么建议可以让我的实现更好吗?
【问题讨论】:
-
您可以创建一个图形拓扑,其中对角线连接是边并继续使用
MPI_Neighbor_alltoallw。 -
@Zulan 感谢您的回复。这肯定是我所要求的有效解决方案。
标签: mpi