mpi 简介

Message Passing Interface(MPI) 一 定义 MPI和Openmp是常用的应用在CPU上的并行化框架。 MPI是一个跨语言的通讯协议,用于编写并行计算机。支持点对点和广播。MPI的目标是高性能,大规模性,和可移植性。MPI在今天仍为高性能计算的主要模型。 特点: A partitioned address space 每个线程只能通过调用api去读取非本地数据。所有的交互(Non-local Memory)都需要协同进行... 阅读详情

摘要: 什么是MPI,如何用?什么样的人应该使用MPI?怎样从MPI的开源实现中来学习MPI的一些基本的东西。

消息传递接口(Message Passing Interface)
“MPI”这个词经常在和高性能计算相关的讨论中出现。有时候人们是喜爱的,有时候是蔑视的,而跟多的时候这是一个让疑惑的词。这篇文章会为经理和开发者提供一些关于MPI的基本的信息。

什么是MPI?
常常有人要我快速简要的说明一些什么是MPI。我通常都会强调如下几点:

MPI表示 Message Passing Interface
MPI是一个由专家、工业界和学术界组成的大型的委员会定义的一套标准
MPI的设计强烈的受到了几十年来的并行计算的“最佳实践”的影响
虽然MPI的实现都遵循“MPI 标准”,但是实际上现在有两个文档(MPI-1 和 MPI-2)
MPI的实现为并行应用提供消息传递或者相关的服务
有很多种MPI标准的的实现
本质: MPI标准定义了一组函数,使应用程序可以将消息从一个MPI进程送到另一个MPI进程。 MPI实际上定义了比消息传递更多的服务--但是,其核心和灵魂还是MPI进程间的消息传递。

上面第3点提到,实际上MPI标准有两个文档--MPI-1和MPI-2。MPI-1是MPI消息服务的核。它提供了MPI进程间消息传递的抽象语义和机制,同时提供了一些对通常并行计算的有帮助的附加特性。MPI-2提供了MPI-1没有提供的功能扩展,如动态进程控制、单边消息传递(one sided message passing)、和并行I/O等。

既然MPI仅仅是一套标准,它就没有和任何特别的计算机硬件和软件邦定。这样,任何平台都可以获得MPI标准的实现。比如,大多数并行计算硬件供应商都会提供和他们的硬件协调得最好的MPI实现。一些ISV(Independent Software Vendors---独立软件供应商)也会专门提供某些平台家族的相关MPI相关实现。也可以从一些研究者那里获得对于很多不同平台的开源和自由的MPI实现;这些实现一些提供了产品级的使用质量,而还有一些,则单单为了研究项目。

MPI实现
如上面所说,大多数并行计算硬件的供应商有和其硬件高度协调的MPI实现。特别的,提供商会提供其高带宽、低延时的消息传递相关硬件的配套软件。多数使用这些硬件的集群都会使用供应商提供的软件和硬件环境以获得最好的性能。而使用通用组件架构起来的集群对于 MPI实现就有了更多的选择。很多集群管理员会安装几套不同的MPI实现--以根据应用本身来选择MPI实现,而获得最好的性能。

两个值得注意的MPI实现是 LAM/MPI(来自 Indiana 大学)和 MPICH(来自Argonne国家实验室)。这两个MPI实现都有完整的MPI-1支持和部分支持MPI-2。这两个实现都可以在网上自由获得,并可以用于很多并行和集群环境。

本系列中的例子都以LAP/MPI为基础,以获得一致的命令语法,运行语义和输出。注意,既然 MPI是一套标准,这里提供的简单程序应该对任何MPI实现都是通用的。而不同的是不同MPI实现中程序启动的方式。

谁使用MPI?
两种主要人群使用MPI:并行应用开发者和终端用户。

并行应用开发者为了实现并行和消息传递会很频繁的调用MPI函数。他们在MPI实现的运行时环境编译、调试、运行他们的应用程序。MPI应用开发者应该对MPI标准定义的API、特定MPI 实现运行环境的语义、命令和功能最有发言权。

终端用户可以运行一个应用的时候可以并不用在意这个应用使用了MPI(或者这个应用是并行的)。这样,终端用户可能对特殊的MPI实现、命令和运行环境熟悉的程度都不一样。

