HPC——MPI

news/2025/10/14 15:22:14/文章来源:https://www.cnblogs.com/karl-python/p/19140327

HPC——MPI

MPI(Message Passing Interface,消息传递接口)是并行计算领域广泛应用的一个标准化消息传递系统,它允许程序员在分布式内存系统(如计算机集群)上编写并行程序。简单来说,MPI提供了一套标准化的函数库,使得运行在不同计算节点上的进程能够通过相互发送和接收消息来协同工作,从而共同解决一个大规模的计算问题

核心概念

说明

类比理解

​进程​

并行程序的基本执行单位,每个进程拥有独立的地址空间

交响乐团中的每一位乐手。

​通信域​

定义了一组可以相互通信的进程及其上下文,最常用的是包含所有进程的 MPI_COMM_WORLD

指挥家管理的整个乐团,规定了乐手们的协作范围。

​秩​

在通信域内唯一标识一个进程的整型编号(从0开始)

每位乐手在乐团中的固定编号。

​消息​

进程间传递的数据单元,包含数据内容、发送/接收者地址、数据类型和标签等信息

乐手之间传递的乐谱片段。

 

 

 

 

 

 

 

 

⚙️ MPI的核心工作机制

MPI程序通常遵循一个标准的执行流程,并支持多种通信模式来适应不同的需求。

一个典型的MPI程序结构如下:

#include <mpi.h>int main(int argc, char** argv) {MPI_Init(&argc, &argv); // 初始化MPI环境int rank, size;MPI_Comm_rank(MPI_COMM_WORLD, &rank); // 获取当前进程的秩MPI_Comm_size(MPI_COMM_WORLD, &size); // 获取通信域内的进程总数// ... 这里是并行计算的核心逻辑,进程间通过消息传递协同工作
MPI_Finalize(); // 清理并终止MPI环境return 0;
}

 

 

📊 MPI 与 OpenMP 的简单对比

为了更好地理解MPI的定位,可以将其与之前讨论过的OpenMP进行对比:

特性

MPI

OpenMP

​内存模型​

分布式内存

共享内存

​并行粒度​

进程级,适用于多节点集群

线程级,适用于单节点多核

​编程复杂度​

相对较高,需显式管理通信

相对较低,通过编译指令实现并行

​可扩展性​

极强,可扩展至数千节点

受单节点资源限制

​典型场景​

大规模科学计算、分布式数据处理

多核CPU上的循环并行化、任务并行

 

 

 

 

 

 

 

 

 

 

值得一提的是,在现代混合编程模型中,MPI常与OpenMP结合使用(MPI+OpenMP),用MPI处理节点间的粗粒度并行,用OpenMP挖掘节点内的细粒度并行,从而充分发挥集群的整体计算能力

 

🔧 如何开始使用MPI

  1. ​环境搭建​:常见的MPI实现包括开源的Open MPI和MPICH。在Ubuntu系统上,可以通过包管理器安装Open MPI

    • sudo apt-get install openmpi-bin libopenmpi-dev

       

  2. ​编译与运行​:使用MPI提供的包装编译器(如mpicc用于C,mpic++用于C++)来编译程序,然后使用mpirun命令指定进程数来运行
    • mpic++ -o my_mpi_program my_mpi_program.cpp
      mpirun -np 4 ./my_mpi_program  # 使用4个进程运行程序

       

 

🔧 新节点加入MPI集群的核心步骤

步骤

核心任务

关键命令/操作示例

​1. 网络配置​

确保新节点与原有集群在同一局域网,IP固定,并更新所有节点的/etc/hosts文件,实现主机名解析。

sudo vim /etc/hosts
添加:192.168.1.20 new-node

​2. SSH免密登录​

在主节点生成SSH密钥对,并将公钥分发到新节点,实现集群节点间的无缝互信访问。

ssh-keygen -t rsa
ssh-copy-id mpiuser@new-node

​3. 同步MPI环境​

确保新节点安装与集群版本完全一致的MPI实现(如OpenMPI或MPICH)。

scp -r /usr/local/mpich mpiuser@new-node:/usr/local/

​4. 配置共享目录 (可选)​​

