首页 > 编程语言 >并行程序设计基础——组通信(3)

并行程序设计基础——组通信(3)

时间:2024-08-31 09:52:15浏览次数:12  
标签:sendbuf 并行程序 句柄 通信 MPI 缓冲区 归约 进程 设计

目录

一、组归约

二、归约并散发

三、扫描

四、π值计算

五、不同类型归约操作的对比

六、不正确的组通信方式

七、MINLOC和MAXLOC

八、用户自定义归约操作

九、小结


        前两节我们介绍了组通信中常用的一对多、多对一以及多对多接口调用,本节继续对其余组通信操作进行介绍。同时,利用其中的多个组通信接口实现了π值的并行计算。

一、组归约

        组归约MPI_ALLREDUCE就相当于组中每一个进程都作为ROOT分别进行了一次归约操作。即归约的结果不只是某一个进程拥有,而是所有的进程都拥有。它在某种程度上和组收集与收集的关系很相似。

MPI_ALLREDUCE(sendbuf, recvbuf, count, datatype, op, comm)
IN    sendbuf        发送消息缓冲区的起始地址(可选数据类型)
OUT   recvbuf        接收消息缓冲区的起始地址(可选数据类型)
IN    count          发送消息缓冲区中的数据个数(整型)
IN    datatype       发送消息缓冲区中的数据类型(句柄)
IN    op             操作(句柄)
IN    comm           通信域(句柄)

