MPI 并行程序设计 1 、消息传递并行程序的基本原理 1.1 消息传递的基本概念 MP( message passing )消息传递模型:采用消息传递模型的程序由一组进程构成,每个进程只能访问本地的(自己)的存储器空间,在不同进程之间的通信通过发送和接收消息来完成。根据这个定义,在消息传递模型下,不同进程之间的数据传输由发送进程和接收进程共同完成。 由于支持消息通信对系统的硬件和软件的要求都不高,因此消息传递模型在并行程序设计中被广泛采用。最简单的可以采用消息传递方式编程的并行计算机系统包括多个处理器,每个处理器有自己的存储器,他们用某种形式的互联网络连接在一起。因此,消息传递模型不仅可以用来编写分布内存并行计算机系统的程序,也可以用来编写集群系统上的程序。而在共享存储器系统中,消息传递可以用共享存储器来代替互连网络,因此,消息传递模型具有可以适应多种体系结构的要求。从软件的角度来说,采用消息传递的系统通常以消息传递库的形式出现,库中包含了发送了接收消息所需要的函数。这使得可以以现有的串行程序语言为基础来开发消息传递的程序。一个消息传递的库从严格意义上来说,只需要提供两个函数:一个用来发送消息,一个用来接收消息,但事实上,绝大多数最近出现的消息传递库比如 CMMD,NX,MPL 和MPI 都提供了额外的函数调用来进行复杂的通信操作,比如在一组处理器中进行集合通信的操作。 2 、点到点通信 主要的点到点通信操作是 SEND 和RECEIVE。SEND 把一条消息从一个处理器发送到另外一个,而 RECEIVE 则读取来自其他处理器的消息。在最简单的情况下,对 SEND 和RECEIVE 的调用不会立即返回,除非实际的操作已经完成(消息发送完毕或者消息接收完毕)。这种形式的操作被称为阻塞 SEND 和RECEIVE。一个阻塞的SEND 只有在对应的RECEIVE 操作已经被调用(不一定结束)并且消息已经被发送的情况下才会顺利返回。同样的,一个阻塞 RECEIVE 只有在对应的SEND 操作已经调用并且消息已经成功地接收的情况下才会顺利返回(这里暂时不讨论发生异常比如调用出错的情况)。 对阻塞操作来说,每次处理器进行 SEND 和 RECEIVE 调用时它需要等待的时间不仅包括传输数据所需的时间,还包括对应的处理器对匹配的操作进行调用的时间。因此在消息传递过程中,除非 SEND 和 RECEIVE 操作同时调用,总有一些处理器处在等待状态,这增加了程序执行的额外开销。 SEND 和 RECEIVE 操作...