Linux下基于MPI的hello程序设计
Linux下基于MPI的hello程序设计
- 一、MPICH并行计算库安装
- 实验环境部署
- 创建SSH信任连接,实现免密钥互相连接
- node1安装MPICH 3.4
- 配置NFS
- 注意(一定要先看)
- 环境测试
- 二、HELLO WORLD并行程序设计
一、MPICH并行计算库安装
在Linux环境下安装MPICH执行环境,配置MPD.CONF, 完成实验室中临近机器间的并行配置。
概要:以机房小组成员的四台计算机为例,小组成员设置IP(假定是192.168.1.1~192.168.1.4),更改主机名为node01,node02,node03, node04。
实验环境部署

主机地址规划(根据自己的环境进行规划)
| 主机名 | IP地址 |
|---|---|
| node01 | 192.168.176.134/24 |
| node02 | 192.168.176.13524 |
| node03 | 192.168.176.136/24 |
| node04 | 192.168.176.137/24 |
配置主机名(以一台服务器配置为例)
sudo hostnamectl set-hostname node01
配置IP地址
使用DHCP自动获取,不需要配置
在下载与安装编译环境之前,为了使软件包保持最新的状态,需要在命令行中输入命令
sudo apt -y install update
创建SSH信任连接,实现免密钥互相连接
配置/etc/hosts文件(每台服务器都需要配置)
sudo vim /etc/hosts

安装openssh-server(每台服务器都需要配置)
sudo apt -y install openssh-server
生成用户的公钥和私钥(每台服务器都需要配置)
ssh-keygen

发布公钥信息
node01作为master节点,由master统一接收各从节点的公钥信息保存在本机的authorized_keys中,再由master将authorized_keys文件发送给各其它从节点
# master收集自己的公钥信息追加到自己的认证文件中
cd /home/student/.ssh
cat id_rsa.pub >> authorized_keys

# 各从节点(node02,node03,node04)将自己的公钥信息追加到master的authorized_keys文件中
ssh-copy-id student@node01

查看node01的authorized_keys文件

将node01的authorized_keys文件发送给其它节点
cd /home/student/.ssh
scp authorized_keys student@node02:/home/student/.ssh/authorized_keys
scp authorized_keys student@node03:/home/student/.ssh/authorized_keys
scp authorized_keys student@node04:/home/student/.ssh/authorized_keys

关闭通过SSH时的登录提示(每台服务器都需要配置)
sudo vim /etc/pam.d/sshd

结果测试
以node04 SSH连接其它节点测试

node1安装MPICH 3.4
安装包路径:https://www.mpich.org/static/downloads/3.4/mpich-3.4.tar.gz
创建安装目录
sudo mkdir /usr/MPICH-install
将安装包放入/usr/MPICH-install
cd /usr/MPICH-install
wget https://www.mpich.org/static/downloads/3.4/mpich-3.4.tar.gz

解压安装包
sudo tar -zxvf mpich-3.4.tar.gz
设置安装目录
cd /usr/MPICH-install/mpich-3.4
sudo ./configure --prefix=/usr/MPICH-install

这里提示报错,提示没有gcc模块,我们需要安装相关编辑器
sudo apt -y install gcc
sudo apt -y install gfortran
又出现错误

根据提示加上 --with-device=ch4:ofi
加上之后再次运行,还会报错,根据提示加上--disable-fortran即可
sudo ./configure --disable-fortran --with-device=ch4:ofi --prefix=/usr/MPICH-install

又提示报错!!!这里提示没有c++模块,如果不需要根据提示加上--disable-c++即可,或者安装C++
# 第一种:
sudo ./configure --disable-fortran --with-device=ch4:ofi --disable-c++ --prefix=/usr/MPICH-install#第二种:
sudo apt -y install g++
sudo ./configure --disable-fortran --with-device=ch4:ofi --prefix=/usr/MPICH-install
终于成功了!

编译并安装
sudo make
sudo make install
提示找不到make命令???
在使用Ubuntu时,有时会出现找不到make命令的问题。这是因为在Ubuntu系统中,默认是不安装make命令的,需要手动安装。>
sudo apt -y install build-essential
再次执行make命令,如果还报错,报错信息如下,这应该是bug吧,我重新执行
sudo ./configure --disable-fortran --with-device=ch4:ofi --prefix=/usr/MPICH-install,再执行make就好了。不理解!
执行make命令要等很长时间,耐心等待!


make install

修改环境变量
cd
vim .bashrc

测试环境变量设置
source .bashrc
which mpicc
which mpiexec
which mpirun

修改/etc/mpd.conf文件
内容为 secretword=myword
vim /etc/mpd.conf

修改文件读取权限和修改时间
chmod 600 /etc/mpd.conf
创建主机名称集合文件/home/student/mpd.hosts
vim mpd.hosts

