Enr*_*lis 0 hpc communication mpi
我有一个3D笛卡尔拓扑的nx通过ny由nz过程.有数学计算只涉及处理器的"铅笔".在的情况下,3通过3由3过程矩阵,从排0到26,过程4涉及三个操作:
13和22第一个方向1和7第二个方向3和5第三方向该数学运算需要属于同一铅笔的过程之间的点对点和集体通信.
对于点对点通信的问题,我曾经MPI_CART_SHIFT让每个进程知道相邻进程的排名.(然后我要用MPI_SENDRECV.)
关于集体通信的问题,如何进行此类通信?我认为一个解决方案可能是定义"铅笔"传播者,这个传播者的数量是多少nx*ny + nx*nz + ny*nz(所需的传播者数量相对于进程数量渐近地小,因为每个方向的进程数量增加).
这是唯一的方法吗?是否没有依靠笛卡尔传播者进行这种集体交流的标准子程序?
邻居集体实际上是唯一可以直接利用笛卡尔拓扑的连通性信息的例程.但是,他们会以同样的方式对待所有方向(x,y,z),因此对你的铅笔方案没有帮助.
我认为唯一的方法是按照你的建议,即构建一套完整的铅笔传播者.请注意,通过在笛卡尔通信器上调用MPI_Cart_sub,MPI确实为您提供了一种简单的方法.一旦你构建了铅笔通信器,那么你也可以选择在铅笔上使用邻居集体,而不是点对点,但对于一维通信器,不清楚这对于手工计算邻居有很多好处.目前做.