《并行计算的编程模型》一1.7 单边通信

简介: 本节书摘来华章计算机《并行计算的编程模型》一书中的第1章 ,第1.7节, [(美)帕万·巴拉吉(Pavan Balaji)编著;张云泉等译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.7 单边通信

在点对点通信和聚合通信方式中,发送进程和接收进程共同参与通信过程。MPI提供另外一种通信方式,即单边通信方式。在单边通信方式中,单个进程便可指定发送和接收的数据。单边通信主要用于ARMCI/GA(见第5章)、UPC(见第4章)和OpenSHMEM(见第3章)等函数库中,单边通信也可称之为远程内存访问(RMA)。
单边通信模型主要分为三部分。第一部分是创建MPI_Win窗口对象,用于可被其他进程访问的内存区域。第二部分是进程间数据移动方式,包含从远程进程上读、写、更新等数据移动方式。第三部分是实现对单边通信完成情况进行等待或者检查等操作。单边通信模型中每一部分均有唯一的MPI格式。
MPI提供四种创建内存访问窗口方法,从而针对不同的应用需求。MPI_Win_create、MPI_Win_allocate和MPI_Win_allocate_shared三种函数为聚合方式,用于指定可被其他进程读取和写入的内存区域。MPI_Win_create_dynamic函数允许单独进程对其内存空间进行申请和释放。
单边通信函数类型比较简单,分为读、写、更新三种。最简单的单边通信函数是通过MPI_Put函数向远端进程写入数据(MPI-2 RMA中唯一定义的原始单边通信函数),通过MPI_Get函数从远端进程读取数据,以及通过MPI_Accumulate函数利用MPI预定义的归约操作对远端进程中的数据进行更新。MPI-3对这三种单边通信函数进行了完善,增加了非阻塞式单边通信方式,从而为用户提供更加灵活的MPI实现方式。
由于MPI提供非阻塞式单边通信方式,因此需要提供额外的函数检查或者等待非阻塞式通信操作。MPI提供三种方式完成非阻塞式单边通信。最简单的方式为调用MPI_Win_fence函数,该函数属于组调用方式,在一对MPI_Win_fence调用函数间完成进程间数据通信操作。当MPI_Win_fence函数完成调用后,所有的单边通信操作均已完成,例如数据缓冲区中的数据已被更改,本地进程中内存数据已完成定义的数据操作,可被本地进程自由访问或更改。读者可以通过查询MPI手册来获取更多关于单边通信方式的介绍。在一定程度上,MPI_Win_fence脱离了远程内存访问(RMA)操作要求,遵循MPI RMA数据访问规范。
图1-8所示的程序代码是采用单边通信方式实现图1-7中MPI_Reduce操作。注意图1-8所示的程序并非对图1-7中程序的完整替换,只是用来介绍单边通信方式。通过使用单边通信方式,可异步更新进程中数据,甚至一个进程可以多次更新数据,但是该实现方式有潜在的并行规模可扩展性问题。
MPI提供的第二种单边通信完成方式相对于MPI_Win_fence方式更加通用,称之为可扩展规模的同步方式,例如MPI_Win_post、MPI_Win_start、MPI_Win_complete和MPI_Win_wait函数。首先,通过这些函数指定MPI数据窗口、单边通信的源进程和目标进程。因为这些函数不需要在通信域的所有进程上使用阻塞式同步方式,因此并行规模是可扩展的。无论是MPI_Win_fence同步方式,还是MPI_Win_post等可扩展规模的同步方式,均需要在源进程和目标进程上采用同步操作,因为这两种方法均为主动目标同步方式。

screenshot

MPI提供的第三种单边通信完成方式只需通过源进程进行函数调用即可,称之为被动目标同步,如图1-9程序示例所示。其中,0号进程在while循环中不执行任何MPI函数。通过调用MPI_Win_lock和MPI_Win_unlock函数确保完成源进程和目标进程上数据的MPI RMA操作。MPI_Win_lockall和MPI_Win_unlockall函数允许一个进程在内存窗口中对其他所有进程上的数据执行RMA操作。同时,MPI_Win_flush函数也可用于被动目标同步,实现对目标进程的RMA操作。MPI也提供返回MPI_Request对象的读、写、更新三种类型的操作函数。用户可使用MPI_Test或MPI_Wait函数检查本地操作完成情况,无需等待下一个RMA同步调用操作。

screenshot

以下细节需要注意,0号进程在访问MPI窗口中本地数据前也需要调用MPI_Win_lock函数。通过调用MPI_Win_lock函数,确保所有在目标进程上挂起的内存操作均被执行。这是共享和远程内存访问编程模型中需要格外注意的细节,且经常被编程者误解的地方(详见[45]使用共享内存模型编程的常见错误示例)。MPI定义的内存模型可确保用户得到连续和正确的数据,即使在无法实现高速缓存一致性的计算机系统上也可正常工作。在MPI-2定义出现的时期,世界上最快的计算机系统支持高速缓存一致性,但未来的高性能计算系统可能不完全支持高速缓存一致性。MPI既提供满足单边通信的内存准确性最低要求的基本函数外,还提供要求更加严格的函数,从而保证MPI程序能够在大多数计算机系统上运行。MPI-3在现有内存访问模型的基础上,增加了“统一内存模型”,现在称之为“分布式内存模型”。用户可通过MPI_Win_get_attr函数得知计算机系统是否支持“统一内存模型”,若系统支持该模型,则通过使用该模型将极大简化内存一致性方面操作。
MPI-3在MPI-2的基础上,极大地丰富了单边通信的操作函数,解决MPI-2函数中存在的问题,使MPI RMA的应用更加广泛,并提高单边通信的可移植性和性能。例如,MPI-3提供支持在许多并行算法中常用的原子读、写和修改操作,例如MPI_Fetch_and_op函数实现读取和增加功能,MPI_Compare_and_swap实现比较和交换功能。同时,MPI-3能够创建共享内存窗口,在RMA操作基础上增加了内存直接存储访问功能。如果用户需要使用RMA 编程,建议了解MPI-3中增加的新特性。

相关文章
路径损耗计算模型 | 带你读《大规模天线波束赋形技术原理与设计 》之二十五
本小节介绍 3D 信道的路损模型,是以 ITU 信道为基础拓展得到的。
11499 0
路径损耗计算模型  | 带你读《大规模天线波束赋形技术原理与设计 》之二十五
信道建模流程 | 带你读《大规模天线波束赋形技术原理与设计 》之二十八
本节将详细介绍衰落信道的整体建模流程,内容上与 3D 信道模 型 3GPP TR36.873 7.3 节和 3GPP TR38.901 的 7.5 节对应。两者在内容上大体相同,前者的目标为6GHz以下的信道建模(记为模型1),后者为0.5~100GHz 的信道建模(记为模型 2)。对于 6GHz 以下的信道建模,两者均可以使用, 在下文的描述中,两者不同的地方均会列出。
信道建模流程  | 带你读《大规模天线波束赋形技术原理与设计 》之二十八
|
5G 调度
关键技术一:LTE 同构小区间干扰协调 | 带你读《5G UDN(超密集网络)技术详解》之十
本章节进一步详细解释 LTE 小小区相关的关键技术之一:LTE 同构小区间干扰协调,并且关联 着说明它们对后续 5G NR 小小区的基线性影响和适用情况。
关键技术一:LTE 同构小区间干扰协调 | 带你读《5G UDN(超密集网络)技术详解》之十
|
机器学习/深度学习
小尺度信道建模 | 带你读《大规模天线波束赋形技术原理与设计 》之二十六
小尺度衰落是指无线电信号在短时间或短距离(若干波长)传播后其幅度、 相位或多径时延的快速变化。这种衰落是由于同一传输信号沿不同的路径传播, 由不同时刻(或相位)到达接收机的信号互相叠加所引起的,这些不同路径到 达的信号称为多径信号,接收机的信号强度取决于多径信号的强度、相对到达 时延以及传输信号的带宽。
 小尺度信道建模  | 带你读《大规模天线波束赋形技术原理与设计 》之二十六
|
11月前
|
机器学习/深度学习 人工智能 并行计算
深度学习设计的衍射处理器并行计算数百个变换
深度学习设计的衍射处理器并行计算数百个变换
深度学习设计的衍射处理器并行计算数百个变换
|
机器学习/深度学习 缓存 并行计算
【ASPLOS 2023】图神经网络统一图算子抽象uGrapher,大幅提高计算性能
近日,阿里云机器学习PAI平台关于图神经网络统一高性能IR的论文《uGrapher》被系统领域顶会ASPLOS 2023接收。
【ASPLOS 2023】图神经网络统一图算子抽象uGrapher,大幅提高计算性能
|
算法 数据挖掘 BI
ZSD/ZSA 随机分布参数的定义 | 带你读《大规模天线波束赋形技术原理与设计 》之二十七
小尺度信道建模主要考虑时间色散参数、频率色散 参数以及空间色散参数的建模。本节主要讨论对大规模天线传输性能有直接影 响的角度色散参数的建模。
ZSD/ZSA 随机分布参数的定义  | 带你读《大规模天线波束赋形技术原理与设计 》之二十七
坐标系模型 | 带你读《大规模天线波束赋形技术原理与设计 》之二十二
本节介绍 3D 信道模型中局部坐标系和全局坐标系的定义、坐标系间的转换 关系以及双极化天线场分量在全局坐标系中的建模方法。
坐标系模型   | 带你读《大规模天线波束赋形技术原理与设计 》之二十二
场景建模 | 带你读《大规模天线波束赋形技术原理与设计 》之二十一
本节讲述了3D 信道场景 、 UMa 场景和 UMi 场景 和 Indoor Office 场景 。
 场景建模   | 带你读《大规模天线波束赋形技术原理与设计 》之二十一
|
算法 5G 调度
开环空间复用 | 带你读《大规模天线波束赋形技术原理与设计 》之四
所谓开环空间复用, 是指预编码的计算不取决于信道状态信息的反馈。
开环空间复用  | 带你读《大规模天线波束赋形技术原理与设计 》之四