当前位置: 首页 > news >正文

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地址
node01192.168.176.134/24
node02192.168.176.13524
node03192.168.176.136/24
node04192.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信任连接&#xff0c;实现免密钥互相连接node1安装MPICH 3.4配置NFS注意(一定要先看)环境测试 二、HELLO WORLD并行程序设计 一、MPICH并行计算库安装 在Linux环境下安装MPICH执行环境&#xff0c;配…...

Python爬虫404错误:解决方案总结

在进行网络爬虫开发的过程中&#xff0c;经常会遇到HTTP 404错误&#xff0c;即“Not Found”错误。这种错误通常表示所请求的资源不存在。对于爬虫开发者来说&#xff0c;处理这类错误是至关重要的&#xff0c;因为它们可能会导致爬虫无法正常工作。本文将探讨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…...

如果每天工资按代码行数来算,来看看你每天工资是多少

说在前面 &#x1f63c;&#x1f63c;如果每天的工资取决于我们所编写的代码行数&#xff0c;那么我们的生活会发生怎样的改变&#xff1f;来看看你的同事们今天都提交了多少代码吧&#xff0c;看看谁是卷王&#xff0c;谁在摸鱼&#xff08;&#x1f436;&#x1f436;狗头保命…...

TrueLicense实现授权管理

1、生成前准备 在生成授权文件前&#xff0c;首先需要密钥对插入&#xff1a;密钥对分为公钥与私钥&#xff0c;私钥需要本地储存不泄露&#xff0c;公钥需要对外提供&#xff1b;私钥内部包含证书&#xff0c;对于授权文件进行数字签名&#xff0c;相当于加密的步骤&#xff0…...

