OpenMPI入门

  1. MPI
  2. 基于消息传递的并行编程
  3. 6个基本函数
  4. MPI HelloWorld
  5. 点对点通信
  6. 集群通信

MPI即Message Passing Interface、 消息传递Message Passing是进程间通信的一种方式。回顾一下操作系统的知识,进程间通信IPC主要有两种模型,一种是共享内存shared memory。另外一种便是消息传递Message Passing.

1.MPI
2.基于消息传递的并行编程
3.6个基本函数
4.MPI HelloWorld
5.点对点通信
6.集群通信

MPI

  • MPI是一个消息传递接口标准,(而不是指对它的实现)。
  • 有很多MPI的实现,MPICH,MVAPICH,OpenMP,Intel MPI等。
  • MPI支持对C/C++,和Fortran语言的绑定
  • MPI已语言独立的形式存在,可以运行在不同的操作系统和硬件平台上。

OpenMPI是MPI的一个开源实现,支持标准MPI2.2.
使用OpenMPI我们可以方便的编写基于消息传递的并行程序。

基于消息传递的并行编程

在基于消息传递的并行编程模型中,每个进程都有一个独立的地址空间,一个进程不能直接访问其他进程中的数据。使用消息传递来实现进程间的通信。
用户需要显式的通过发送和接受消息来实现处理器之间的数据交换。 这种编程方式适用于MPP,Cluster.
使用消息传递的开销比较大,因此它主要用来开发大粒度和粗粒度的并行性。

对于一个问题进行分解,可以有两种方式,一种是域分解,一种是函数分解。所谓域分解就是讲问题的区域分为若干较小的区域,然后进行并行求解。 另外一种方式,函数求解又叫做功能分解。即使将一个大问题分解为若干子问题,然后对其并行求解。
对应于这两种形式,就是所谓的SPMD,MPMD两种编程模式。

  • 有SPMD,MPMD两种模式
  • 程序员需要指定有哪些进程,不同进程间要发送哪些消息,发送发与接收方是谁?
  • MPI适用于分布式系统

问题

什么是SPMD?MPMD?
为什么会有SPMD,MPMD适用于什么情况?
MPI适合什么类型的体系结构?  SMP,MPP,DSM,Cluster?
OpenMPI OpenMP 区别?

6个基本函数

OpenMPI提供了数以百计的API接口,但是完成一个基本的基于MPI的并行程序,一般只需要利用的其中六个,用这六个基本函数就可以求解很多问题。
包括启动与结束MPI环境,识别进程以及发送接收消息。

1. MPI_Init()
2. MPI_Comm_size()
3. MPI_COmm_rank()
4. MPI_Send()
5. MPI_Recv()
6. MPI_Finalize()

问题

什么是通信域?
什么是进程?和操作系统中的进程有什么区别?
通信域与进程间关系?
为什么要有消息标签?
消息如何打包Pack,解包Unpack?
MPI_Status?

MPI HelloWorld

不会Fortran,只会C。在此只介绍如何用c来写mpi程序。
关于如何安装mpi,此处略去。
欲使用MPI编写并行程序,必须将头文件mpi.h包含进去。

#include<mpi.h>  
#include<stdio.h>
int main(int argc, char * argv[])  
{  
    int rank,size;  
    MPI_Init(&argc,&argv);  
    MPI_Comm_rank(MPI_COMM_WORLD,&rank);  
    MPI_Comm_size(MPI_COMM_WORLD,&size);  
    printf("Hello world from process %d of%d\n",rank,size);  
    MPI_Finalize();  
    return 0;  
}     

点对点通信

通信机制

  • 阻塞通信机制
  • 非阻塞通信机制

通信模式

  • 缓冲
  • 同步
  • 标准
  • 就绪
通信模式(Communication Mode)指的是缓冲管理,以及发送方和接收方之间的同步方式

不同通信模式和不同通信机制的结合,便 产生了非常丰富的点对点通信函数

发送方:
(阻塞, 非阻塞) × (缓冲,同步,标准,就绪)
共有8中发送方式

接收方有阻塞接收,非阻塞接收两种方式。

问题

什么是阻塞?什么是非阻塞?
缓冲,同步,标准,就绪的含义?

集群通信

群集通信(Collective Communications)是一个进 程组中的所有进程都参加的全局通信操作。

群集通信实现三个功能:通信、聚集和同步

  • 通信功能主要完成组内数据的传输
  • 聚集功能在通信的基础上对给定的数据完成一定的操 作
  • 同步功能实现组内所有进程在执行进度上取得一致

群集通信,按照通信方向的不同,又可以分为三 种:一对多通信,多对一通信和多对多通信。

  • 对多通信:一个进程向其它所有的进程发送消息, 这个负责发送消息的进程叫做Root进程。
  • 多对一通信:一个进程负责从其它所有的进程接收消 息,这个接收的进程也叫做Root进程。
  • 多对多通信:每一个进程都向其它所有的进程发送或 者接收消息。

具体操作?
含义?
例子?

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 rat_racer@qq.com

×

喜欢就点赞,疼爱就打赏