基本MPI定义
MPI的很多方面都是为了描述如何进行“MPI进程”间的交互。MPI进程通常都是独立的进程,又或是线程。MPI标准没有定义执行模型;这样就留给具体的实现去定义并行应用如何运行,以及MPI进程到底用什么实现。被一起启动的MPI进程的集合才是一个MPI应用。

消息(Message)是从一个有定义的缓冲区(buffer)传送到一个有定义的接收缓冲区。有定义的缓冲区是指这个缓冲区是有类型的可,即typed buffer。你可以这样轻松的来想MPI的使用:整理这个整数的数组并且将其内容送入进程X。使用有定义的缓冲区可以使MPI实现有适应不同平台的能力,因为这样可以保留相应的字节序(endian ordering)。比如,从一台 Sun的工作站发送一个值为7的整数,相应的MPI实现就会自动转换数据的字节序,使得接收进程,即便是一个运行在Intel工作站上的进程,可以正确的接收。

MPI应用编程接口(API)是用三种语言定义的。这样,就可能使用这三种语言来使用MPI的功能。实际上,如果需要,还可以在一个应用中混合使用这三种语言(不过,数据结构需要在不同语言间转换)。常见到的情况是基于c的MPI应用需要调用Fortran的MPI数值库。

"Hello, World" MPI代码示例
下面的代码是一个简单的“Hello World”程序,虽然很简单,但是可以看到基本的MPI c API。

 1 #include
 2 #include
 3
 4 int main(int argc, char **argv) {
 5   int rank, size;
 6
 7   MPI_Init(&argv, &argv);
 8   MPI_Comm_size(MPI_COMM_WORLD, &size);
 9   MPI_Comm_rank(MPI_COMM_WORLD, &rank);
10   printf("Hello, world.  I am %d of %d./n", rank, size);
11   MPI_Finalize();
12   return 0;
13 }
最先用到MPI的是第二行的“#include”。这个头文件是MPI标准规定的,每个MPI实现都要提供。这个头问题必须提供用户MPI程序需要的所有必要的原型和外部变量声明。因此这个头文件需要被任何要使用MPI功能的程序包含。

第7行是我们第一个用到的MPI函数: MPI_INIT 。如其名字中暗含的 MPI_INIT 的主要目的是初始化MPI通信层。 MPI_INIT 必须在其他MPI函数调用前调用。

第8和第9行调用 MPI_COMM_SIZE 和 MPI_COMM_RANK,这两个函数都用到了同一个参数 MPI_COMM_WORLD 。 MPI_COMM_WORLD 是一个预定义的MPI通信字(communicator)----一个 MPI进程的有序集合,也是一个唯一的通信上下文。 MPI_COMM_WORLD 在 MPI_INIT 函数执行后被赋予意义。

函数 MPI_COMM_SIZE 和 MPI_COMM_RANK 查询 MPI_COMM_WORLD 以获得应用中MPI进程的总数并为这些MPI进程分别获得一个唯一的编号。获取的值放在变量 size 和 rank 中。这样,在第九行执行完毕后,MPI进程就知道应用一共有多少单独进程(peer process)和自己在 MPI_COMM_WORLD 中的唯一的标识(注意,rank的计数是从0开始,到size-1结束)。

最后, MPI_FINALIZE 执行MPI进程中MPI层的清理和关闭工作。在 MPI_FINALIZE 后面再调用 MPI函数都是不合法的。

编译程序
每个MPI实现都提供了不同的机制来编译MPI程序。一个实现提供“封装”好的编译器,可以加上 -I,-L和-l等参数,而其调用一个底层的编译器(如:cc,gcc,icc等。)对于“封装”好的编译器,可以简单的理解为将参数直接传给了底层的编译器。

LAM/MPI提供mpicc,mpiCC(对于大小写不敏感的文件系统则是mpic++),和mpif77,分别封装了c,c++和fortran。比如,在LAM/MPI中编译"hello world"程序可以用命令:

$ mpicc hello.c -o hello
我们鼓励用户使用封装好的编译器编译所有MPI应用,而不要直接调用底层的编译器。也建议用户检查MPI实现的环境变量。上面的程序的编译命令也适用于MPICH。

