基于数据分组方法的数据仓库并行预计算和查询(5)
作者:佚名; 更新时间:2014-12-05
享存储和分布式存储、MPP、Cluster)和多个操作系统(UNIX、WindowsNT、Linux)。

  3.2   MPI的特点与实现

    如上一小节所述,MPI是一个消息传递模式下并行程序设计的标准规范。在标准的程序设计语言的基础上,加入实现进程间通信的MPI消息传递函数以及其他并行计算环境设置函数,就构成了MPI并行程序设计所依赖的并行编程环境。对于MPI的定义,需要理解以下三个方面[Du01]:

  (1) MPI是一个库而不是一门语言。MPI库可以被FORTRAN77/C/Fortran90/C++调用从语法上说它遵守所有对库函数/过程的调用规则和一般的函数/过程没有什么区别。

  (2) MPI是一种标准或规范的代表,而不特指某一个对它的具体实现。迄今为止所有的并行计算机制造商都提供对MPI的支持,一个正确的MPI程序,可以不加修改地在所有并行机上运行。

  (3) MPI是一种消息传递编程模式并成为这种编程模式的代表和事实上的标准。MPI虽然很庞大,但是它的最终目的是服务于进程间通信这一目标的。

  由此可见,MPI是一个标准。就如同世界上其他标准一样,都会出现很多基于同一标准的不同产品,MPI也不例外。很多研究机构或者公司根据MPI的标准和自己的实际情况,编写出了不同的支持MPI程序的编程环境,而这些编程环境在MPI的世界里就被称为MPI实现。目前比较重要的MPI实现有以下两种:

  ●  MPICH[MPI07]。MPICH是一种最重要的MPI实现,是目前使用最广泛的免费MPI系统,大部分集群系统上的并行环境是MPICH。它由美国Argonne国家实验室和MSU共同进行维护。支持几乎所有Linux/UNIX以及Windows9x,NT,2000和XP系统。而且每当MPI推出新的版本时,就会有相应的MPICH实现版本。

  ●  LAM[LAM07]。由美国Ohio State University开发,主要用于异构的计算机网络计算系统。

  3.3   MPI编程的基本概念

  一个MPI并行程序由一组进程或线程所组成。这些进程或线程可以运行在相同的机器上,也可以运行在不同的机器上。在MPI中,一个独立参与通信的个体被定义为一个进程。每个进程所运行的代码并不需要是同样的,进程间的通信是通过调用MPI通信原语来完成。在典型情况下,每个进程都是在自己特有的地址空间中运行,尽管有时在SMP上的MPI程序并不如此。MPI程序中的每个进程都有一个序号,用于在进程组(由MPI程序中部分或全部进程所构成的一个集合)中标识该进程,这个序号被称为进程号,取值范围由0开始。

  MPI程序中进程间通信是通过通信器(communicator)进行的,通信器提供了进程间通信的基本环境。MPI程序在启动时会自动创建两个通信器:MPI_COMM_WORLD和MPI_COMM_SELF。前者包含程序运行时的所有进程,后者则是由每个进程独自构成、仅包含自己的通信器。在MPI程序中,一个MPI进程由通信器和进程在该通信器中的进程号唯一标识,同一进程可以在不同通信器中有不同的进程号。进程可以通过调用MPI_Comm_rank函数来获得本进程在某指定通信器中的进程号。

  3.3.1 MPI的点对点通信

  通信器使得进程间可以通过消息或同步操作来完成通信。消息指在进程间进行的一次数据交换,在MPI中,消息一般包含以下一些内容:通信器、源进程、目的进程、消息标签和数据。MPI进程中使用得最频繁,最基本的一种通信模式就是一对进程相互之间进行通信,也就是一个进程发送消息,另一个进程接收消息,这种通信方式在MPI中被称作点对点通信(point to point communication)。MPI有两大类型的点对点通信函数,一种称为阻塞式(blocking),另一种则是非阻塞式(unblocking)。

    ●  阻塞式通信:阻塞式函数会等到通信操作实际完成,或者至少通信所涉及的数据已经被MPI环境处理好之后才会返回。如MPI_Send和MPI_Recv,分别是阻塞式的发送和接收函数。MPI_Send函数返回之后,表明消息已经发送完毕或者已经被MPI环境处理完毕,随后对于发送缓冲区的修改不会对已经发出的消息有所影响。而MPI_Recv函数返回后,表明消息已经接收完毕并且可以立即使用。

    ●  非阻塞式通信:非阻塞式函数在调用后会立即返回,而实际的消息传递工作由MPI环境在后台执行。非阻塞式函数的命名是在阻塞式函数名的MPI_前缀之后加上一个“I”,如MPI_Isend和MPI_Irecv则是MPI_Send和MPI_Recv的对应非阻塞式通信版本。在调用非阻塞式函数之后,进程可以调用MPI_Wait函数来等待通信操作的完成,或者可以进行其他的计算工作,而不必将CPU时间浪费在通信上,但这时不能对相关的数据缓冲区进行操作。因为当前操作可能会与正在后台进行的通信发生冲突,产生错误使得程序出问题。要检测通信操作是否实际完成,应该调用MPI_Test函数来查询通信操作的完成情况。

  在MPI中,对于点对点通信,也存在着4种发送模式。这4种模式的对应函数名称不同,但参数表是一样的,它们之间的差异,存在于它们发送消息的方式和对接收方的状态要求的不同。这4种模式分别是:标准模式、缓冲模式、同步模式和就绪模式。

    ●  标准模式:当消息长度小于或等于MPI环境预留的数据缓冲区大小时,MPI环境会

核心期刊快速发表
Copyright@2000-2030 论文期刊网 Corporation All Rights Reserved.
《中华人民共和国信息产业部》备案号:ICP备07016076号;《公安部》备案号:33010402003207
本网站专业、正规提供职称论文发表和写作指导服务,并收录了海量免费论文和数百个经国家新闻出版总署审批过的具有国内统一CN刊号与国际标准ISSN刊号的合作期刊,供诸位正确选择和阅读参考,免费论文版权归原作者所有,谨防侵权。联系邮箱:256081@163.com