目录

1 MPI的基础概念及历史

1.1 MPI的概念

1.2 MPI的历史

2 Ubuntu基础编译环境配置

2.1 更新软件包列表

2.2 配置基础编译环境

3 MPICH安装

3.1 什么是MPICH

3.2 MPICH的安装

4 文本编辑工具VIM

4.1 VIM简单介绍

4.2 VIM的下载与安装

5 第一个MPI程序

6 MPI程序的编译与运行

6.1 MPI程序的编译

6.2 MPI程序的运行


1 MPI的基础概念及历史

1.1 MPI的概念

MPI,全称Message Passing Interface(消息传递接口),是业界定义的一种消息传递标准,用于编写并行计算的程序,广泛应用于高性能计算领域。

MPI标准定义了库函数核心的基本语法和语义,在C, C++和Fortran语言中也可以写出具有消息传递功能的程序。

MPI具有以下三个目标:

  • 高性能
  • 可伸缩性
  • 可移植性

1.2 MPI的历史

在 90 年代之前,程序员可没我们这么幸运。对于不同的计算架构写并发程序是一件困难而且冗长的事情。当时,很多软件库可以帮助写并发程序,但是没有一个大家都接受的标准来做这个事情。

在当时,大多数的并发程序只出现在科学和研究的领域。最广为接受的模型就是消息传递模型。什么是消息传递模型?它其实只是指程序通过在进程间传递消息(消息可以理解成带有一些信息和数据的一个数据结构)来完成某些任务。在实践中,并发程序用这个模型去实现特别容易。举例来说,主进程(master process)可以通过对从进程(slave process)发送一个描述工作的消息来把这个工作分配给它。另一个例子就是一个并发的排序程序可以在当前进程中对当前进程可见的(我们称作本地的,locally)数据进行排序,然后把排好序的数据发送的邻居进程上面来进行合并的操作。几乎所有的并行程序可以使用消息传递模型来描述。

以下是MPI标准诞生的大事表。

  • 1991年夏天,一组研究员于奥地利进行山中修养时,进行了创建信息传递接口的讨论。
  • 1992年4月29-30号,于弗吉尼亚威廉姆斯伯格召开了一次关于分布式内存环境下的信息传递标准设置研讨会。在这次研讨会上讨论了对标准信息传递接口至关重要的一些基本特征,并创建了一个继续标准化此过程的工作组。
  • 1992年11月,工作组提出了一些初始草稿提议,后被称为MPI-1。
  • 1992年11月,一个MPI的工作组会议在Minneapolis召开,他们决定了为此标准化过程创建一个更正式的标注。
  • 1993年的头九个月,MPI工作组每6个星期见面一次。
  • 1993年11月,MPI标准草稿在超级计算机会议上提出。在经过一阵子的公众论议后,MPI修改了一些部分。
  • 1994年6月,发布了MPI1.0版本。这些会议和邮件共同创建了MPI论坛,此论坛后来向所有高性能计算的成员开放。
  • 1997年7月,对原来的MPI作了重大扩充的基础上又推出了MPI的扩充部分MPI-2 而把原来的MPI各种版本称为MPI-1。MPI-2的扩充很多,但主要是三个方面:并行I/O,远程存储访问和动态进程管理。

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

2 Ubuntu基础编译环境配置

2.1 更新软件包列表

起初GNU/Linux系统中,用户必须通过源码,自己编译他们想使用的每一个程序。在Debian出现之后,人们认为有必要在系统中添加一种机制用来管理安装在计算机上的软件包,人们将这套系统称为dpkg。不久之后,redhat也开始着手建立自己的包管理系统rpm。

Linux的创造者们很快又陷入了新的窘境。他们希望通过一种快捷、实用而且高效的方式来安装软件包。这些软件包可以自动处理相互之间的依赖关系,并且在升级过程中维护他们的配置文件。Debian又一次充当了开路先锋的角色。它首创了APT(Advanced Packaging Tool)。

apt是一个很完整和先进的软件包管理程序,使用它可以让你既简单又准确地找到你要的的软件包, 安装或卸载都很简洁。它还可以让你的所有软件都更新到最新状态,而且也可以用来对你的Debian系统进行升级。