配置NFS
为了方便 MPICH 的安装及并行程序的运行,最好将 MPICH的安装目录及用户家目录通过 NFS 网络文件系统共享。对于仅包含几个结点的较小的集群系统,可以任意指定其中一个结点作为 NFS服务器。对较大的集群系统,应设定一个或数个结点专门用于文件服务,这些结点称为 I/O 结点,它们专门负责存储设备的管理,不参加计算。这里选择 node01 作为 NFS 服务器,将它的 /home 和/usr/MPICH-nstall目录输出给其他三个结点,相应的配置步骤如下。
node1安装NFS服务
sudo apt -y install nfs-kernel-server
设置nfs和nfslock随系统启动
安装服务后,默认自启动
编辑文件/etc/exports
sudo vim /etc/exports

使配置生效
sudo exportfs

以root 身份登录到其余三个结点,在文件 /etc/fstab中加入下面两行
# 其它三个节点操作
sudo apt -y install nfs-common
sudo mkdir /usr/MPICH-install
sudo vim /etc/fstab
# 添加如下内容
node01:/home /home nfs defaults 0 0
node01:/usr/MPICH-install /usr/MPICH-install nfs defaults 0 0# 挂载
sudo mount -a


注意(一定要先看)
一:环境说明
由于我的环境下,都是使用的student普通用户,sudo提权到root用户进行配置的,ssh免密登录也是针对的student用户,而/usr/MPICH-install的目录的所有者是root,所以我这里要修改一下/usr/MPICH-install的属主和属组。或直接将这个文件夹权限改为777。
我建议在配置环境以及配置MPICH环境时,就使用root用户进行配置。
# 方法一: 修改属主和属组
sudo chown -R student:student /usr/MPICH-install
# 方法二: 修改文件夹权限
sudo chmod -R 777 /usr/MPICH-install
二:MPICH编译安装
mpich2版本和mpich3版本的进程管理默认使用hydra,而不是mpd。如果要使用mpd,使用配置MPICH时要添加参数./configure --with-pm=mpd
所有我的环境中没有使用mpdboot等mpd开头的命令。
环境测试
cd /usr/MPICH-install/mpich-3.4/examples
mpiexec ./cpi

这里的文件路径必须要有路径限定。否则会报错。
二、HELLO WORLD并行程序设计
程序源码:
/*hello.c*/
#include <stdio.h>
#include "mpi.h"int main( int argc, char *argv[] )
{int rank;int size;MPI_Init( 0, 0 );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;
}

程序编译,并运行
# 编译
mpicc -o helloworld helloworld.c
# 运行
mpiexec -n 10 -f /home/student/mpd.hosts ./helloworld