好用的样式动画库集合(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&#xff08;数据分析实例&#xff09;14.1 USA.gov Data from Bitly&#xff08;USA.gov数据集&#xff09;1 Counting Time Zones in Pure Python&#xff08;用纯python代码对时区进行计数&#xff09;2 Counting Time Zones wit…...

野火霸天虎 STM32F407 学习笔记(六)系统时钟详解

STM32 中级 前言 仍然是学习自野火F407网课。 启动文件详解 作用&#xff1a; 初始化堆栈指针 SP_initial_sp初始化 PC 指针 Reset_Handler初始化中断向量表配置系统时钟调用 C 库函数 _main 初始化用户堆栈&#xff0c;从而最终调用 main 函数去到 C 的世界 栈&#xff…...

uni-app+vue3 封装全局函数(详细完整的方法)

在uni-app和vue3中&#xff0c;我们可以封装全局函数来复用代码。以下是详细的步骤&#xff1a; 首先&#xff0c;我们需要在main.js文件中引入我们封装的全局函数。这样我们就可以在整个项目中使用这些函数。 import globalFunctions from ./globalFunctionsVue.prototype.$g…...

游戏开发原画的设计方法

游戏原画设计是游戏开发中至关重要的一环&#xff0c;因为它直接影响到游戏的视觉吸引力和用户体验。以下是一些常见的游戏原画设计方法&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 理解游戏概念&…...

力扣labuladong一刷day19天花式遍历

力扣labuladong一刷day19天花式遍历 文章目录 力扣labuladong一刷day19天花式遍历一、48. 旋转图像二、54. 螺旋矩阵三、59. 螺旋矩阵 II 一、48. 旋转图像 题目链接&#xff1a;https://leetcode.cn/problems/rotate-image/ 思路&#xff1a;把矩阵向右旋转90度&#xff0c;要…...

自动化部署 扩容openGauss —— Ansible for openGauss

前言 大家好&#xff0c;今天我们为大家推荐一套基于Ansible开发的&#xff0c;自动化部署及扩容openGauss的脚本工具&#xff1a;Ansible for openGauss&#xff08;以下简称 AFO&#xff09;。 通过AFO&#xff0c;我们只需简单修改一些配置文件&#xff0c;即可快速部署多种…...

C#多线程创建及线程的同步

需求&#xff1a;有时为了能分时的调用多个任务运行&#xff0c;因此需要考虑多线程的编程方式 操作步骤如下&#xff1a; 1&#xff09;创建线程并开启线程 Thread thread0 new Thread(() > DoWork0(0)); thread0.Start(); 2&#xff09;编写线程函数 static void Do…...

MOM系统功能清单

什么是MOM系统&#xff1f; MOM系统是制造运营管理&#xff08;Manufacturing Operation Management&#xff09;的缩写。它是指通过协调管理企业的人员、设备、物料和能源等资源&#xff0c;把原材料或零件转化为产品的活动。MOM系统集成了生产计划、库存管理、生产调度、质量…...

ARM Cortex-M核的内核态,用户态

首先&#xff0c;用户态和内核态是从操作系统层面上来划分的&#xff0c;如果没有操作系统&#xff0c;我可以直接运行在特权模式下&#xff0c;并使用特权指令。在这种情况下&#xff0c;我将负责管理和控制系统资源&#xff0c;执行关键操作&#xff0c;以及确保系统的安全性…...

flex布局实战之自动填充剩余

案例目标 文字部分自适应并且居中 图中是一个弹窗&#xff0c;我现在使用flex的布局来实现&#xff0c;标题和关闭按钮。因为是uni-app,所以标签是view 。你可以自行替换为 代码 <view class"popup-box"><view class"title"><view class&…...

【LeetCode】203. 移除链表元素

203. 移除链表元素 难度&#xff1a;简单 题目 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff…...

IDEA2023版本创建Sping项目只能勾选17和21,却无法使用Java8?(已解决)

方案&#xff1a;替换创建项目的源 我们只知道IDEA页面创建Spring项目&#xff0c;其实是访问spring initializr去创建项目。故我们可以通过阿里云国服去间接创建Spring项目。将https://start.spring.io/或者http://start.springboot.io/替换为 https://start.aliyun.com/...

Vue生命周期详解

以下是 Vue 生命周期钩子函数分别做了什么事情的详细说明 详细说明 beforeCreate&#xff08;创建前&#xff09;&#xff1a;在实例初始化之前调用。此时&#xff0c;实例的数据观测 (data observer)、属性和方法的运算&#xff0c;以及事件配置等内部设置都已完成&#xff0…...

政务大数据与资源平台建设解决方案:PPT全文75页,附下载

关键词&#xff1a;智慧政务解决方案&#xff0c;大数据解决方案&#xff0c;数据中心解决方案&#xff0c;数据治理解决方案 一、政务大数据与资源平台建设背景 1、政务大数据已成为智慧城市建设的必要基础 为响应国家不断加快5G基建、大数据、人工智能等新型基础设施建设布…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

【UE5 C++】通过文件对话框获取选择文件的路径

目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 &#xff0c;这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器&#xff0c;右键点击 .uproject 文件&#xff0c;选择 "Generate Visual Studio project files"&#xff0c;重…...

使用SSE解决获取状态不一致问题

使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件&#xff0c;这个上传文件是整体功能的一部分&#xff0c;文件在上传的过程中…...

针对药品仓库的效期管理问题,如何利用WMS系统“破局”

案例&#xff1a; 某医药分销企业&#xff0c;主要经营各类药品的批发与零售。由于药品的特殊性&#xff0c;效期管理至关重要&#xff0c;但该企业一直面临效期问题的困扰。在未使用WMS系统之前&#xff0c;其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...

【java面试】微服务篇

【java面试】微服务篇 一、总体框架二、Springcloud&#xff08;一&#xff09;Springcloud五大组件&#xff08;二&#xff09;服务注册和发现1、Eureka2、Nacos &#xff08;三&#xff09;负载均衡1、Ribbon负载均衡流程2、Ribbon负载均衡策略3、自定义负载均衡策略4、总结 …...