您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 并行程序设计技术――MPI
LOGO并行程序设计技术——MPI遥感产品研发部——刘跃虎liuyuehu8851@126.comCOMPANYLOGO“HelloWorld!”#includempi.h#includestdio.h#includemath.hvoidmain(argc,argv)intargc;char*argv[];{intmyid,numprocs;intnamelen;charprocessor_name[MPI_MAX_PROCESSOR_NAME];MPI_Init(&argc,&argv);MPI_Comm_rank(MPI_COMM_WORLD,&myid);MPI_Comm_size(MPI_COMM_WORLD,&numprocs);MPI_Get_processor_name(processor_name,&namelen);fprintf(stderr,HelloWorld!Process%dof%don%s\n,myid,numprocs,processor_name);MPI_Finalize();}COMPANYLOGO“HelloWorld!”一个C语言格式的MPI程序在每个进程中输出“HelloWorld!”以及进程编号等信息如果设置每台机器运行一个进程,那么在一个有四个结点的机群环境中,这段代码的执行结果可能如下:HelloWorld!Process0of4ontp5HelloWorld!Process1of4ontp1HelloWorld!Process2of4ontp3HelloWorld!Process3of4ontp4其中,tp1、tp2、tp3、tp4为机群中的四个结点的机器名COMPANYLOGO并行计算机由多颗CPU共同做处理的计算机它可以加快速度,即在更短的时间内解决相同的问题或在相同的时间内解决更多更复杂的问题节省投入,并行计算可以以较低的投入完成串行计算才能够完成的任务物理极限的约束,光速是不可逾越的速度极限,设备和材料也不可能做得无限小,只有通过并行才能够不断提高速度COMPANYLOGO并行计算机根据一个并行计算机能够同时执行的指令与处理数据的多少,可以把并行计算机分为(SIMDSingle-InstructionMultiple-Data)单指令多数据并行计算机和(MIMDMultiple-InstructionMultiple-Data)多指令多数据并行计算机随着新的并行计算机组织方式的产生,比照上面的划分方法,人们按同时执行的程序和数据的不同又提出了(SPMDSingle-ProgramMultuple-Data)单程序多数据并行计算机和(MPMDMultiple-ProgramMultiple-Data)多程序多数据并行计算机COMPANYLOGO并行计算机按存储方式可以将并行计算机分为共享内存和分布式内存两种。除此之外,分布式共享内存也是一种越来越重要的并行计算机存储方式。COMPANYLOGO并行编程模型目前两种最重要的并行编程模型是数据并行和消息传递,数据并行编程模型的编程级别比较高,编程相对简单,但它仅适用于数据并行问题;消息传递编程模型的编程级别相对较低,但消息传递编程模型可以有更广泛的应用范围数据并行即将相同的操作同时作用于不同的数据,因此适合在SIMD及SPMD并行计算机上运行数据并行编程模型虽然可以解决一大类科学与工程计算问题,但是对于非数据并行类的问题,如果通过数据并行的方式来解决一般难以取得较高的效率,数据并行不容易表达甚至无法表达其它形式的并行特征COMPANYLOGO并行编程模型消息传递模型一方面为编程者提供了灵活性,另一方面它也将各个并行执行部分之间复杂的信息交换和协调控制的任务交给了编程者,这在一定程度上增加了编程者的负担,这也是消息传递编程模型编程级别低的主要原因。虽然如此,消息传递的基本通信模式是简单和清楚的,学习和掌握这些部分并不困难,因此目前大量的并行程序设计仍然是消息传递并行编程模式COMPANYLOGO并行语言并行程序是通过并行语言来表达的并行语言的产生主要有三种方式:1、设计全新的并行语言;2、扩展原来的串行语言的语法成分使它支持并行特征;3、不改变串行语言,仅为串行语言提供可调用的并行库COMPANYLOGO并行算法并行算法是给定并行模型的一种具体明确的解决方法和步骤根据运算的基本对象的不同可以将并行算法分为数值并行算法(数值计算)和非数值并行算法(符号计算)根据进程之间的依赖关系可以分为同步并行算法(步调一致)、异步并行算法(步调进展互不相同)和纯并行算法(各部分之间没有关系)根据并行计算任务的大小可以分为粗粒度并行算法(一个并行任务包含较长的程序段和较大的计算量)、细粒度并行算法(一个并行任务包含较短的程序段和较小的计算量)以及介于二者之间的中粒度并行算法COMPANYLOGO并行算法对于不同种类的并行计算机需采用不同的并行算法,对于SIMD并行计算机一般适合同步并行算法,而MIMD并行计算机则适合异步并行算法对于机群计算有一个很重要的原则就是设法加大计算时间相对于通信时间的比重,减少通信次数甚至以计算换通信,这是因为对于机群系统一次通信的开销要远远大于一次计算的开销,因此要尽可能降低通信的次数或将两次通信合并为一次通信基于同样的原因,机群计算的并行粒度不可能太小,因为这样会大大增加通信的开销。如果能够实现计算和通信的重叠那将会更大地提高整个程序的执行效率COMPANYLOGO并行算法对于机群计算,可以是数值或非数值的计算,这些都不是影响性能的关键,也可以是同步松同步或异步的,但以同步和松同步为主,并行的粒度一般是大粒度或中粒度的。一个好的算法一般应该呈现如下的计算模式:COMPANYLOGO并行算法若能够实现计算与通信的重叠,那将是更理想的计算模式,如下图所示:COMPANYLOGO简介MPI是为开发基于消息传递模型的并行程序而制定的工业标准,其目的是为了提高并行程序的可移植性和易用性,用户必须显式地通过发送和接受消息来实现处理器之间的数据交换。MPI是一个函数库,一种消息传递模型,而不是一门语言,它的最终目的是服务于进程间通信。MPI具有移植性好、功能强大、效率高等多种优点,而且有多种不同的免费、高效、实用的实现版本,几乎所有的并行计算机厂商都提供对它的支持。MPI适合于机器间的并行。COMPANYLOGO简介MPI为自己制定了一个雄心勃勃的目标,总结概括起来它包括几个在实际使用中都十分重要但有时又是相互矛盾的三个方面:1较高的通信性能2较好的程序可移植性3强大的功能。具体地说包括以下几个方面:提供应用程序编程接口提高通信效率,措施包括避免存储器到存储器的多次重复拷贝,允许计算和通信的重叠等可在异构环境下提供实现提供的接口可以方便C语言和Fortran77的调用提供可靠的通信接口,即用户不必处理通信失败定义的接口和现在已有接口如PVMNXExpressp4等差别不能太大,但是允许扩展以提供更大的灵活性定义的接口能在基本的通信和系统软件无重大改变时在许多并行计算机生产商的平台上实现,接口的语义是独立于语言的接口设计应是线程安全的COMPANYLOGO简介MPI提供了一种与语言和平台无关、可以被广泛使用的编写消息传递程序的标准,用它来编写消息传递程序不仅实用、可移植、高效和灵活,而且和当前已有的实现没有太大的变化在MPI-1中,明确提出了MPI和FORTRAN77与C语言的绑定,并且给出了通用接口和针对FORTRAN77与C的专用接口说明,MPI-1的成功说明MPI选择的语言绑定策略是正确和可行的COMPANYLOGO简介在MPI-2中除了和原来的FORTRAN77和C语言实现绑定之外,进一步与Fortran90和C++结合起来提供了四种不同的接口,为编程者提供了更多选择的余地,但是MPI-2目前还没有完整的实现版本MPICH是一种最重要的MPI实现,它可以免费从取得。更为重要的是MPICH是一个与MPI-1规范同步发展的版本,每当MPI推出新的版本就会有相应的MPICH的实现版本。目前MPICH的最新版本是MPICH-1.2.1,它支持部分的MPI-2的特征。Argonne国家试验室和MSU对MPICH作出了重要的贡献COMPANYLOGO简介MPI的一个最重要的特点就是免费和源代码开放,MPI可以被迅速接受和它为自己定下的高效率方便移植和功能强大三个主要目标密不可分,它采用广为使用的语言FORTRAN和C进行绑定也是它成功的一个重要因素,当然MPI的成功还因为它总结和吸收了前期大量消息传递系统的经验,一个成功的标准是需要大量的实践和艰苦的努力的,MPI就是这种实践和努力的结果COMPANYLOGO的六个基本接口在MPI-1中共有128个调用接口,在MPI-2中有287个,应该说MPI是比较庞大的,完全掌握这么多的调用对于初学者来说是比较困难的。但是从理论上说MPI所有的通信功能可以用它的6个基本的调用来实现,掌握了这6个调用就可以实现所有的消息传递并行程序的功能COMPANYLOGO简介MPI对参数说明的方式有三种,分别是IN、OUT和INOUT。它们的含义分别是:IN输入调用部分传递给MPI的参数,MPI除了使用该参数外不允许对这一参数做任何修改OUT输出MPI返回给调用部分的结果参数,该参数的初始值对MPI没有任何意义INOUT输入输出调用部分首先将该参数传递给MPI,MPI对这一参数引用修改后将结果返回给外部调用,该参数的初始值和返回结果都有意义MPI的定义在最大范围内避免INOUT参数的使用,因为这些使用易于出错,特别是对标量参数COMPANYLOGO初始化MPI_INIT是MPI程序的第一个调用,它完成MPI程序所有的初始化工作,所有MPI程序的第一条可执行语句都是这条语句COMPANYLOGO结束MPI_FINALIZE是MPI程序的最后一个调用,它结束MPI程序的运行,它是MPI程序的最后一条可执行语句,否则程序的运行结果是不可预知的COMPANYLOGO当前进程标志这一调用返回调用进程在给定的通信域中的进程标识号,有了这一标识号不同的进程就可以将自身和其它的进程区别开
本文标题:并行程序设计技术――MPI
链接地址:https://www.777doc.com/doc-3356218 .html