Return MPI_Dims_create() 的值

Return value of MPI_Dims_create()

假设我有 64 个进程并且我想在 3-D 中创建一个 MPI 笛卡尔拓扑,MPI_Dims_create() 返回的默认拓扑是 4x4x4。为什么是 4x4x4 而不是 8x4x24x8x216x2x2 或任何其他可能的组合?

MPI_Dims_create专门作为便利函数创建平衡拓扑。

一个平衡的拓扑结构,即理想的立方体具有某些最优属性。假设您正在使用您的流程在 160x160x160 网格上进行模拟。

  • 使用 4x4x4 每个处理器得到 40x40x40 工作并且在简单的边界交换的情况下必须发送 40x40 到 6 个邻居中的每一个(共9600)

  • 8x4x2每个处理器得到20x40x80,边界是2x20x40 + 2x20x80 + 2x40x80 = 11200

  • 16x2x2每个处理器得到10x80x80,边界是4x10x80 + 2x80x80 = 16000

如您所见,需要交换的边框尺寸对于立方体来说是最小的。通常,平衡拓扑是一个很好的默认设置。

您还可以使用 MPI_Dims_create 设置约束或使用 MPI_Cart_create 创建灵活的笛卡尔拓扑。