用LAM/MPI运行MPI应用
在并行MPI程序可以运行前,必须用命令lamboot启动LAM/MPI的运行环境。为了简单起见,下面的例子通过 rsh/ssh 在传统的Beowulf集群上运行,并设置为不需要交互的输入登录密码,否则运行下面的例子就会有些麻烦。

lamboot 需要有一个参数来指定一个模式文件(或者是主机文件--hostfile)来指定在哪些机器上启动运行时环境。最简单的模式文件是一个每行都有一个机器名(或者IP地址)的文本文件。下面是一个启动模式文件的例子。文件名为 myhosts

node1.example.com
node2.example.com
node3.example.com
node4.example.com
运行lamboot命令,并带上myhosts作为参数。

$ lamboot myhosts
当lamboot成功完成,LAM的运行时环境就在所有的myhosts文件中列出的节点机上运行起来了。 mpirun 命令用来启动MPI程序。其中 C 开关用来告诉LAM按照模式文件中指定的CPU个数,以每CPU一个MPI进程的方式启动MPI。如果CPU个数没有被指定--如例子中那样,则每个节点认为有一个CPU。如下面的命令启动4个MPI进程:

$ mpirun C hello
Hello, world.  I am 0 of 4.
Hello, world.  I am 1 of 4.
Hello, world.  I am 2 of 4.
Hello, world.  I am 3 of 4.
mpirun 和 lamboot 都支持很多命令行参数。可以通过参考各自的手册来了解更多的细节。

通过MPICH来运行MPI应用
通过MPICH来运行MPI程序和使用LAM/MPI有些不一样。确定你的执行路径和环境变量都设置正确。同样,你需要一个机器节点文件(这个文件和LAM的模式文件很像)看起来如下:

node1.example.com
node2.example.com
node3.example.com
node4.example.com
其次,你必须设定你的计算机使得登录节点机是不需要密码的(通常指的是从启动MPI应用的节点登录到其它节点是不需要密码的)。这样,运行一个编译好的MPI应用只需要编写一个机器节点文件(比如取名为 machines ),执行命令就如下:

mpirun -np 2 -machinefile machines hello
命令中 -np 2 指的是进程的个数。----译者注

你将会看到一个很上面使用LAM的例子中很相像的输出----可能在输出顺序上会有些不一样。你可能会在很多例子的输出中看到一些有趣的东西。我们会在以后的文章中讲到。

 

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/xwdok/archive/2006/04/12/660976.aspx

MPI并行计算第一课(2小时入门) MPI 全名叫 Message Passing Interface,即信息传递接口,作用是可以通过 MPI 可以在不同进程间传递消息,从而可以并行地处理任务,即进行。 阅读详情

相关推荐

MPI编程技术汇总

MPI(Message Passing Interface)是一种基于消息的并行编程模型与标准。 本文主要整理MPI编程相关的基本概念、基本框架等相关内容,同时结合笔者的工作经历,提供了MPI并行程序性能优化的一些经验。本文主要针对MPI并行程序开发的初学者。 一、软件层面 1.1 MPI编程模型 1.2 六个编程接口 接口 参数 说明 MPI_INIT MPI初始化 ....

国产CAx(CAD/CAE/CAM)软件研发 5026

MPI简介

MPI(Message Passing Interface)是消息传递并行程序设计的标准之一,当前通用的是MPI1.1规范。正在制定的MPI2.0规范除支持消息传递外,还支持MPI的I/O规范和进程管理规范。MPI正成为并行程序设计事实上的工业标准。  MPI的实现包括MPICH、LAM、IBM MPL等多个版本,最常用和稳定的是MPICH,曙光天潮系列的MPI以MPICH为基础进行了定制和优

yfw418的专栏 1896

MPI消息传递接口:LAM/MPI和MPICH安装与配置

随着科学技术的发展,并行计算已经普及到各个领域,人们对高性能计算的需要也越来越大。消息传递接口MPI作为全世界工业、科研机构以>及政符联合制定的一个标准,有力地促进了并行计算的发展。LAM/MPI和MPICH是目前使用最为广泛的免费MPI实现版本,它们都支持MPI 1标准 的全部内容,同时还支持部分MPI 2标准。本文介绍了这两种免费实现版本在Linux平台上的安装配置过程及方法。

