mpi4py 中的扫描操作

本文介绍了mpi4py的扫描操作,包括scan和Exscan方法,它们用于逐级执行规约操作。扫描操作在并行计算中实现逐级累加或其它计算,适用于MPI.Intracomm类。文中提供了示例代码展示如何使用这些方法。
摘要由CSDN通过智能技术生成

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

上一篇中我们介绍了 mpi4py 中的全发散操作方法,下面我们将介绍扫描操作。

注意:只有组内通信子支持扫描操作。

方法接口

mpi4py 中的扫描操作的方法(MPI.Intracomm 类的方法)接口为:

scan(self, sendobj, op=SUM)
exscan(self, sendobj, op=SUM)

Scan(self, sendbuf, recvbuf, Op op=SUM)
Exscan(self, sendbuf, recvbuf, Op op=SUM)

这些方法的参数与规约操作相应的参数一致,参数 op 指明用什么算符进行规约,其默认值是 MPI.SUM,即求和算符,其它内置的规约算符可见规约操作

scan/Scan (也称作 inclusive scan),实际上是逐级执行规约操作,即进程 i 对进程 0, 1, … , i 执行规约。

exscan/Exscan (也称作 exclusive scan),定义了一种“前缀扫描”操作,具体为:对进程 0,其接收缓冲区未定义;对进程 1,其接收缓冲区数据为进程 0 的发送缓冲区数据;对进程 i > 1,其接收缓冲区数据为进程 0, 1, … , i - 1 发送缓冲区数据的规约。

对 Scan/Exscan,可将其 sendbuf 参数设置成 MPI.IN_PLACE,此时从 recvbuf 中提取数据进行逐级规约,然后将结果替换 recvbuf 的数据缓冲区。

例程

下面给出扫描操作的使用例程。

# scan.py

"""
Demonstrates the usage of scan, exscan, Scan, Exscan.

Run this with 4 processes like:
$ mpiexec -n 4 python scan.py
"""

import numpy as np
from mpi4py import MPI


comm = MPI.COMM_WORLD
rank = comm.Get_rank()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值