在下载与安装编译环境之前,为了使软件包保持最新的状态,需要在命令行中键入命令sudo apt-get update,从源服务器下载最新的软件包列表。

2.2 配置基础编译环境

为了正常编译MPI代码,需要安装C, C++与Fortran的编译环境。

Ubuntu缺省情况下,并没有提供这些语言的编译环境,因此需要手动安装。如果单独安装这些编译环境非常麻烦。幸运的是,build-essential工具提供了许多与编译相关的软件包,包括gcc/g++/gfortran等编译器、libc6-dev等必要的库与其他工具。于是,我们只需要通过包管理器安装build-essential即可。

apt-get命令的 -y 选项默认安装过程中同意所有的默认选择。
sudo apt-get install -y build-essential

下载与安装完成后,可键入下面的命令观察gcc版本信息。
gcc -v

3 MPICH安装

3.1 什么是MPICH

MPICH是MPI标准的一种重要的实现,可以免费从网上下载。MPICH的开发与MPI规范的制订是同步进行的,因此MPICH最能反映MPI的变化和发展。

MPICH的开发主要是由Argonne National Laboratory和Mississippi State University共同完成的,在这一过程中IBM也做出了自己的贡献,但是MPI规范的标准化工作是由MPI论坛完成的。MPICH是MPI最流行的非专利实现,由Argonne国家实验室和密西西比州立大学联合开发,具有更好的可移植性,现阶段多流行的是MPICH2。

下表是不同语言对应的编译命令。

3.2 MPICH的安装

软件包中包含了mpich,可以直接通过apt-get下载安装。

sudo apt-get install -y mpich

观察mpicc版本信息
mpicc -v

4 文本编辑工具VIM

4.1 VIM简单介绍

Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。

基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode)输入模式(Insert mode)和底线命令模式(Last line mode)。 这三种模式的作用分别是:
命令模式:用户刚刚启动 vi/vim,便进入了命令模式。此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。
输入模式:在命令模式下按下i就进入了输入模式。可按esc键,退出输入模式,切换到命令模式。
底线命令模式:在命令模式下按下:(英文冒号)就进入了底线命令模式。

简单的说,我们可以将这三个模式抽象成下图。

4.2 VIM的下载与安装

通过apt-get包管理器下载文本编辑工具vim。
sudo apt-get install -y vim

5 第一个MPI程序

切换到用户家目录
cd ~

利用vim新建一份代码文件
vim mpi.c

vim进入后默认为控制模式。需要按字母i进入编辑模式,写入MPI程序代码。

#include <mpi.h>
#include <stdio.h>
int main(int argc, char **argv)
{ MPI_Init(&argc, &argv);printf("Hello World!\n");MPI_Finalize();return 0;
}

esc键进入控制模式,输入:wq保存并退出文件。

6 MPI程序的编译与运行

6.1 MPI程序的编译

利用 mpicc 命令编译MPI代码文件。mpicc 是编译并链接用C编写的MPI程序的命令。
mpicc mpi.c -o mpi.o

6.2 MPI程序的运行

利用 mpirun 命令运行程序。其中 -np 选项指定处理器数目。mpirun 是MPI程序的启动脚本,它可以简化作业的启动程序,并且尽可能把不同特征屏蔽掉,提供给用户一个通用的MPI并行机的概念。
mpirun -np 8 ./mpi.o

