2009并行计算与多核程序设计19-20MPI程序设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1并行计算与多核程序设计19-20课MPI程序设计陈天洲,施青松,胡威{tzchen,zjsqs,ehu}@zju.edu.cn2009年12月16日,玉泉校区曹西101浙江大学软硬件协同设计实验室简介—MPI及其历史MPI及其历史1993年MPI1.0,目前MPI-2消息传递接口MessagePassingInterface,简称MPI一种编程接口标准,而不是一种具体的编程语言。由消息传递接口论坛(MessagePassingInterfaceForum,简称MPIF)发起讨论并进行规范化的。MPI标准如今已经成为事实意义上的消息传递并行编程标准,也是最为流行的并行编程接口浙江大学软硬件协同设计实验室简介—MPI及其历史(续)MPI标准定义了一组具有可移植性的编程接口。典型的实现包括开源的MPICH、LAMMPI以及不开源的INTELMPI。浙江大学软硬件协同设计实验室简介—典型MPI实现简介典型MPI实现简介MPICHIntelMPI浙江大学软硬件协同设计实验室典型MPI实现简介—MPICHMPICH是影响最大、用户最多的MPI实现。开放源码;与MPI标准同步发展;支持多程序多数据(MultipleProgramMultipleData,MPMD)编程和异构集群系统;支持C/C++、Fortran77和Fortran90的绑定;对Fortran的支持提供了头文件mpif.h和模块两种方式;支持类Unix和WindowsNT平台;支持环境非常广泛,包括多核、SMP、集群和大规模并行计算系统;浙江大学软硬件协同设计实验室典型MPI实现简介—IntelMPIIntelMPI提供了名为DirectAccessProgrammingLibrary(DAPL)的中间层来支持多架构,兼容多种网络硬件及协议,优化网络互联。图7.1IntelMPI库及其基于DAPL的互联结构IntelMPI透明地支持TCP/IP、共享内存,并基于DAPL有效支持多种高性能互联系统IntelMPI提供更好的线程安全机制,多线程的MPI程序并不限制MPI的使用。浙江大学软硬件协同设计实验室简介—MPI程序特点消息传递指的是并行执行的各个进程具有自己独立的堆栈和代码段,进程之间的信息交互完全通过显式地调用通信函数来完成。分类:单程序多数据(SingleProgramMultipleData,简称SPMD)prog_aLoadProcessStoreSPMDprog_aNode1Node2Node3图7.2SPMD执行模型图7.3串行处理程序的运行过程浙江大学软硬件协同设计实验室程序特点—SPMDprocess0process1process2LoadProcessGatherStore图7.4SPMD程序的并行执行过程浙江大学软硬件协同设计实验室程序特点—MPMD多程序多数据MPMD(a)MPMDMaster/Worker(b)MPMDCoupledAnalysisNode1Node2Node3Node1Node2Node3prog_aprog_bprog_aprog_bprog_c(c)MPMDStreamlineprog_aprog_bprog_cNode1Node2Node3图7.5MPMD执行模型浙江大学软硬件协同设计实验室程序特点—MPMD(续)(a)是一个管理者(Master)/工人(Worker)类型的MPMD程序,由一个Master(prog_a)来控制整个程序的执行,将任务分配给Worker(prog_b)来完成工作。(b)联合数据分析程序MPMD程序。在大部分的时间内,不同的程序各自独立的完成自己的任务,并在特定的时候交换数据。耦合性最少,通信也少,更容易获得好的并行加速效果。(c)是流式的MPMD程序,程序运行由prog_a、prog_b和prog_c组成,这三个程序之间是典型的串行执行。在这种情况下,并行性的取得依赖于执行大量的任务,通过这种流水线获得性能加速。浙江大学软硬件协同设计实验室的安装和配置MPICH的安装和配置在LINUX上安装和配置MPICH-2在Windows上安装和配置MPICH-2浙江大学软硬件协同设计实验室的安装和配置—Linux在LINUX上安装和配置MPICH-2Step1:MPICH-2的下载软件的稳定版本可在下载。Step2:MPICH-2的安装安装之前先利用autoconf机制进行配置。最基本地,通过configure脚本指定安装目标路径即可。我们这里的安装路径设为/home/test/mpich2-1。相应的命令行为:./configure--prefix=/home/test/mpich2-1如果配置成功,使用make;makeinstall命令即可完成软件包安装。浙江大学软硬件协同设计实验室的安装和配置—Linux(续)Step3:MPICH-2的配置与验证MPI进程的创建、启动和管理需借助进程管理器(PM)来完成。本章的测试环境均使用mpd。安装成功后,还需要进一步配置MPICH的执行环境。可能的工作有以下几部分。需要Python软件MPD由python实现的一组工具构成,因此首先需确保机器上已经安装了正确版本的python解释器,设置主目录下的mpd.hosts文件mpdboot在主机上启动mpd进程,形成MPI运行时环境,目标主机列表由$HOME/mpd.hosts文件指定。配置SSH无密码登录在利用mpdboot启动之前,需配置集群环境支持节点间的无密码登录,该功能需要ssh的支持。命令和手册页路径的配置浙江大学软硬件协同设计实验室的安装和配置—Linux(续2)Step4:启动MPD在安装和上述配置结束后,即可启动mpd进程,创建mpi运行时环境了。具体的命令为:MpibootStep5:应用程序的编译、链接为简化链接过程,MPICH环境提供了形如mpicc,mpif77,mpif90等编译脚本。可以在源码目录中,通过如下命令来完成编译和链接:mpicc–omypicpi.cStep6:MPI程序的运行MPI-2标准建议使用mpiexec代替mpirun来启动应用程序。MPICH2实现了mpiexec标准并通过mpd对标准作了适当扩展。浙江大学软硬件协同设计实验室的安装和配置—Windows在Windows上安装与配置MPICH-2下面以MicrosoftVisualStudio.Net2003为例说明编写MPI程序的步骤。第一步:建立VisualStudio.Net2003项目,创建命令行界面的应用程序即可。第二步:将mpich2\include加入到头文件目录中,配置选项在菜单ToolsOptionsProjectsVC++Directories对话框中。第三步:将mpich2\lib加入到库文件目录中,配置选项在菜单ToolsOptionsProjectsVC++Directories对话框中。第四步:设置项目的属性,将mpi.lib加入到链接库中。C++应用程序中为了避免名字冲突。在这里,我们可以将MPI的头文件mpi.h放在预编译头文件stdafx.h的第一句浙江大学软硬件协同设计实验室编程基础简单的MPI程序示例#includestdio.h#includempi.hintmain(intargc,char*argv[]){intmyid;intsize;MPI_Init(argc,argv);MPI_Comm_rank(MPI_COMM_WORLD,&myid);MPI_Comm_size(MPI_COMM_WORLD,&size);printf(Helloworldfromprocess%dof%d\n,rank,size);MPI_Finalize();return0;}Helloworldfromprocess0of4Helloworldfromprocess1of4Helloworldfromprocess2of4Helloworldfromprocess3of4每个进程中分别打印各自的MPI进程号(0~3)和总进程数(4)浙江大学软硬件协同设计实验室浙江大学软硬件协同设计实验室程序结构浙江大学软硬件协同设计实验室接口MPI-1有128个调用接口MPI-2中有287个调用方法函数形式浙江大学软硬件协同设计实验室编程基础—MPI程序的四个基本函数MPI_Init和MPI_FinalizeMPI_Init初始化MPI执行环境,建立多个MPI进程之间的联系,为后续通信做准备MPI_Finalize则是结束MPI执行环境。这两个函数就是用来定义MPI程序的并行区的。浙江大学软硬件协同设计实验室MPI_Comm_rank当前进程标识,标识各个MPI进程参数:MPI_Comm类型的通信域,标识参与计算的MPI进程组。整型指针,返回进程在相应进程组中的进程号。MPI_Comm_size用来标识相应进程组中有多少个进程通信域包含的进程数浙江大学软硬件协同设计实验室编程基础—MPI的点对点通信两个最重要的MPI函数MPI_Send和MPI_Recv。intMPI_SEND(buf,count,datatype,dest,tag,comm)这个函数的含义是向通信域comm中的dest进程发送数据。消息数据存放在buf中,类型是datatype,个数是count个。这个消息的标志是tag,区别不同消息。输入参数包括:buf,发送缓冲区的起始地址,可以是各种数组或结构的指针。count,整型,发送的数据个数,应为非负整数。datatype,发送数据的数据类型,dest,整型,目的进程号。tag,整型

1 / 63
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功