mpi4py 中的进程拓扑方法

本文从本人简书博客同步过来

上一篇中我们简要介绍了进程拓扑的基本概念,下面我们将介绍与进程拓扑相关的一些方法。

创建方法

注意:只能在组内通信子(Intracomm)或 Intracomm 类子类通信子上创建拓扑通信子。创建拓扑通信子的相关方法(MPI.Intracomm 类的方法)接口如下:

Create_cart(self, dims, periods=None, bool reorder=False)

创建并返回一个新的通信子,在这个新通信子上附加与笛卡尔拓扑管理有关的数据结构及相应的操作信息。dims 是长度为维数 ndims 的整型数组,指出各维的进程数,periods 可取值 None,True,False 或长度为 ndims 的布尔数组,指出各维是否周期性循环,默认值 None 表示各维都不循环,True/False 表示各维都循环/都不循环。布尔型的 reorder 指出进程在新创建的通信子组内是否进行重排序,默认值为 False,此时进程在新创建的通信子组内的顺序与在原通信子组内的顺序相同。在创建过程中,允许新通信子中包含的进程数少于原通信子中的进程数,此时多余的进程将返回 MPI.COMM_NULL,但不允许多于原通信子中的进程数。

Create_graph(self, index, edges, bool reorder=False)

创建并返回一个新的通信子,在这个新通信子上附加与图结构的拓扑管理有关的数据结构及相应的操作信息。通过 indexedges 两个整数序列参数来描述整个图的结构,假设生成的图拓扑的节点个数为 nnodes,各节点按照从 0 到 nnodes - 1 编号,其邻居节点都顺序、连续地放在 edges 序列中,通过 index 序列分别指定各编号节点的邻居节点列表在 edges 序列中的起始位置,index 的第 i 个元素保存图中前 i 个节点的邻居总数,而各节点的邻居顺序地排成一个一维序列存放在 edges 中。因此,index[0] 为节点 0 的邻居个数,index[i] - index[i - 1] 为节点 i > 0 的邻居个数,而节点 0 的邻居保存在 edges[0:(index[0] - 1)] 范围内,节点 i > 0 的邻居保存在 edges[index[i-1]:(index[i] - 1)] 范围内。布尔型的 reorder 指出进程在新创建的通信子组内是否进行重排序,默认值为 False,此时进程在新创建的通信子组内的顺序与在原通信子组内的顺序相同。在创建过程中,允许新通信子中包含的进程数少于原通信子中的进程数,此时多余的进程将返回 MPI.COMM_NULL,但不允许多于原通信子中的进程数。

下面举个简单的例子来说明如何设置以上参数,比如创建一个含有 4 个节点的图拓扑,各个节点的邻居节点如下表所示:

Node Neighbors
0 1, 3
1 0
2 3
3 0, 2

则相应的参数可以如下设置:

<
Argument Input
nnodes 4
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值