左上方或右上方邻居的MPI车移位
使用左上方或右上方邻居的MPI车移位,mpi,Mpi,使用MPI\u Cart\u shift我将成功地获得右、左、上和下邻居(例如,在2D中)。但是如果我想知道邻居,比如top\u left和top\u bottom,我将如何使用MPI\u Cart\u shift 据我所知,它只能通过在MPI\u Cart\u shift中提供方向和位移作为参数来工作。但对于角邻域,有两个方向的位移 我同意高绩效分数。我还可以想出两种方法: (1) 找到当前秩的笛卡尔坐标(即每个进程的笛卡尔坐标),然后说,例如,要找到左上角的对角邻居,需要从坐标中减去一个。然
MPI\u Cart\u shift
我将成功地获得右、左、上和下邻居(例如,在2D中)。但是如果我想知道邻居,比如top\u left
和top\u bottom
,我将如何使用MPI\u Cart\u shift
据我所知,它只能通过在
MPI\u Cart\u shift
中提供方向和位移作为参数来工作。但对于角邻域,有两个方向的位移 我同意高绩效分数。我还可以想出两种方法:
(1) 找到当前秩的笛卡尔坐标(即每个进程的笛卡尔坐标),然后说,例如,要找到左上角的对角邻居,需要从坐标中减去一个。然后将这些坐标转换为秩。如果返回了-1
(在MPICH/IntelMPI中)或-2
(在OpenMPI中),则该进程为MPI\u PROC\u NULL
,否则它是一个有效的进程
(2) 在第一维中使用MPI\u Cart\u shift()
查找上下相邻位置(例如UP
和DOWN
)。然后在第二维度移动,找到向上
和向下
的左右邻域。这些左邻域和右邻域是原始过程的对角邻域
希望有帮助 您可能需要
mpi\u cart\u rank
,它支持笛卡尔拓扑中任意坐标和进程列之间的转换。