左上方或右上方邻居的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
,它支持笛卡尔拓扑中任意坐标和进程列之间的转换。