




免费预览已结束,剩余47页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2020年4月 1 55 并行程序设计简介 曙光信息产业 北京 有限公司 2020年4月 2 55 讲座内容提示 基本概念基本的MPI点到点通信 Pointtopoint MPI中API的主要内容 为MPI最基本 最重要的内容MPI程序的编译和运行实例 2020年4月 3 55 参考文献 MPI thecompletereference MarcSnir MITPress 1998 ISBN0262692155 0262692163 UsingMPI portableparallelprogrammingwiththemessage passinginterface WilliamGropp MITPress 1999 2ndedition ISBN0262571323 UsingMPI 2 advancedfeaturesofthemessage passinginterface WilliamGropp MITPress 1999 ISBN0262571331 高性能计算并行编程技术 MPI并行程序设计 都志辉 清华大学出版社 2001年8月 2020年4月 4 55 多线程库标准 Win32API POSIXthreads 编译制导标准 OpenMP 可移植共享存储并行编程标准 消息传递库标准 MPI PVM 并行编程标准 本讨论的重点 2020年4月 5 55 消息传递并行程序设计 消息传递并行程序设计指用户必须通过显式地发送和接收消息来实现处理机间的数据交换 在这种并行编程中 每个并行进程均有自己独立的地址空间 相互之间访问不能直接进行 必须通过显式的消息传递来实现 这种编程方式是大规模并行处理机 MPP 和机群 Cluster 采用的主要编程方式 并行计算粒度大 特别适合于大规模可扩展并行算法由于消息传递程序设计要求用户很好地分解问题 组织不同进程间的数据交换 并行计算粒度大 特别适合于大规模可扩展并行算法 消息传递是当前并行计算领域的一个非常重要的并行程序设计方式 2020年4月 6 55 什么是MPI MassagePassingInterface 是消息传递函数库的标准规范 由MPI论坛开发 支持Fortran和C一种新的库描述 不是一种语言 共有上百个函数调用接口 在Fortran和C语言中可以直接对这些函数进行调用MPI是一种标准或规范的代表 而不是特指某一个对它的具体实现MPI是一种消息传递编程模型 并成为这种编程模型的代表和事实上的标准 2020年4月 7 55 MPI的发展过程 发展的两个阶段MPI1 1 1995MPICH 是MPI最流行的非专利实现 由Argonne国家实验室和密西西比州立大学联合开发 具有更好的可移植性 MPI1 2 2 0 动态进程 并行I O 远程存储访问 支持F90和C 1997 2020年4月 8 55 为什么要用MPI 高可移植性MPI已在IBMPC机上 MSWindows上 所有主要的Unix工作站上和所有主流的并行机上得到实现 使用MPI作消息传递的C或Fortran并行程序可不加改变地运行在IBMPC MSWindows Unix工作站 以及各种并行机上 2020年4月 9 55 从简单入手 Init和Finalize 下面我们首先分别以C语言和Fortran语言的形式给出一个最简单的MPI并行程序Hello 下页 该程序在终端打印出HelloWorld 字样 HelloWorld 一声来自新生儿的问候 2020年4月 10 55 Helloworld C include include mpi h main intargc char argv MPI Init 2020年4月 11 55 Helloworld Fortran programmaininclude mpif h integerierrcallMPI INIT ierr print Hello world callMPI FINALIZE ierr end 2020年4月 12 55 C和Fortran中MPI函数约定 C必须包含mpi h MPI函数返回出错代码或MPI SUCCESS成功标志 MPI 前缀 且只有MPI以及MPI 标志后的第一个字母大写 其余小写 Fortran必须包含mpif h 通过子函数形式调用MPI 函数最后一个参数为返回值 MPI 前缀 且函数名全部为大写 MPI函数的参数被标志为以下三种类型 IN 参数在例程的调用中不会被修正 OUT 参数在例程的调用中可能会被修正 INOUT 参数有初始值 且在例程的调用中可能会被修正 2020年4月 13 55 MPI初始化 MPI INIT intMPI Init int argc char argv MPI INIT IERROR MPI INIT是MPI程序的第一个调用 它完成MPI程序的所有初始化工作 所有的MPI程序的第一条可执行语句都是这条语句 启动MPI环境 标志并行代码的开始 并行代码之前 第一个mpi函数 除MPI Initialized 外 要求main必须带参数运行 否则出错 2020年4月 14 55 MPI结束 MPI FINALIZE intMPI Finalize void MPI FINALIZE IERROR MPI FINALIZE是MPI程序的最后一个调用 它结束MPI程序的运行 它是MPI程序的最后一条可执行语句 否则程序的运行结果是不可预知的 标志并行代码的结束 结束除主进程外其它进程 之后串行代码仍可在主进程 rank 0 上运行 如果必须 2020年4月 15 55 MPI程序的的编译与运行 mpif77hello f或mpicchello c默认生成a out的可执行代码 mpif77 ohellohello f或mpicc ohellohello c生成hello的可执行代码 mpirun np4a outmpirun np4hello4指定np的实参 表示进程数 由用户指定 a out hello要运行的MPI并行程序 小写o np Thenumberofprocess 2020年4月 16 55 运行我们的MPI程序 dair node01 mpicc ohellohello c dair node01 hello 0 Abortingprogram Couldnotcreatep4procgroup Possiblemissingfileorprogramstartedwithoutmpirun dair node01 mpirun np4hello HelloWorld HelloWorld HelloWorld HelloWorld dair node01 计算机打印字符 我们输入的命令 2020年4月 17 55 Hello是如何被执行的 SPMD SingleProgramMultipleData SIMD include mpi h includemain intargc char argv MPI Init include mpi h includemain intargc char argv MPI Init include mpi h includemain intargc char argv MPI Init include mpi h includemain intargc char argv MPI Init HelloWorld HelloWorld HelloWorld HelloWorld include mpi h includemain intargc char argv MPI Init rsh ssh 2020年4月 18 55 开始写MPI并行程序 Comm size和Comm rank 在写MPI程序时 我们常需要知道以下两个问题的答案 任务由多少个进程来进行并行计算 我是哪一个进程 2020年4月 19 55 MPI提供了下列函数来回答这些问题 用MPI Comm size获得进程个数pintMPI Comm size MPI Commcomm int size 用MPI Comm rank获得进程的一个叫rank的值 该rank值为0到p 1间的整数 相当于进程的IDintMPI Comm rank MPI Commcomm int rank 2020年4月 20 55 更新的HelloWorld c include include mpi h main intargc char argv intmyid numprocs MPI Init 2020年4月 21 55 更新的HelloWorld F77 programmaininclude mpif h integerierr myid numprocscallMPI INIT ierr callMPI COMM RANK MPI COMM WORLD myid ierr callMPI COMM SIZE MPI COMM WORLD numprocs ierr print Iam myid of numprocscallMPI FINALIZE ierr end 2020年4月 22 55 运行结果 dair node01 mpicc ohello1hello1 c dair node01 mpirun np4hello1Iam0of4Iam1of4Iam2of4Iam3of4 dair node01 计算机打印字符 我们输入的命令 2020年4月 23 55 写MPI并行通信程序 Send和Recv Greeting执行过程 2020年4月 24 55 有消息传递greetings c include include mpi h main intargc char argv intnumprocs myid source MPI Statusstatus charmessage 100 MPI Init 2020年4月 25 55 有消息传递greetings c if myid 0 strcpy message HelloWorld MPI Send message strlen message 1 MPI CHAR 0 99 MPI COMM WORLD else myid 0 for source 1 source numprocs source MPI Recv message 100 MPI CHAR source 99 MPI COMM WORLD endmain 2020年4月 26 55 解剖greetings程序 头文件 mpi h mpif h intMPI Init int argc char argv 启动MPI环境 标志并行代码的开始 并行代码之前 第一个mpi函数 除MPI Initialize 外 要求main必须带参数运行 否则出错 通信域 通信空间 MPI COMM WORLD 一个通信空间是一个进程组和一个上下文的组合 上下文可看作为组的超级标签 用于区分不同的通信域 在执行函数MPI Init之后 一个MPI程序的所有进程形成一个缺省的组 这个组的通信域即被写作MPI COMM WORLD 该参数是MPI通信操作函数中必不可少的参数 用于限定参加通信的进程的范围 2020年4月 27 55 解剖greetings程序 intMPI Comm size MPI Commcomm int size 获得通信空间comm中规定的组包含的进程的数量 指定一个communicator 也指定了一组共享该空间的进程 这些进程组成该communicator的group intMPI Comm rank MPI Commcomm int rank 得到本进程在通信空间中的rank值 即在组中的逻辑编号 从0开始 intMPI Finalize 标志并行代码的结束 结束除主进程外其它进程 之后串行代码仍可在主进程 rank 0 上运行 如果必须 2020年4月 28 55 讲座内容提示 基本的MPI基本概念点到点通信 Pointtopoint MPI中API的主要内容 为MPI最基本 最重要的内容MPI程序的编译和运行深入MPI用户自定义 派生 数据类型 User defined Derived datatype 事实上MPI的所有数据类型均为MPI自定义类型支持异构系统允许消息来自不连续的或类型不一致的存储区 结构 数组散元 集合通信 Collective 数据移动 数据聚集 同步基于pointtopoint构建MPI环境管理函数组 上下文和通信空间 通信域的管理实例 2020年4月 29 55 PointtoPoint通信 单个进程对单个进程的通信 重要且复杂术语Blocking 阻塞 一个例程须等待操作完成才返回 返回后用户可以重新使用调用中所占用的资源 Non blocking 非阻塞 一个例程不必等待操作完成便可返回 但这并不意味着所占用的资源可被重用 Local 本地 过程的完成仅依赖于本地正在执行的进程 Non local 非本地 如果过程的完成要求其他进程的MPI过程完成 2020年4月 30 55 BlockingSend intMPI Send void buf intcount MPI Datatypedatatype intdest inttag MPI Commcomm INbuf发送缓冲区的起始地址INcount要发送信息的元素个数INdatatype发送信息的数据类型INdest目标进程的rank值INtag消息标签INcomm通信域 2020年4月 31 55 BlockingReceive intMPI Recv void buf intcount MPI Datatypedatatype intsource inttag MPI Commcomm MPI Status status OUTbuf发送缓冲区的起始地址INcount要发送信息的元素个数INdatatype发送信息的数据类型INdest目标进程的rank值INtag消息标签INcomm通信域OUTstatusstatus对象 包含实际接收到的消息的有关信息 2020年4月 32 55 MPI消息 MPI消息包括信封和数据两个部分 信封指出了发送或接收消息的对象及相关信息 而数据是本消息将要传递的内容数据 信封 2020年4月 33 55 2020年4月 34 55 消息数据 由count个类型为datatype的连续数据空间组成 起始地址为buf不是以字节数 而是以元素的个数指定消息的长度count可以是零 这种情况下消息的数据部分是空的MPI基本数据类型相应于宿主语言的基本数据类型 2020年4月 35 55 MPI基本数据类型 2020年4月 36 55 MPI标识一条消息的信息包含四个域 Source 发送进程隐式确定 由进程的rank值唯一标识Destination Send函数参数确定Tag Send函数参数确定 用于识别不同的消息 0 UB UB MPI TAG UB 32767 Communicator 缺省MPI COMM WORLDGroup 有限 N 有序 Rank 0 1 2 N 1 Contex Super tag 用于标识该通讯空间 消息信封 2020年4月 37 55 status参数 当使用MPI ANY SOURCE或 和MPI ANY TAG接收消息时如何确定消息的来源source和tag值呢 在C中 结构 status MPI SOURCE status MPI TAG 在Fortran中 数组 source status MPI SOURCE tag status MPI TAG Status还可用于返回实际接收到消息的长度intMPI Get count MPI Statusstatus MPI Datatypedatatype int count INstatus接收操作的返回值 INdatatype接收缓冲区中元素的数据类型 OUTcount接收消息中的元素个数 2020年4月 38 55 消息匹配 接收buffer必须至少可以容纳count个由datatype参数指明类型的数据 如果接收buf太小 将导致溢出 出错 消息匹配参数匹配dest tag comm source tag commSource MPI ANY SOURCE 接收任意处理器来的数据 任意消息来源 Tag MPI ANY TAG 匹配任意tag值的消息 任意tag消息 Source destination是允许的 但是不安全的 可能导致死锁 消息传送被限制在同一个communicator 在send函数中必须指定唯一的接收者 Push pull通讯机制 2020年4月 39 55 分析greetings include include mpi h main intargc char argv intnumprocs 进程数 该变量为各处理器中的同名变量 存储是分布的 intmyid 我的进程ID 存储也是分布的 MPI Statusstatus 消息接收状态变量 存储也是分布的 charmessage 100 消息buffer 存储也是分布的 初始化MPI MPI Init 2020年4月 40 55 分析greetings if myid 0 建立消息 sprintf message Greetingsfromprocess d myid 发送长度取strlen message 1 使 0也一同发送出去 MPI Send message strlen message 1 MPI CHAR 0 99 MPI COMM WORLD else my rank 0 for source 1 source numprocs source MPI Recv message 100 MPI CHAR source 99 MPI COMM WORLD Endmain 2020年4月 41 55 Greetings执行过程 假设进程数为3 进程0 进程1 进程2 rank 0 rank 1 rank 2 Recv Recv Send Send 问题 进程1和2谁先开始发送消息 谁先完成发送 2020年4月 42 55 运行greetings dair node01 mpicc ogreetinggreeting c dair node01 mpirun np4greetingGreetingsfromprocess1 Greetingsfromprocess2 Greetingsfromprocess3 dair node01 计算机打印字符 我们输入的命令 2020年4月 43 55 最基本的MPI MPI调用借口的总数虽然庞大 但根据实际编写MPI的经验 常用的MPI调用的个数非常有限 上面介绍的是6个最基本的MPI函数 MPI Init MPI Comm size MPI Comm rank MPI Send MPI Recv MPI Finalize MPI Init 并行代码 MPI Fainalize 只能有串行代码 2020年4月 44 55 现在您已经能够用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年绿色能源示范园区土地平整及智能电网接入施工合同
- 2025年度建筑用热镀锌钢管安装工程劳务合同范本(2025版)
- 2025年度五星酒店直饮水系统节能改造与水质保障服务协议
- 2025年国际供应链金融跨境保理担保服务合同
- 工程机械设备维修公司员工保密合同
- 2025-2030中国手持绿篱机行业销售渠道趋势及投融资前景规划报告
- 2025年第三季度院感职业暴露试题及答案
- 高速公路项目资金管理方案
- 2025年水类运动行业研究报告及未来行业发展趋势预测
- 2025年硅冶炼行业研究报告及未来行业发展趋势预测
- 电池火灾安全知识培训课件
- 2025年CAD机械制图考试题库及答案
- 云南省澜沧拉祜族自治县2025年上半年事业单位公开招聘教师岗试题含答案分析
- 2025工会基础知识考试题库及参考答案
- 养老护理员基础照护试题(含参考答案)
- 教师职业技能提升培训教程
- 2025年安徽省宿州市辅警协警笔试笔试测试卷(含答案)
- 2025年医院财务科招聘考试题目(附答案)
- 高血压病例汇报
- 六年级上册语文1-8单元习作范文
- 第10课 公共场所言行文明 第1课时(课件)2025-2026学年道德与法治三年级上册统编版
评论
0/150
提交评论