什么是MPI
MPI,Message Passing Interface,即消息传递接口。
1、MPI是一个库,而不是一门语言。
2、MPI是一种标准或规范的代表,而不特指某一个对它的具体实现。
3、MPI是一种消息传递编程模型,并成为这种编程模型的代表和事实上的标准。MPI虽然很庞大。但是它的最终目的是服务于进程间通信这一目标的。
4、MPI是一个信息传递应用程序接口,包括协议和语义说明,他们指明其如何在各种实现中发挥其特性。
5、MPI是一个跨语言的通讯协议,用于编写并行计算机。
6、支持点对点和广播通信模式。
7、MPI通信域:
MPI通信域包括两部分,进程组和通信上下文,进程组即所有参加通信的进程的集合;通信上下文提供一个相对独立的通信区域,不同的消息在不同的上下文中进行传递,不同上下文的消息互不干涉,通信上下文可以将不同的通信区别开来。
一个预定义的通信域MPI_COMM_WORLD由MPI提供,MPI初始化后,便会产生这一描述子,它包括了初始化时可得的全部进程,进程是由它们在MPI_COMM_WORLD组中的进程号所标识。
8、消息传输是消息数据从一个处理器的内存拷贝到另一个处理器内存的方法。在分布式存储系统中,数据通常是以消息包的形式通过网络从一个处理器发送到另一个处理器。在消息包中,包含了消息头控制信息及消息体数据信息两部分。
9、发送和接受:消息通信包括数据传输从一个进程(发送)到另一个进程(接收)。 要求两个进程协作完成消息发送和接收过程,发送进程一般要求指定发送数据的源、数据长度、数据类型及目的地,而接收操作也要求指定相应的操作与发送相匹配。
10、MPI消息传递过程:
(1)消息装配:将发送数据从发送缓冲区中取出,加上消息信封等形成一个完整的消息。
(2)消息传递:将装配好的消息从发送端传递到接收端。
(3)消息拆卸:从接收到的消息中取出数据送入接收缓冲区。
11、MPI消息的组成
MPI消息包括信封和数据两个部分,信封指出了发送或接收消息的对象及相关信息,而数据是本消息将要传递的内容,信封和数据又分别包括三个部分,可以用一个三元组来表示:
信封 <源/目 标识 通信域>
数据 <起始地址 数据个数 数据类型>
12、本地进程和非本地进程:如果在执行MPI程序过程中可能需要在另一个MPI程序上调用一些特定的语义或内容,则这个MPI程序是非本地的。
13、MPI操作是由MPI库为建立和启用数据传输和/或同步而执行的一系列步骤,它包括四个阶段:初始化、开始、完成和释放。
14、MPI基本语句
- MPI_Init(int *argc, char ***argv)
完成MPI程序初始化工作,通过获取main函数的参数,让每一个MPI 进程都能获取到main函数 - MPI_Comm_rank(MPI_Comm comm, int *rank)
用于获取调用进程在给定的通信域中的进程标识号 - MPI_Comm_size(MPI_Comm comm, int *size)
调用返回给定的通信域中所包含的进程总数 - MPI_Finalize(void)
MPI程序的最后一个调用, 清除全部MPI环境
15、MPI版本: