parallel-processing - MPI_Dims_create() 的返回值
问题描述
假设我有64
进程并且我想在 中创建 MPI 笛卡尔拓扑3-D
,则返回的默认拓扑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
创建灵活的笛卡尔拓扑。
推荐阅读
- javascript - JS创建包含随机唯一数字的对象数组
- spring-boot - Spring Cloud Zuul 反向代理路由不适用于指定的版本和上下文路径休息应用程序
- r - 用另一列中的先前信息更改列中的数据
- vega-lite - Vega lite 中 y 轴的最小值
- java - java.lang.StackOverflowError ManyToMany: MapStruct - Spring Boot - Hibernate
- pandas - 时间列间隔过滤器
- twitter-bootstrap - 如何将自定义模板中的数据发布到谷歌表单
- cassandra - Janusgraph 后端表的布局
- r - 通过添加 0 扩展数据帧
- python - 在 Python 中搜索二维列表中的元素