《并行计算的编程模型》一1.6 聚合通信

1.6 聚合通信

除了进程间点对点的消息通信,MPI还提供大量针对一组进程间通信的函数,基于一组进程的通信称之为聚合通信。聚合通信的进程都需要调用相同的聚合通信函数。通过大量的聚合通信算法研究,聚合通信采用具有高性能的聚合通信实现算法[73,270,284],因此该通信方式在并行编程中广泛应用。

聚合通信有以下三种类型:
(1)同步。MPI_Barrier函数用于同步通信域内的所有进程,执行到MPI_Barrier函数的进程必须等待,直到所有进程均执行到MPI_Barrier函数,所有进程才会进入下一步程序操作。
(2)数据迁移。MPI提供大量通用的数据迁移函数。例如,MPI_Bcast函数将根进程中的数据发送到通信域中的其他进程上。MPI_Scatter函数将数据缓冲区中的数据分发到通信域中其他进程上。MPI_Gather函数功能与MPI_Scatter函数相反,该函数将其他进程上的数据收集到根进程上。MPI_Allgather函数功能与MPI_Gather函数类似,区别在于MPI_Allgather函数除了根进程外,通信域中其他进程也收集相同的数据。MPI_Alltoall函数实现组内进程数据全交换,每一个进程可向其他进程发送不同的数据,也可接收其他进程发送的数据。上述聚合通信函数如图1-6所示。除了基本的聚合通信函数外,MPI还提供其他聚合通信函数,从而允许用户向每个进程发送不等数量的数据。
(3)聚合运算。MPI提供归约和扫描操作,实现数据算术运算,例如求解最小值和最大值、求和、逻辑与运算以及其他用户自定义的计算算法。MPI_Reduce函数提供归约操作,结果保存在根进程中。MPI_Allreduce函数功能类似于MPI_Reduce函数,但结果保存在所有进程中。MPI_Scan函数对于每一个进程i,对进程0,…,i上的数据进行归约操作,结果存放到进程i上。MPI_Exscan函数功能类似于MPI_Scan函数,区别在于MPI_Exscan函数不对自身进程上的数据进行归约操作。MPI_Reduce_scatter函数同时包含归约和分发两项功能。

图1-7 一种比图1-2中代码更加高效的数据发送通信方式。MPI_Reduce函数用于对所有进程上的数据进行求和操作,并将结果保存在0号进程上
所有聚合通信函数均提供阻塞和非阻塞两种通信方式。上述聚合通信函数均为阻塞式通信,只有通信完成后,聚合通信函数才返回。非阻塞式通信函数在名称中会加入字母“I”,例如MPI_Ibcast或者MPI_Ireduce。非阻塞聚合通信函数初始化通信后立即返回,无需等待通信操作完成。用户通过调用测试或者等待函数,获取通信操作完成情况或者等待通信操作完成。MPI提供大量计算和通信重叠的聚合通信函数,例如MPI_Ibarrier等函数。
在图1-7中,通过MPI_Bcast函数,实现将0号进程上相同的数据广播到其他进程上。同时,通过MPI_Reduce函数,实现将所有进程上的数据进行求和运算(MPI_SUM为MPI提供预定义的求和操作),并将结果保存在0号进程上。

时间: 2024-08-02 00:57:43

《并行计算的编程模型》一1.6 聚合通信的相关文章

《并行计算的编程模型》一导读

前 言 对于正在编程的程序员,编程模型可被看作一台虚拟机,并可通过编程语言和函数库实现.如果某个编程模型成为计算机科学研究中的热点,需要具有以下特性:高效性(易于描述各种抽象算法).移植性(兼容各种硬件计算平台).高性能(高效均衡地利用硬件平台的计算能力).通用性(广泛地描述各种算法).针对特定的编程模型,同时具有上述四种特性中的一种或两种相对容易,但同时具备这四种特性几乎是不可能的.特定的编程模型无法同时具备四种特性的主要原因在于编程模型的多样性,因此需要根据具体的科学应用,选择不同的编程模型

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

1.7 单边通信 在点对点通信和聚合通信方式中,发送进程和接收进程共同参与通信过程.MPI提供另外一种通信方式,即单边通信方式.在单边通信方式中,单个进程便可指定发送和接收的数据.单边通信主要用于ARMCI/GA(见第5章).UPC(见第4章)和OpenSHMEM(见第3章)等函数库中,单边通信也可称之为远程内存访问(RMA). 单边通信模型主要分为三部分.第一部分是创建MPI_Win窗口对象,用于可被其他进程访问的内存区域.第二部分是进程间数据移动方式,包含从远程进程上读.写.更新等数据移动方

