MPI_Cart_shift top_left 或 top_right 邻居

MPI_Cart_shift for top_left or top_right neighbours

使用 MPI_Cart_shift 我将成功获得右、左、上和下邻居(例如,在 2D 中)。但是如果我想知道邻居,比如 top_lefttop_bottom,我将如何使用 MPI_Cart_shift

据我所知,它只能通过提供方向和位移作为 MPI_Cart_shift 中的参数来工作。但对于角落邻居,你有两个方向的位移。

我同意高性能标志。我也可以想到两种方法:

(1) 找到当前等级(即每个进程)的笛卡尔坐标,然后说例如要找到左上对角线邻居,您需要从坐标中分别减去一个。然后将这些坐标转换为一个等级。如果返回 -1(在 MPICH/IntelMPI 中)或返回 -2(在 OpenMPI 中),则进程为 MPI_PROC_NULL,否则为有效进程。

(2) 在第一维中使用MPI_Cart_shift() 来查找上下邻居(比如UPDOWN)。然后二维平移,找到UPDOWN的左右邻居。 这些左右邻居是原始进程的对角线邻居。

希望对您有所帮助。