Ubuntu上MPI编程环境部署相关推荐

  1. Windows10系统下MPI编程环境配置(超级详细)

    Windows10系统下MPI编程环境配置(超级详细) 1.MS-MPI下载 进入官网下载MPI文件,下载地址: https://www.mpich.org/ 下拉到最底部,点击Microsoft W ...

  2. SAP(HANA+S/4)上云基础环境部署最佳实践

    简介:为提高客户服务水平及集团管理效率,客户选择了SAP解决方案.但是同时也对客户的IT基础设施提出了更多的要求.对此我们针对SAP上云基础设施选型.云原生产品.灾备方案设计,云上安全环境设计总结出了 ...

  3. CENTO OS上的网络安全工具(十八)ClickHouse及编程环境部署

    这篇其实去年就写好了,孰知就在12月31日那一天打进决赛圈,一躺,二过年,三休假,四加班,居然到了三个月以后,才有机会将它发出来-- 一年也就四个季度不是,实在是光阴荏苒,岁月蹉跎. 本来也打算给这个 ...

  4. 20分钟完成Mac上的 LNMP 环境部署,优雅·高效开发(Docker方式)

    一.前言 对于很多开发者来说,突然转到在 mac 系统开发,可能会非常难受,主要有以下几个原因 1.mac 上安装软件程序坑多,比如安装 PHP.Nginx,会存在很多使用 linux 或 windo ...

  5. Ubuntu 上 hi3531 交叉编译环境 arm-hisiv100nptl-linux 建设过程

    安装SDK 1.Hi3531 SDK包的位置     在"Hi3531_V100R001***/01.software/board"夹,你可以看到一个 Hi3531_SDK_Vx. ...

  6. centos7开放端口访问不了_基于TiUP cluster 在centos7系统上模拟生产环境部署TiDB数据库...

    概述 今天主要来体验下TiDB 最小的完整拓扑的集群,参照 TiUP 最小拓扑的一个 YAML 文件来部署 TiDB 集群,下面一起来看看吧~ 一.环境要求 最小规模的 TiDB 集群拓扑: 部署主机 ...

  7. 快速上手Ubuntu搭建Python编程环境

    #Ubuntu 14.04 LTS已经预装Python2/3,可以满足基本的编程需求. #让系统支持aptitude命令 sudo apt-get install aptitude -y #将系统升级 ...

  8. windows 10配置VS+MPI编程环境

    简述 参考了 https://www.cnblogs.com/shixiangwan/p/6626156.html 其实不改那个x64也是可以的,如果使用x86,就需要导入库的时候,选x86就好了.其 ...

  9. 在ubuntu上搭建开发环境9---Ubuntu删除ibus出现的问题及解决

    删除 ibus输入法: sudo apt-get install ibus 我们会遇到下面的问题 Ubuntu 14.04 系统设置很多选项消失. 其实遇到这个问题的一个最主要的原因是之前执行过卸载i ...

最新文章

  1. arduino蓝牙通讯代码_「Arduino」OLED屏使用教程,显示内容听谁的?我不管,听我的...
  2. python取消任务的方法_python-即使忽略CancelledError,如何取消任务执...
  3. 有关uploadifive的使用经验(转:http://www.cnblogs.com/itBscs/p/4781786.html )
  4. javascript和var之间的区别?
  5. grep 命令的 12 个实例
  6. libevent的两个服务端、客户端示例(C语言)
  7. 2020计算机二级office高级应用,2020计算机二级ms-office高级应用试题.docx
  8. 快捷操作之争【原创】
  9. ILSVRC-ImageNet历年竞赛冠军
  10. H.264中CBR VBR FIXQP
  11. fn键台式计算机在哪,电脑键盘上FN键的使用方法【图文】
  12. 用计算机求正有理数算术平方根的步骤,用计算器求算术平方根、用有理数估计算术平方根的大小.doc...
  13. 【locust】locust与jmeter性能对比
  14. 基于机智云平台的厨房智能监控系统
  15. 家用无线路由器WDS初始化失败解决方法
  16. mysql database alias_mysql小结——基础篇
  17. 【回眸】牛客网刷刷刷!嵌入式软件中也会遇到的嵌入式硬件,通讯,通讯协议专题(一)
  18. android钢琴软件和弦,‎App Store 上的“判断和弦以钢琴演奏 Piano Chord Judge”
  19. SSM+人才交流平台 毕业设计-附源码221022
  20. Flink SQL 核心解密 —— 提升吞吐的利器 MicroBatch

热门文章

  1. Monte Carlo Method
  2. 鼠标点击特效(富强,民主,文明,和谐,诚信,友善)
  3. 用SurfaceView绘制正弦曲线
  4. HTML5 极简的JS函数
  5. c语言出现了语法错误能编译吗,如何调试C程序的语法错误和逻辑错误
  6. STVD生成HEX格式文件
  7. 代码实现判断主机字节序(大端 or小端 )-- 面试题
  8. python脚本实现自动刷王者荣耀金币
  9. 接口自动化参数化(一)
  10. 如何增强云端医疗健康数据的隐私保护