《并行计算的编程模型》一1.1 引言

第1章 Programming Models for Parallel Computing 消息传递接口 William D. Gropp,伊利诺伊大学厄巴纳–香槟分校 Rajeev Thakur,阿贡国家实验室 1.1 引言 在使用分布式内存编程模型的并行程序中,MPI是一个标准和可移植的通信接口.MPI既为并行通信提供丰富的函数接口,也为并行文件I/O访问等提供函数接口.同时,MPI也支持多程序多数据(MPMD)编程模型.MPI是一种基于库的系统,而非编译器或者编程语言.MPI库函数通过C和

浅析云计算分布式并行计算:编程模型

MapReduce 是由Google公司开发的一个针对大规模群组中的海量数据处理的分布式编程模型.它实现了两个功能:Map把一个函数应用于集合中的所有成员,然后返回一个基于这个处理的结果集.而Reduce是把从两个或更多个Map中,通过多个线程,进程或者独立系统并行执行处理的结果集进行分类和归纳.Map() 和 Reduce() 两个函数可能会并行运行,即使不是在同一的系统的同一时刻. 微软于2010年12月21日发布了分布式并行计算基础平台--Dryad测试版,成为谷歌MapReduce分布式

《并行计算的编程模型》一1.9 其他特性

1.9 其他特性 MPI为大规模并行软件开发和应用提供丰富的函数库.MPI提供一种创新的特性,即为每个MPI函数提供其他的执行方式,从而实现在原有MPI函数中执行特殊代码.若采用PMPI接口,MPI函数存在其他的执行方式,即MPI分析接口.例如,PMPI_Bcast函数是MPI_Bcast函数的另一种执行方式.PMPI提供的函数与MPI中的函数参数和功能一致,区别在于用户通过PMPI可定义自己的MPI函数,如图1-13程序示例所示.若采用图1-13中代码编译程序,当调用MPI_Bcast函数时,

《并行计算的编程模型》一3.3 OpenSHMEM存储模型

3.3 OpenSHMEM存储模型 OpenSHMEM是单程序.多数据(single program multiple data,SPMD)编程模型,特点是强调单边通信以及数据移动与同步解藕,是提供高性能.高可扩展性通信和同步程序的库.OpenSHMEM程序由松散同步的进程组成,这些进程也叫作处理单元(Processing Element,PE).所有PE同时开始并执行相同的程序,通常在各自集合问题的子域上执行操作,并周期性地与其他PE通信. OpenSHMEM内存模型是PGAS,类似于其他PG

《并行计算的编程模型》一3.2 设计理念和根据

3.2 设计理念和根据 SHMEM和OpenSHMEM的构思和发展都假设它们和底层硬件系统体系结构有密不可分的关系.由克雷研究公司开发和出售的克雷T3D和T3E计算机系统在其网络架构中包含几个高级的硬件加速特征,是与SHMEM合作设计的,用以最大化可用的带宽及最小化系统的3D Torus网络延迟[85].克雷公司,即原来克雷研究公司的现代同名,在其最新的Gemini网络架构[86,90]中也延续了相同的设计理念.当1996年SGI收购了克雷研究公司,也同时获得了SHMEM的知识产权,SGI设计了

《并行计算的编程模型》一3.5.1 RMA函数语义

3.5.1 RMA函数语义 OpenSHMEM编程模型为提高可扩展性将数据传输和同步解藕,解藕的语义比较容易理解.调用RMA函数(put或get)的PE被称为传输的"主动端",另一个PE(很可能不知道该传输)被称为"被动端".OpenSHMEM仅有的隐式一致性确保put和get操作在主动端发生,被动端如果需要的话也可以通过给程序增加同步来执行一致性.主动端完成准则:当单个RMA调用(put或get)在主动端返回时,程序可以认为主动端的内存状态与该操作的完成一致.被动

《并行计算的编程模型》一3.9 未来方向

3.9 未来方向 在本书写作之时,从2010年开始,在对OpenSHMEM的大量需求驱动下,与OpenSHMEM相关的许多开发正在进行中.如3.2节所述,一些厂商已发布了加速硬件和固件来支持网络原语,在超大规模系统和商用系统中极大简化了OpenSHMEM的实现并提高了性能和鲁棒性.这包括对OpenSHMEM集合和原子内存操作的硬件支持.对小消息性能提高的硬件支持.以及对大规模系统互连自适应路由和阻塞管理的硬件支持.OpenSHMEM论坛和邮件列表建议采用来自Quadrics实现的扩展,包括非常有