//c语言的说明
int MPI_Allreduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)
//Fortran语言的说明
MPI_ALLREDUCE(SENDUBUF, RECVBUF, COUNT, DATATYPE, OP, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER  COUNT, DATATYPE, OP, COMM, IERROR

二、归约并散发

        MPI_REDUCE_SCATTER操作可以认为是MPI对每个归约操作的变形,它将归约结果分散到组内的所有进程中去,而不是仅仅归约到ROOT进程。

MPI_REDUCE_SCATTER(sendbuf, recvbuf, recvcounts, datatype, op, comm)
IN    sendbuf        发送消息缓冲区的起始地址(可选数据类型)
OUT   recvbuf        接收消息缓冲区的起始地址(可选数据类型)
IN    recvcounts     接收数据个数(整型数组)
IN    datatype       发送消息缓冲区中的数据类型(句柄)
IN    op             操作(句柄)
IN    comm           通信域(句柄)

//c语言的说明
int MPI_Reduce_scatter(void *sendbuf, void *recvbuf, int *recvcounts, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)
//Fortran语言的说明
MPI_REDUCE_SCATTER(SENDUBUF, RECVBUF, RECVCOUNTS, DATATYPE, OP, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER  RECVCOUNTS(*), DATATYPE, OP, COMM, IERROR

        MPI_REDUCE_SCATTER对由sendbuf、count和datatype定义的发送缓冲区数组的元素逐个进行归约操作,发送缓冲区数组的长度count=∑irecvcount[i]。然后,将结果数组的前recvcounts[0]个元素送给进程0的接收缓冲区,再将接下来的recvcounts[1]个元素送给进程1的接收缓冲区,以此类推,最后将最后的recvcounts[N-1]个元素送给进程N-1的接收缓冲区。

三、扫描

        可以将扫描看作是一种特殊的归约,即每一个进程都对排在它前面的进程进行归约操作。MPI_SCAN调用的结果是,对于每一个进程i,它对进程0,……,i的发送缓冲区的数据进行指定的归约操作,结果存入进程i的接收缓冲区。

MPI_SCAN(sendbuf, recvbuf, count, datatype, op, comm)
IN    sendbuf        发送消息缓冲区的起始地址(可选数据类型)
OUT   recvbuf        接收消息缓冲区的起始地址(可选数据类型)
IN    count          输入缓冲区中元素的个数(整型)
IN    datatype       输入缓冲区中元素的类型(句柄)
IN    op             操作(句柄)
IN    comm           通信域(句柄)

//c语言的说明
int MPI_Scan(void *sendbuf, void *recvbuf, int count, MPI_Datatype, MPI_Op op, MPI_Comm comm)
//Fortran语言的说明
MPI_SCAN(SENDBUF, RECVBUF, COUNT, DATATYPE, OP, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER  COUNT, DATATYPE, OP, COMM, IERROR

        也可以换一种角度,将扫描操作看作是每一个进程i发送缓冲区中的数据与它前面的进程i-1接收缓冲区中的数据进行指定的归约操作后,将结果存入进程i的接收缓冲区;而进程i接收缓冲区中的数据用来和进程i+1发送缓冲区中的数据进行归约。进程0接收缓冲区中的数据就是发送缓冲区的数据。

四、π值计算

        π值计算具有很好的并行性,这里我们利用组通信的广播、规约操作对π值并行计算进行实现。(采用C++编写程序)

        有积分公式如下:

\int_{0}^{1}\frac{1}{1+x^{2}}dx = arctan(x)|_{0}^{1} = arctan(1) - arctan(0) = arctan(1) = \frac{\pi}{4}

        令函数

标签:sendbuf,并行程序,句柄,通信,MPI,缓冲区,归约,进程,设计
From: https://blog.csdn.net/L_peanut/article/details/141563066

相关文章

  • Java计算机毕业设计校园二手交易管理系统(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着教育事业的蓬勃发展,高校校园内学生数量激增,物资流动加快,尤其是书籍、电子产品、生活用品等二手物品的闲置与浪费现象日益显著。传统的校园二手交......
  • Java计算机毕业设计校园商品订购平台(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着教育信息化与数字化校园建设的深入推进,学生群体对于便捷、高效、个性化的生活服务需求日益增长。传统校园内的商品购买方式往往受限于时间、地点......
  • java+vue计算机毕设校园失物招领系统的设计与实现【源码+开题+论文】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景:在校园生活中,学生及教职工时常会遇到物品丢失的情况,而传统的失物招领方式往往效率低下,无法满足快速找回失物的需求。因此,设计并实现一个校园失物招领......
  • java+vue计算机毕设校园爱心平台的设计与实现【源码+开题+论文】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着社会的不断发展和进步,公益事业在社会中的作用日益凸显。在校园环境中,学生们对于参与公益活动的热情也越来越高。然而,传统的公益活动组织方式往往......
  • 进程间通信----管道篇
    目录一丶  无名管道1. 特点2. 读写特性3. 函数接口二丶有名管道1.特点:2.函数接口3.读写特性一丶  无名管道1. 特点        1. 只能用于具有亲缘关系的进程之间的通信        2. 半双工的通信模式,具有固定的读端和写端   ......
  • java计算机毕业设计学生日常行为评分管理系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在当今教育信息化的浪潮中,如何科学、高效地管理学生日常行为,成为提升教育质量、促进学生全面发展的重要议题。传统的学生行为管理方式多依赖于教师的......
  • Java计算机毕业设计电车充电桩管理系统(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着新能源汽车产业的迅猛发展,电动汽车作为绿色出行的代表,其普及率日益提升。然而,电动汽车的广泛应用离不开完善的充电基础设施支持。当前,电车充电桩......
  • java计算机毕业设计政府公用车辆管理系统的设计与实现(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着政府机构的不断扩张与职能的日益复杂化,公务用车作为政府日常运作不可或缺的一部分,其管理效率与成本控制成为亟待解决的问题。传统的手工记录与调......
  • 基于nodejs+vue潮流数码社区系统[程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着科技的飞速发展,数码产品已成为现代人日常生活中不可或缺的一部分,从智能手机、笔记本电脑到各类智能穿戴设备与智能家居产品,其更新换代速度之快,使得消费......
  • 基于nodejs+vue车辆充电桩[程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着全球能源结构的转型和电动汽车产业的迅猛发展,车辆充电桩作为电动汽车普及的关键基础设施,其建设与管理的重要性日益凸显。近年来,电动汽车市场快速增长,但......