mpi介绍

mpi mpi (message passing interface) 消息传递接口。mpi是一个为并行计算设计的通信协议。支持点对点和广播。MPI是一个信息传递应用程序接口,包括协议和和语义说明,他们指明其如何在各种实现中发挥其特性。MPI的目标是高性能,大规模性,和可移植性。MPI在今天仍为高性能计算的主要模型。与OpenMP并行程序不同,MPI是一种基于信息传递的并行编程技术。消息传递接口是...

xinming_365的博客 4085

OpenCV实战:从边缘检测到透视校正,打造智能文档扫描仪(Python代码详解)

本文详细介绍了如何使用OpenCV和Python从零开始构建一个智能文档扫描仪。通过边缘检测、透视校正和文字增强等核心技术,将倾斜、模糊的文档照片转换为清晰、方正的高质量扫描图像。文章提供了完整的代码实现和参数调优经验,帮助开发者打造稳定、高效的文档处理工具。

flower的专栏 694

FIFO Generate IP核使用——FIFO写操作详解及Status Flags页配置

本文介绍了FIFO的写操作及Status Flags页的配置信息。

u011565038的博客 2283

笔记——MPI简介

什么是MPI 1、MPI是一个库,而不是一门语言。 2、MPI是一种标准或规范的代表,而不特指某一个对它的具体实现。 3、MPI是一种消息传递编程模型,并成为这种编程模型的代表和事实上的标准。MPI虽然很庞大。但是它的最终目的是服务于进程间通信这一目标的。 目前主要的MPI实现 实现名称 研制单位 网址 Mpich Argonne and MSU http://www-unix.mcs.anl.gov/mpi/mpich Chimp Edinburgh ftp://ftp.epcc.ed

weixin_43850810的博客 1万+

YOLOv8中间特征层可视化

在通过观察这些特征,可以清楚地看到模型如何逐步将输入图像转化为有意义的表示。

weixin_45314480的博客 6889

1.初探MPI——MPI简介

Message Passing Interface (MPI) 是一种标准化的消息传递库接口规范。该标准是消息传递模型的一种标准,该标准大量运用在科学计算领域。详尽的介绍参看。MPI简介,消息传递模型rank 和 size初始化和结束使用MPI进行简单的hello world小程序编写。

qq_43067403的博客 4893

YOLOv11+BiFPN双向特征金字塔:全方位解析多尺度检测性能优化指南

飞书链接:https://ecn6838atsup.feishu.cn/wiki/EhRtwBe1CiqlSEkHGUwc5AP9nQe?购买即可解锁800+YOLO优化文章,并且还有海量深度学习复现项目,价格仅需两杯奶茶的钱,每日更新。函数中添加BiFPN的解析逻辑(找到。链接可用,不要多复制空格了。密码:946m22&8。

FJN110的博客 306

PCB_Project.PrjPcb 4 Not in version control

Altium Designer中PCB项目出现"NOT in version control"错误的解决方法:1. 禁用不需要的版本控制集成(DXP→Preferences→Version Control);2. 清理项目缓存(Projects面板右键→Clean Project);3. 检查文件读写权限;4. 如无效可新建项目重新添加文件。如需使用SVN版本控制,需正确配置SVN客户端路径,创建或连接SVN仓库,并将项目文件提交至版本控制系统。注意新建SVN仓库必须使用空目录,建议使用

whm128的博客 1593

MPI——简介

在使用分布式内存模型编程的并行程序中,MPI是一个标准和可移植的通信结构。MPI即为并行通信提供丰富的函数接口,也为并行文件I/O访问等提供函数接口。 MPI也支持多程序多数据(MPMD)编程模型,MPI库函数通过C和Fortan语言实现。MPI指由函数名、参数、语义构成的专门的函数接口,而非特定的函数实现。 事实上,存在着几种使用不同并行编程范式的并行机(并行计算、分布式计算)抽象模型 向量超...

绝尘 5490

Avalonia+ReactiveUI跨平台路由:从零到舞者,你的UI也能跨界起舞?

