**訊息傳遞介面**（英語：，縮寫MPI）是一個平行計算的應用程式接口（API），常在超級電腦、電腦叢集等非共享內存環境程序設計。

历史
--

建立信息传递接口的努力始于1991夏天一小群研究员在奥地利的一个度假山庄开始的讨论。那次讨论之后，于1992年4月29-30号于維吉尼亞州威廉斯堡召开了一次关于分布式内存环境下的信息传递标准设置研讨会。在这次研讨会上讨论了对标准信息传递接口至关重要的一些基本特征，并建立了一个继续标准化此过程的工作组。杰克·唐加拉, Rolf Hempel, 托尼·黑（英语：）, and David W. Walker于1992年11月提出了一些初始草稿提议，后被称为MPI1。在1992年11月，一个MPI的工作组会议在明尼亞波利斯召开，他们决定了为此标准化过程建立一个更正式的标注。MPI工作组在1993年的头九个月每6个星期见面一次。MPI标准草稿在93年11月的超级计算机会议上提出。在经过一阵子的公众论议后，MPI修改了一些部分，并于1994年6月发布了MPI1.0版本。这些会议和邮件共同建立了MPI论坛，此论坛后来开放至所有高性能计算的成员。

MPI包含了80个人40个组织的共同努力，他们主要都在美国和欧洲。主要的时下电脑供应商也涉入MPI，还有大学的研究员，政府公务员和产业界。

MPI标准定义了核心函式庫的语法和语义，这个函式庫可以被Fortran和C调用构成可移植的信息传递程序。MPI提供了适应各种并行硬件商的基础集，他们都被有效的实现。这导致了是硬件商可以基于这一系列底层标准来建立高层次的惯例，从而为分布式内存交互系统提供他们的并行机。MPI提供了一个简单易用的可移植接口，足够强大到程序员可以用它在高级机器上进行进行高性能信息传递操作。

在建立"真正"的MPI标准过程中，研究员们整合了几个系统最有用的特征到MPI中，而不是用一个系统来适应标准。其特征为IBM，Intel, nCUBE, PVM, Express, P4 and PARMACS等系统所用。

信息传递模式非常之吸引人，皆因它的广泛可移植性，以及能被用于分布式内存/共享内存的多核处理器，工作站网络，和这些架构的组合。信息传递模式可用于多重设定，独立于网络速度和内存架构。

概述
--

MPI是一个跨语言的通讯协议，用于编写并行计算机。支持点对点和广播。MPI是一个信息传递应用程序接口，包括协议和和语义说明，他们指明其如何在各种实现中发挥其特性。MPI的目标是高性能，大规模性，和可移植性。MPI在今天仍为高性能计算的主要模型。

主要的MPI-1模型不包括共享内存概念，MPI-2有有限的分布共享内存概念。
但是MPI程序经常在共享内存的机器上运行。在MPI模型周边设计程序比在NUMA架构下设计要好因为MPI鼓励内存本地化。

尽管MPI属于OSI参考模型的第五层或者更高，他的实现可能通过传输层的sockets和Transmission Control Protocol (TCP)覆盖大部分的层。大部分的MPI实现由一些指定惯例集（API）组成，可由C,C++,Fortran,或者有此类库的语言比如C#, Java or Python直接调用。MPI优于老式信息传递库是因为他的可移植性和速度。

特色
--

大多數訊息傳遞介面的實現為函式庫，亦不需要編譯器支持。

例子
--

由多行程來執行Hello World：

```
#include <stdio.h>
#include <mpi.h>

int main(int argc, char \*argv[])
{
 char processor\_name[MPI\_MAX\_PROCESSOR\_NAME];
 int len;

 MPI\_Init(&argc, &argv);

 MPI\_Get\_processor\_name(processor\_name, &len);
 printf("Hello World from %s\n", processor\_name);

 MPI\_Finalize();
 
 return 0;
}

```

執行結果：

```
% mpicc hello.c

% cat nodefile
node1
node2

% mpirun -np 1 -hostfile nodefile a.out（由1節點來執行）
Hello World from node1

% mpirun -np 2 -hostfile nodefile a.out（由2節點來執行）
Hello World from node1
Hello World from node2

```

實現
--

