MPI 笛卡尔拓扑中沿方向的集体通信

Collective communications along directions in MPI cartesian topology

我有 3D 笛卡尔拓扑 nx ny nz 个进程。 有一些数学计算同时只涉及 "pencils" 个处理器。在 3 by 3 by 3 过程矩阵的情况下,从 026,过程 4 涉及三个操作:

  1. 沿第一个方向 1322
  2. 沿第二个方向17
  3. 沿第三方向35

数学运算需要属于同一个铅笔的进程之间的点对点通信和集体通信。

为了点对点通信,我使用MPI_CART_SHIFT让每个进程知道相邻进程的行列。 (那我就用MPI_SENDRECV。)

为了什么集体沟通,如何进行这样的沟通? 我认为一个解决方案可能是定义 "pencil" 个通信器,其数量为 nx*ny + nx*nz + ny*nz(所需的通信器数量相对于进程数量渐近较小,因为每个方向的进程数量成长)。

这是唯一的方法吗?难道没有依赖笛卡尔通信子的标准子程序来进行这种集体通信吗?

邻域集体实际上是唯一可以直接利用笛卡尔拓扑连通性信息的例程。但是,他们会以相同的方式处理所有方向 (x, y, z),因此对您的铅笔方案没有帮助。

我认为唯一的方法就是按照你的建议,即构建一套完整的铅笔通信器。请注意,MPI 确实通过在笛卡尔通信器上调用 MPI_Cart_sub 为您提供了一种简单的方法来执行此操作。一旦你构建了铅笔通信器,那么你也可以选择使用铅笔上的邻域集体而不是点对点,但是对于一维通信器,尚不清楚这比手动计算邻居有很多优势,因为你目前做。