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