* Open MPI－ 是自由軟件和開放源碼實現。 走鵑（2008年6月-2009年11月TOP500第一快的超級電腦）及京（2011年6月至今第一快的超級電腦）也使用Open MPI。
* Intel MPI－Intel基於開放源碼的MPICH2與MVAPICH2研發成的MPI。
* Platform MPI－Platform公司收購Scali MPI及HP MPI，研發成Platform MPI。

参考文献
----

1. ↑ .  [2011-04-10]. （原始内容存档于2006-07-02）.
2. ↑  Jeff Squyres.  (PDF). Open MPI.  [2008-11-22]. （原始内容存档 (PDF)于2021-02-23）.
3. ↑   (PDF). Fujitsu.  [2011-06-24]. （原始内容存档 (PDF)于2020-07-02）.
4. ↑ . 思科系統.  [2011-06-24]. （原始内容存档于2011-06-28）.
5. ↑ .  [2011-04-10]. （原始内容存档于2011-03-12）.
6. ↑ .  [2011-04-10]. （原始内容存档于2011-07-11）.

外部連結
----

* （英文）訊息傳遞介面 （页面存档备份，存于）
* （英文）Open MPI內部結構（The Architecture of Open Source Applications, Volume II - ISBN 9781105571817）


|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * 
* 论
* 编
并行计算 |
| --- |
|  |
| 概论 | 
* 并发计算
* 分布式计算
* 并行计算
* 大规模并行处理机
* 雲端運算
* 高性能计算
* 多元處理
* 大規模多核心處理器（英语：）
* GPGPU
* 计算机网络
* Systolic array（英语：）

 |
|  |
| 层级 | 
* 位元
* 指令
* 线程
* 任务
* 数据
* 内存
* 循环（英语：）
* 流水线

 |
|  |
| 多线程 | 
* 时间（英语：）
* 同时多线程（SMT）
* 投机（英语：）（SpMT）
* 抢占式
* 协作
* 集群多线程（CMT）
* 硬件侦测

 |
|  |
| 理论 | 
* PRAM模型
* 并行算法分析（英语：）
* 阿姆达尔定律
* Gustafson's law（英语：）
* Cost efficiency（英语：）
* Karp–Flatt metric（英语：）
* 减速（英语：）
* 加速比

 |
|  |
| 元素 | 
* 行程
* 线程
* 纖程
* 指令窗口（英语：）

 |
|  |
| 协调 | 
* 多元處理
* 内存一致性（英语：）
* 快取一致性
* 高速缓存失效（英语：）
* 屏障
* 同步
* 应用程序检查点（英语：）

 |
|  |
| 编程 | 
* 串流處理
* 数据流处理（英语：）
* 模型
	+ 隐式并行（英语：）
	+ 显式并行（英语：）
	+ 并发性
* 非阻塞算法（英语：）

 |
|  |
| 硬件 | 
* 費林分類法
	+ 單指令流單數據流
	+ 单指令流多数据流
	+ 单指令多线程（英语：）（SIMT）
	+ 多指令流單數據流
	+ 多指令流多数据流
* 数据流架构（英语：）
* 指令管線化
* 超純量
* 并行向量处理机
* 多处理器
	+ 对称
	+ 非对称
* 内存
	+ 共享
	+ 分布式内存（英语：）
	+ 分布式共享
	+ UMA
	+ NUMA
	+ COMA（英语：）
* 大规模并行处理机
* 计算机集群
* 网格计算

 |
|  |
| API | 
* Ateji PX（英语：）
* Boost.Thread
* Charm++（英语：）
* Cilk
* Coarray Fortran（英语：）
* CUDA
* Dryad（英语：）
* C++ AMP
* Global Arrays（英语：）
* MPI
* OpenMP
* OpenCL
* HMPP开放标准
* OpenACC
* TPL（英语：）
* PLINQ（英语：）
* 并行虚拟机（英语：）（PVM）
* POSIX线程
* RaftLib（英语：）
* UPC
* TBB（英语：）

 |
|  |
| 问题 | 
* 软件闭锁（英语：）
* 可缩放性
* 競爭危害
* 死锁
* 活锁
* 饥饿（英语：）
* 确定性算法
* 并行变慢（英语：）

 |
|  |
| 
* 分类 分類：并行计算
* 维基共享资源上的相關多媒體資源：訊息傳遞介面

 |

 |