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基建、大数据、人工智能等新型基础设施建设布…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...

基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...