初识MPI

来源:互联网 发布:tripmode for windows 编辑:程序博客网 时间:2024/06/07 03:51

如果对并行计算不清楚的同学可以参考我上篇博客,网上关于并行的文章有很多,务必弄清楚一些基本的概念,比如并发与并行的区别。在我上篇博客的末尾推荐了一篇文章,里面有目前主流计算框架的比较,这里我选择了MPI进行学习,MPI的优势这里不再赘述。

一、MPI简介

  1. MPI(Message Passing Interface )是1994年5月发布的一种消息传递接口。它实际上是一个消息传递函数库的标准说明,吸取了众多消息传递系统的优点,是目前国际上最流行的并行编程环境之一,尤其是分布式存储的可缩放并行计算机和工作站网络的一种编程范例。MPI具有许多优点:具有可移植性和易用性;有完备的异步通信功能;有正式和详细的精确定义,固而为并行软件产业的增长提供了必要的条件。
  2. 在基于MPI编程模型中,计算是由一个或多个彼此通过调用库函数进行消息收、发通信的进行所组成。在绝大部分MPI实现中,一组固定的进程在程序初始化时生成,一个处理器生成一个进程。这些进程可以执行相同或不同的程序(相应地称为SPMD或MPMD模式)。进程间地通信可以是点到点的,也可以是集合的。
  3. MPI只是为程序员提供一个并行环境库,程序员通过调用MPI的库程序来达到程序员所要达到的并行目的。MPI提供C语言接口、C++接口和Fortran语言接口。

简而言之,MPI是一个用于进程(进程和线程的区别搞清楚)间信息传递的并行编程接口标准,它定义了一组具有可移植性的编程接口。MPI是一种分布式内存编程,区别于共享内存编程,比如OpenMP,大家可以参考我的另一篇博客排序算法并行,其中我使用OpenMP进行加速。

二、MPICH+VS搭建个人环境

既然对MPI有了一定的了解,接下来就是怎么使用它。
MPICH是MPI标准的一种最重要的实现,可以免费从网上下载。MPICH的开发与MPI规范的制订是同步进行的,因此MPICH最能反映MPI的变化和发展。我们也可以选用OpenMPI进行开发,简单理解,MPICH和OpenMPI是高性能消息传递库,安装好后包括一系列的库文件、头文件以及可执行命令等等,我选择了MPICH。这里介绍windows下环境的搭建。

  • 安装MPICH:直接到官网下载相应的版本,直接安装。
  • 新建VS工程,在项目属性中添加包含目录和库目录,即MPICH安装之后的头文件目录和lib目录,在附加依赖项中加入msmpi.lib。不清楚的可以自行百度,解决一个问题的过程也是学习的过程。
  • 编写程序(网上有很多相关程序,可以选择简单的进行调试熟悉)。

    具体可以参考以下博客:搭建单机MPI并行环境

三、MPI函数学习及参考资源

关于MPI一些通信函数的介绍和例子网上有很多,这里我不打算具体介绍函数的定义、用法以及程序实例。就我目前理解,MPI(信息传递接口)主要特点是定义了一系列通信函数(点对点通信、集合通信),通过这些函数可以实现不同节点、不同进程的通信。比如一个复杂可拆分的任务或者多个并列的任务,可以将其放在不同节点、不同节点的不同进程上执行,中间结果可以通过通信函数进行传递,从而达到任务并行加速的目的。就像我上篇博客提到的,并行策略一般可分为数据并行和任务并行,至于选择哪种策略需要具体问题具体分析。在我后续的博客更新中我会介绍一些算法任务以及我对并行策略的理解,下面是我这段时间学习MPI用到的一些方法及资源
- 搜索关于MPI的一些教程,理解其他作者对MPI的看法,执行一些例子程序从而加深理解
- MPI函数的学习可以参考以下网页:MPI函数
- 到MPICH官网查看用户手册和开发者文档(包括详细的说明文档)
- GitHub上许多MPI项目,可以下载参考
- 可以加入一些开发者社区,里面有许多相似的问题和解决思路

四、总结

本篇博客对MPI进行了简要的介绍,对MPI感兴趣的可以在自己主机上安装MPICH进行一些函数的学习。另外,我给大家介绍了一些我学习的方法和参考的资源。MPI是分布式内存编程,所以下篇博客我会介绍MPI在Linux下分布式集群环境的搭建,将复杂的任务分配到集群的一个个节点上,这样才能真正体现并行的优势。

原创粉丝点击