若使用NFS,需在主节点导出共享目录,并在新节点上挂载,确保程序路径一致。

主节点/etc/exports
/home/mpiuser/shared new-node(rw,sync)

​5. 更新主机文件​

编辑主节点的hostfile,指明新节点的主机名及其可用的处理器“槽位”(slots)数。

vim hostfile
添加:new-node slots=4

​6. 验证集群​

使用简单MPI程序测试新节点能否正常加入并参与计算。

mpirun -np 8 --hostfile hostfile ./mpi_hello

 

 

 

 

 

 

 

 

 

 

 

 

 

 

在MPI集群中配置共享目录,主要是通过NFS(网络文件系统)​​ 实现

步骤

核心任务

关键命令/操作示例

​1. 选择NFS服务器​

指定集群中的一台机器作为NFS服务器,存放共享数据。

通常选择主节点(Master)作为服务器。

​2. 安装NFS软件包​

在服务器端和所有客户端节点安装必要的NFS软件。

sudo apt-get install nfs-kernel-server(服务器)
sudo apt-get install nfs-common(客户端)

​3. 配置NFS服务器​

指定哪个目录共享给哪些客户端节点及其访问权限。

编辑 /etc/exports,添加:
/home/dan/share node1(rw,sync) node2(rw,sync)

​4. 启动NFS服务​

在服务器端启动NFS服务并使配置生效。

sudo systemctl restart nfs-kernel-server

​5. 客户端挂载目录​

在各个客户端节点上将服务器共享的目录挂载到本地路径。

sudo mount -t nfs master:/home/dan/share /home/dan/share

​6. 测试与验证​

验证共享目录是否在所有节点上可正常读写。

在服务器共享目录创建文件,检查客户端是否可见

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/936869.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中文语音识别不建议使用VOSK

40几MB的vosk-model-small-cn-0.3,识别率极低,识别速度极慢。 1.3GB的vosk-model-cn-0.22没试,想必速度不会更快。 网站上Models里只有vosk-model-small-cn-0.22,没有0.3 vosk-transcriber --list-models vosk-tra…

213123123123123

321312312312312312312312312

VSCode插件开发的注意点 - Erica

