MPI——简介

在使用分布式内存模型编程的并行程序中,MPI是一个标准和可移植的通信结构。MPI即为并行通信提供丰富的函数接口,也为并行文件I/O访问等提供函数接口。

MPI也支持多程序多数据(MPMD)编程模型,MPI库函数通过CFortan语言实现。MPI指由函数名、参数、语义构成的专门的函数接口,而非特定的函数实现。

事实上,存在着几种使用不同并行编程范式的并行机(并行计算、分布式计算)抽象模型

  1. 向量超级计算机,基于单指令多数据(SIMD)编程模型,使用基于流水线的操作来优化代码
  2. 多核计算机 具有共享内存并采用多线程编程模型,所有线程都可以访问共享内存
  3. 计算机集群 由具有分布式内存的高速网络互连的多计算机组成

历史

1992年,人们开始尝试为消息传递定义一种独立和标准化的接口。当时,许多应用程序编程接口是不同且无法移植的,例如计算机厂商提供的编程接口(Intel NX、IBM EUI、Thinking Machines CMMD、nCUBE)和其他研究库(PVM、p4、Chameleon、Zipcode)。采用上述编程接口开发的应用程序无法在不同的机器上运行或者高效运行。如果一家计算机厂家倒闭,基于该厂家提供的编程接口开发的应用程序将无法运行。应用程序编程接口的多样性阻碍了应用程序开发。因此,需要人们为应用程序开发定义一种独立和标准化的接口。

1994年,MPI 发布了第一个版本(MPI-1)。它包含基本的消息传递特性,例如点对点通信、聚合通信、数据类型和非阻塞式通信。1997年,MPI论坛发布了MPI的第二个主要版本(MPI-2)。 MPI-2对MPI-1进行了扩展,增加了单边通信、并行I/O和动态进程等特性。
2012年,发布了MPI的第三个主要版本(MPI-3)。MPI-3 包含非阻塞聚合通信、相邻聚合通信等新特性,并对单边通信接口进行了大量扩展。

并行编程模型、线程和进程

在CPU上,只有一个当前进程在执行,而其他进程被阻塞(暂停或等待唤醒),并且等待CPU上执行。任务调度程序的作用就是把进程动态分配给CPU。而多核架构产生了允许并发的多线程编程范式。分配给进程的资源在不同线程之间的共享的,并且至少有一个线程应当具有主(main)调用函数

  • 同一进程的线程共享相同的内存区域,因此即可以访问内存中的数据区域,也能够访问其中的代码区域,自然也可以很容易地访问同一进程的线程之间的数据。但在同时访问内存时也会产生一些困难,最坏的情况下,它会导致系统的崩溃。并行随机存取机模型(Parallel Random Access Machine,PRAM),在PRAM模型中,我们将在同时对本地内存进行读写操作可能发生的各种冲突。分为三类:互斥读互斥写(Exclusive Read Exclusive Write sub-model,EREW)、同时读互斥写(Concurrent Read Exclusive Write,CREW)和同时读同时写(Concurrent Read Concurrent Write,CRCW)
  • 进程和线程时不同的,因为线程有自己的非重叠的内存区域。进程之间的通信必须谨慎执行,特别是使用MPI标准时。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值