MPI
信息传递接口
MPI是一个跨语言的通讯协议,用于编写并行计算机。支持点对点和广播。MPI的目标是高性能,大规模性,和可移植性。MPI在今天仍为高性能计算的主要模型。
简介
与OpenMP并行程序不同,MPI是一种基于信息传递的并行编程技术。消息传递接口是一种编程接口标准,而不是一种具体的编程语言。简而言之,MPI标准定义了一组具有可移植性的编程接口。
组成
数据类型
定义了精确的数据类型参数而不使用字节计数,以数据类型为单位指定消息的长度;对于C和Fortran,MPI均预定义了一组数据类型和一些附加的数据类型;可以发送 或接收连续的数据,还可以处理不连续的数据;允许发送和接收不同的数据类型。
通信域
MPICH中的一个通信域定义了一组进程和一个通信的上下文,虚拟处理器拓扑、属性等内容。它以对象形式存在,作为通信操作的附加参数。MPI预定义的通信域:mpi comm world(包含所有进程)、mpi comm self(只包含各个进程自己的进程组)。
6个MPI调用接口
1.mpi init()初始化MPI执行环境,建立多个MPI进程之间的联系,为后续通信做准备;
2.mpi finalize 结束MPI执行环境;
3.mpi comm rank用来标识各个MPI进程的,给出调用该函数的进程的进程号,返回整型的错误值。两个参数:MPI_Comm类型的通信域,标识参与计算的MPI进程组; &rank返回调用进程中的标识号;
4.mpi comm size用来标识相应进程组中有多少个进程;
5.mpi send(buf,counter,datatype,dest,tag,comm): buf:发送缓冲区的起始地址,可以是数组或结构指针;count:非负整数,发送的数据个数;datatype:发送数据的数据类型;dest:整型,目的的进程号;tag:整型,消息标志;comm:MPI进程组所在的通信域
含义:向通信域中的dest进程发送数据,数据存放在buf中,类型是datatype,个数是count,这个消息的标志是tag,用以和本进程向同一目的进程发送的其它消息区别开来。
6.mpi recv(buf,count,datatype,source,tag,comm,status): source:整型,接收数据的来源,即发送数据进程的进程号; status:MPI_Status结构指针,返回状态信息。
MPI并行编程
并行编程模式
对等模式—程序的各个部分地位相同,功能和代码基本一致,只是处理的数据或对象不同;主从模式—程序通信进程之间的一种主从或依赖关系。
点对点通信模式
阻塞—发送完成的数据已经拷贝出发送缓冲区,即发送缓冲区可以重新分配使用,阻塞接受的完成意味着接收数据已经拷贝到接收缓冲区,即接收方已可以使用。非阻塞—在必要的硬件支持下,可以实现计算和通信的重叠。4种通信模式:标准通信模式、缓存通信模式、同步通信模式、就绪通信模式。
组通信
一个特定组内所有进程都参加全局的数据处理和通信操作。
功能:通信—组内数据的传输;同步—所有进程在特定的点上取得一致;计算—对给定的数据完成一定的操作。
类型:1)数据移动:广播(mpi bcast) 收集(mpi gather) 散射(mpi scater)组收集(mpi all gather)全交换(all to all);2)聚集:规约(mpi reduce)将组内所有的进程输入 缓冲区中的数据按,定操作OP进行运算,并将起始结果返回到root进程的接收缓冲区扫描(mpi scan)要求每一个进程对排在它前面的进程进行规约操作,结果存入自身的输出缓冲区;3)同步:路障(mpi barrier)实现通信域内所有进程互相同步,它们将处于等待状态,直到所有进程执行它们各自的MPI-BARRIER调用。
历史
创建信息传递接口的讨论始于1991的夏天,一个组研究员于在奥地利进行山中修养时。那次讨论之后,于1992年4月29-30号于弗吉尼亚威廉姆斯伯格召开了一次关于分布式内存环境下的信息传递标准设置研讨会。在这次研讨会上讨论了对标准信息传递接口至关重要的一些基本特征,并创建了一个继续标准化此过程的工作组。Jack Dongarra, Rolf Hempel, Tony Hey, and David W. Walker于1992年11月提出了一些初始草稿提议,后被称为MPI1。在1992年11月,一个MPI的工作组会议在Minneapolis召开,他们决定了为此标准化过程创建一个更正式的标注。MPI工作组在1993年的头九个月每6个星期见面一次。MPI标准草稿在93年11月的超级计算机会议上提出。在经过一阵子的公众论议后,MPI修改了一些部分,并于1994年6月发布了MPI1.0版本。这些会议和邮件共同创建了MPI论坛,此论坛后来开放至所有高性能计算的成员。在一九九七年的七月在对原来的MPI作了重大扩充的基础上又推出了MPI的扩充部分MPI-2 而把原来的MPI各种版本称为MPI-1。MPI-2的扩充很多但主要是三个方面并行I/O,远程存储访问和动态进程管理。
MPI包含了80个人40个组织的共同努力,他们主要都在美国和欧洲。主要的时下电脑供应商也涉入MPI,还有大学的研究员,政府公务员和产业界。
MPI标准定义了核心库的语法和语义,这个库可以被Fortran和C调用构成可移植的信息传递程序。MPI提供了适应各种并行硬件商的基础集,他们都被有效的实现。这导致了是硬件商可以基于这一系列底层标准来创建高层次的惯例,从而为分布式内存交互系统提供他们的并行机。MPI提供了一个简单易用的可移植接口,足够强大到程序员可以用它在高级机器上进行进行高性能信息传递操作。
在创建“真正”的MPI标准过程中,研究员们集成了几个系统最有用的特征到MPI中,而不是用一个系统来适应标准。其特征为IBM,Intel, nCUBE, PVM, Express, P4 and PARMACS等系统所用。
信息传递模式非常之吸引人,皆因它的广泛可移植性,以及能被用于分布式内存/共享内存的多核处理器,工作站网络,和这些架构的组合。信息传递模式可用于多重设定,独立于网络速度和内存架构。
参考资料
Mpi.百度文库.
最新修订时间:2023-07-14 10:16
目录
概述
简介
组成
参考资料