相关文章:
Linux下基于MPI的hello程序设计
Linux下基于MPI的hello程序设计 一、MPICH并行计算库安装实验环境部署创建SSH信任连接,实现免密钥互相连接node1安装MPICH 3.4配置NFS注意(一定要先看)环境测试 二、HELLO WORLD并行程序设计 一、MPICH并行计算库安装 在Linux环境下安装MPICH执行环境,配…...
Python爬虫404错误:解决方案总结
在进行网络爬虫开发的过程中,经常会遇到HTTP 404错误,即“Not Found”错误。这种错误通常表示所请求的资源不存在。对于爬虫开发者来说,处理这类错误是至关重要的,因为它们可能会导致爬虫无法正常工作。本文将探讨Python爬虫遇到4…...
ICC2/innovus设置no 1x gap的方法
我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 ICC2设置no 1x的方法如下: 1) set_placement_spacing_label -name X -lib_cells {*} -side right set_placement_spacing_label -name Y -lib_cells {*} -side left 2) set_placement_spacing_rul…...
如果每天工资按代码行数来算,来看看你每天工资是多少
说在前面 😼😼如果每天的工资取决于我们所编写的代码行数,那么我们的生活会发生怎样的改变?来看看你的同事们今天都提交了多少代码吧,看看谁是卷王,谁在摸鱼(🐶🐶狗头保命…...
TrueLicense实现授权管理
1、生成前准备 在生成授权文件前,首先需要密钥对插入:密钥对分为公钥与私钥,私钥需要本地储存不泄露,公钥需要对外提供;私钥内部包含证书,对于授权文件进行数字签名,相当于加密的步骤࿰…...
好用的样式动画库集合(css、js)
文章目录 前言一、Animate.css二、Anime.js三、CSShake四、Hover.css五、AniJS六、Animista七、Tachyons-animate八、Sequence.js九、Infinite十、OBNOXIOUS.CSS十一、MOTION UI十二、Keyframes.app十三、AnimXYZ十四、Whirl十五、Hamburgers十六、Vivify十七、Magic Animation…...
pandas教程:时区计数 USA.gov Data from Bitly USA.gov数据集
文章目录 Chapter 14 Data Analysis Examples(数据分析实例)14.1 USA.gov Data from Bitly(USA.gov数据集)1 Counting Time Zones in Pure Python(用纯python代码对时区进行计数)2 Counting Time Zones wit…...
野火霸天虎 STM32F407 学习笔记(六)系统时钟详解
STM32 中级 前言 仍然是学习自野火F407网课。 启动文件详解 作用: 初始化堆栈指针 SP_initial_sp初始化 PC 指针 Reset_Handler初始化中断向量表配置系统时钟调用 C 库函数 _main 初始化用户堆栈,从而最终调用 main 函数去到 C 的世界 栈ÿ…...
uni-app+vue3 封装全局函数(详细完整的方法)
在uni-app和vue3中,我们可以封装全局函数来复用代码。以下是详细的步骤: 首先,我们需要在main.js文件中引入我们封装的全局函数。这样我们就可以在整个项目中使用这些函数。 import globalFunctions from ./globalFunctionsVue.prototype.$g…...
游戏开发原画的设计方法
游戏原画设计是游戏开发中至关重要的一环,因为它直接影响到游戏的视觉吸引力和用户体验。以下是一些常见的游戏原画设计方法,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 理解游戏概念&…...
力扣labuladong一刷day19天花式遍历
力扣labuladong一刷day19天花式遍历 文章目录 力扣labuladong一刷day19天花式遍历一、48. 旋转图像二、54. 螺旋矩阵三、59. 螺旋矩阵 II 一、48. 旋转图像 题目链接:https://leetcode.cn/problems/rotate-image/ 思路:把矩阵向右旋转90度,要…...
自动化部署 扩容openGauss —— Ansible for openGauss
前言 大家好,今天我们为大家推荐一套基于Ansible开发的,自动化部署及扩容openGauss的脚本工具:Ansible for openGauss(以下简称 AFO)。 通过AFO,我们只需简单修改一些配置文件,即可快速部署多种…...
C#多线程创建及线程的同步
需求:有时为了能分时的调用多个任务运行,因此需要考虑多线程的编程方式 操作步骤如下: 1)创建线程并开启线程 Thread thread0 new Thread(() > DoWork0(0)); thread0.Start(); 2)编写线程函数 static void Do…...
MOM系统功能清单
什么是MOM系统? MOM系统是制造运营管理(Manufacturing Operation Management)的缩写。它是指通过协调管理企业的人员、设备、物料和能源等资源,把原材料或零件转化为产品的活动。MOM系统集成了生产计划、库存管理、生产调度、质量…...
ARM Cortex-M核的内核态,用户态
首先,用户态和内核态是从操作系统层面上来划分的,如果没有操作系统,我可以直接运行在特权模式下,并使用特权指令。在这种情况下,我将负责管理和控制系统资源,执行关键操作,以及确保系统的安全性…...
flex布局实战之自动填充剩余
案例目标 文字部分自适应并且居中 图中是一个弹窗,我现在使用flex的布局来实现,标题和关闭按钮。因为是uni-app,所以标签是view 。你可以自行替换为 代码 <view class"popup-box"><view class"title"><view class&…...
【LeetCode】203. 移除链表元素
203. 移除链表元素 难度:简单 题目 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入:head [1,2,6,3,4,5,6], val 6 输出ÿ…...
IDEA2023版本创建Sping项目只能勾选17和21,却无法使用Java8?(已解决)
方案:替换创建项目的源 我们只知道IDEA页面创建Spring项目,其实是访问spring initializr去创建项目。故我们可以通过阿里云国服去间接创建Spring项目。将https://start.spring.io/或者http://start.springboot.io/替换为 https://start.aliyun.com/...
Vue生命周期详解
以下是 Vue 生命周期钩子函数分别做了什么事情的详细说明 详细说明 beforeCreate(创建前):在实例初始化之前调用。此时,实例的数据观测 (data observer)、属性和方法的运算,以及事件配置等内部设置都已完成࿰…...
政务大数据与资源平台建设解决方案:PPT全文75页,附下载
关键词:智慧政务解决方案,大数据解决方案,数据中心解决方案,数据治理解决方案 一、政务大数据与资源平台建设背景 1、政务大数据已成为智慧城市建设的必要基础 为响应国家不断加快5G基建、大数据、人工智能等新型基础设施建设布…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...
LangFlow技术架构分析
🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...
nnUNet V2修改网络——暴力替换网络为UNet++
更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...

在使用Ubuntu时,有时会出现找不到make命令的问题。这是因为在Ubuntu系统中,默认是不安装make命令的,需要手动安装。> 
