MPI_Cart_shift top_left 或 top_right 邻居
MPI_Cart_shift for top_left or top_right neighbours
使用 MPI_Cart_shift
我将成功获得右、左、上和下邻居(例如,在 2D 中)。但是如果我想知道邻居,比如 top_left
和 top_bottom
,我将如何使用 MPI_Cart_shift
?
据我所知,它只能通过提供方向和位移作为 MPI_Cart_shift
中的参数来工作。但对于角落邻居,你有两个方向的位移。
我同意高性能标志。我也可以想到两种方法:
(1) 找到当前等级(即每个进程)的笛卡尔坐标,然后说例如要找到左上对角线邻居,您需要从坐标中分别减去一个。然后将这些坐标转换为一个等级。如果返回 -1
(在 MPICH/IntelMPI 中)或返回 -2
(在 OpenMPI 中),则进程为 MPI_PROC_NULL
,否则为有效进程。
(2) 在第一维中使用MPI_Cart_shift()
来查找上下邻居(比如UP
和DOWN
)。然后二维平移,找到UP
和DOWN
的左右邻居。 这些左右邻居是原始进程的对角线邻居。
希望对您有所帮助。
使用 MPI_Cart_shift
我将成功获得右、左、上和下邻居(例如,在 2D 中)。但是如果我想知道邻居,比如 top_left
和 top_bottom
,我将如何使用 MPI_Cart_shift
?
据我所知,它只能通过提供方向和位移作为 MPI_Cart_shift
中的参数来工作。但对于角落邻居,你有两个方向的位移。
我同意高性能标志。我也可以想到两种方法:
(1) 找到当前等级(即每个进程)的笛卡尔坐标,然后说例如要找到左上对角线邻居,您需要从坐标中分别减去一个。然后将这些坐标转换为一个等级。如果返回 -1
(在 MPICH/IntelMPI 中)或返回 -2
(在 OpenMPI 中),则进程为 MPI_PROC_NULL
,否则为有效进程。
(2) 在第一维中使用MPI_Cart_shift()
来查找上下邻居(比如UP
和DOWN
)。然后二维平移,找到UP
和DOWN
的左右邻居。 这些左右邻居是原始进程的对角线邻居。
希望对您有所帮助。