Return MPI_Dims_create() 的值
Return value of MPI_Dims_create()
假设我有 64
个进程并且我想在 3-D
中创建一个 MPI 笛卡尔拓扑,MPI_Dims_create()
返回的默认拓扑是 4x4x4
。为什么是 4x4x4
而不是 8x4x2
或 4x8x2
或 16x2x2
或任何其他可能的组合?
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
创建灵活的笛卡尔拓扑。
假设我有 64
个进程并且我想在 3-D
中创建一个 MPI 笛卡尔拓扑,MPI_Dims_create()
返回的默认拓扑是 4x4x4
。为什么是 4x4x4
而不是 8x4x2
或 4x8x2
或 16x2x2
或任何其他可能的组合?
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
创建灵活的笛卡尔拓扑。