至此,你已掌握了Avalonia+ReactiveUI的跨平台路由精髓!你的应用现在能够优雅地在各个界面间穿梭,就像是在不同星球间跳跃的宇宙飞船。无论是初探跨平台开发的新手,还是经验丰富的老船长,这段旅程都能让你的UI编排技能更上一层楼。现在,是时候让世界见证你的跨平台魔术了!💫记住,每一次实践都是向着完美编舞迈进的一步,勇敢地在你的项目中尝试吧!如果在航行中遇到风暴,别忘了回来看看这篇指南,或者在评论区抛出你的救生圈,我们一起解决!🌊。

java专栏 1534

MPI编程简介

MPI编程简介 第三章 MPI编程  3.1 MPI简介 多线程是一种便捷的模型,其中每个线程都可以访问其它线程的存储空间。因此,这种模型只能在共享存储系统之间移植。一般来讲,并行机不一定在各处理器之间共享存储,当面向非共享存储系统开发并行程序时,程序的各部分之间通过来回传递消息的方式通信。要使得消息传递方式可移植,就需要采用标准的消息传递库。这就促成的消息传递接口(Message

Jason的专栏 1255

轨道平面系与轨道姿态系

文章摘要: 轨道平面系与轨道姿态系是航天任务中两个核心坐标系。轨道平面系(惯性系)以地心为原点,Z轴沿轨道角动量方向,用于轨道确定和机动规划;轨道姿态系(如LVLH系)以航天器质心为原点,Z轴指向地心,用于姿态控制和对地观测。两者通过旋转矩阵相互转换:轨道平面系基于轨道根数构建,保持静态;而LVLH系随轨道运动连续旋转。前者适用于全局轨道分析,后者支撑局部任务执行。理解二者的定义差异(原点、基准轴、惯性属性)及数学转换关系,对航天器姿态轨道控制系统的设计与操作至关重要。

ScilogyHunter的博客 85

OpenClaw三层记忆系统:让你的AI助理记住你的习惯,越用越顺手

对于更早的、已经移出滑动窗口的对话内容,我们没有直接丢弃,而是用大模型做摘要压缩,只保留核心信息,然后把摘要存入短期会话记忆的末尾,或者长期用户记忆。比如,10轮之前的对话内容,我们会压缩成:“用户之前查询了仓山万达店4月1日-4月7日的库存数据,对报表的要求是纯文本,不要Markdown”,既保留了核心信息,又不会占用太多上下文窗口。如果说Agent的执行链路是AI的“骨架”,工具调用体系是AI的“手脚”,那么记忆系统就是AI的“大脑”

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 378

mpi4py 简介

本文从本人简书博客同步过来 前言 计算机编程语言很多,但是适合高性能数值计算的语言却并不多,在高性能计算的项目中通常会使用到的语言有 Fortran、C、C++ 等,他们是传统的高性能计算机语言,这主要得益于它们的静态编译特性,使得有它们生成的机器代码,在底层上做了很多优化,能够充分发挥硬件的性能,但是这一特性也限制了它们的灵活性和易用性。一些动态的计算机语言在灵活性和易用性方面有着明显的优势...

自可乐的博客 3891

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

2. MPI简介

2. MPI简介 MPI其实就是一个“库”,共有上百个函数调用接口,但是最常用的只有6个,只需通过使用这6个函数就可以完成几乎所有的通信功能。这六个函数分别为:MPI_Init函数、MPI_Comm_size函数、MPI_Comm_size函数、MPI_Send函数、MPI_Recv函数、MPI_Finalize函数。 MPI是基于消息传递的并行计算模式,与 pthread,openMP等共...

蜗壳X儿 826

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【转】MPI简介

MPI简介   MPI(Message Passing Interface)是消息传递并行程序设计的标准之一,当前通用的是MPI1.1规范。正在制定的MPI2.0规范除支持消息传递外,还支持MPI的I/O规范和进程管理规范。MPI正成为并行程序设计事实上的工业标准。   MPI的实现包括MPICH、LAM、IBM MPL等多个版本,最常用和稳定的是MPICH,曙光天潮系列的MPI以MPICH为基

sinat_37114941的博客 2550
上一篇: 台式机上安装双系统(winXP+CentOS),从硬盘安装
下一篇: 在单机上安装、配置MPI 并行环境(Linux版)
control_tech
博客等级 码龄17年 53粉丝 32原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值