VSCode插件开发的注意点开发调试的时候是在这个地方添加向新打开的调试窗口的参数,但是经过实践发现并不能打开当前正在开发的文件夹。 通过使用"${workspaceFolder}/src",能成功的在新的调试窗口(或者叫…

时序数据库 IoTDB 集成 DataGrip,支撑跨模态多库融合管理

多源异构数据融合,轻松搭建跨库管理解决方案!物联网工业数据管理场景中,尽管时序数据占主要部分,但企业往往需要实现跨维度关联分析,多源异构数据的关联融合管理对数据库提出了更高要求。 国产原生时序数据库 IoT…

Sql Server安装报错“服务没有及时响应启动或控制请求”

最近由于电脑环境有问题重装了下电脑系统,重装系统后在安装sql server的时候,前面都没有问题 除了有个防火墙警告,看到“上面提示操作完成。已通过4。失败0。警告1。已跳过0”,警告警告呗,反正又不是失败,总体还…

题解:CF1830E Bully Sort

题目: 每 bully swap \(i,j\) 会使得 \(\sum_i \left | i-p_i \right |\) 减少 \((2j-2i)\),使得逆序对数减少 \((2j-2i-1)\), 又因为一个数始终单向移动,所以 bully swap 次数为 \((\sum_i \left | i-p_i \right …

斑马日记2025.10.10

今天加入了概数部分的学习,然后参加了蓝桥杯的新生赛,有一些感悟和收获,现在分享一下。 蓝桥杯新生赛中,遇到的问题: 1,对于循环部分的运用不够精辟,有些题目特别是简单题,对时间复杂度的要求很苛刻,所以有些…

单片机概念

单片机概念1.单片微机型别名:单片机,微控制器,适用于控制领域。 2.单片机与微型计算机有什么不同? 微型计算机集多块芯片通过电路板上总线连成一体的完整计算机系统。 单片机是集微型计算机主要功能于同一块芯片上…

斑马日记2025.10.12

今天继续进行了面向对象部分的学习,然后做了一道关于字符串部分的题目,收获了很多,现在分享一下: 关于面向对象部分,今天学了class和struct的区别以及属性私有化: 1.在class和struct的区别方面,首先是在访问权限…

Androidify:基于Gemini AI的安卓机器人定制应用

Androidify是一个开源AI驱动应用,使用Gemini API和Jetpack Compose技术,让用户通过拍照生成个性化安卓机器人形象,支持表盘定制和多平台部署。Androidify:AI驱动的安卓机器人定制应用 项目描述 Androidify是一个基…

入门指南:使用 Playwright MCP Server 为你的 AI Agent 赋予浏览器自动化能力

你是否曾经希望你的AI助手不仅能回答问题,还能真正帮你操作网页——自动填写表单、抓取数据、执行重复性任务?现在,通过 Playwright MCP Server,这一切都成为了可能。 本文将带你从零开始,一步步将浏览器自动化能…

实战教程:构建能交互网页的 AI 助手——基于 Playwright MCP 的完整项目

项目概述:打造智能网页操作助手 在本教程中,我们将构建一个完整的、能够实际交互网页的AI助手。这个助手不仅能理解自然语言指令,还能通过 Playwright MCP 执行复杂的网页操作。我们将从零开始,搭建一个功能完备的…

popcount 题

题目链接题意 定义序列 $a$ 满足 $a_0=1,a_i=a_{i-1}+\text{popc}(a_{i-1})$,其中 $\text{popc}$ 表示二进制下 $1$ 的个数。 给定 \(n\),求出最小的 \(i\) 满足 \(a_i=n\),或报告不存在。 \[1\le n\le 10^{18} \]…

2025 年国内卷板机源头厂家最新推荐排行榜:涵盖不锈钢 / 大型 / 锥形 / 数控等多类型设备,助力企业精准采购优质设备

在工业制造快速发展的当下,卷板机作为金属板材加工的核心设备,广泛应用于机械、汽车、船舶、容器等众多领域,其品质与性能直接关系到企业的生产效率和产品质量。然而,当前卷板机市场厂家数量繁杂,既有技术领先、品…

达梦开启awr功能报错:[-7160]:Object [DBMS_WORKLOAD_REPOSITORY_DATA_LOW] is invalid

达梦开启awr功能报错:[-7160]:Object [DBMS_WORKLOAD_REPOSITORY_DATA_LOW] is invalid版本如下:14:45:26 SYSDBA@xchz(140012390767224)> SELECT id_code, t.* FROM v$version t;ID_CODE …

ceph日常管理

1.查看ceph mgr状态 systemctl status ceph-mgr@master.servicesystemctl status ceph-mgr@node1.servicesystemctl status ceph-mgr@node2.service[root@master ~]# ceph mgr services

mysql5.7 AUTO_INCREMENT 问题

SELECT @@global.sql_mode, @@session.sql_mode; SET SESSION sql_mode=CONCAT(@@sql_mode,,NO_AUTO_VALUE_ON_ZERO); NO_AUTO_VALUE_ON_ZERO 影响AUTO_INCREMENT 列的处理。NULL通常,您通过插入或 来为该列生成下一个…

Flash游戏浏览器

Flash游戏浏览器是Flash中国官方推出的一款综合性浏览器,专为畅玩Flash网页游戏而设计。它自带Adobe Flash Player插件,采用CEF浏览器内核,能够顺畅运行Flash内容,无需担心兼容性问题和播放报错情况。该浏览器具备…

vi/vim 的使用及 CentOS 静态网络配置并链接 Xshell

vi/vim 的使用及 CentOS 静态网络配置并链接 Xshell vi/vim 基础 vi 与 vim 的区别 vi 是 Linux 系统原生的文本编辑工具,可以简单理解为 vim 是 vi 的升级版,两者核心功能一致,主要差异如下:对比维度 vi vim颜色显…

102500410 杜惟真 10月14日作业

下载完成:代码截图: (记得在每行代码后加入分号!)运行界面:这份作业属于的课程:https://edu.cnblogs.com/campus/fzu/gjyycx/homework/13558 这份作业的要求:https://edu.cnblogs.com/campus/fzu/gjyycx/homew…