Linux下基于MPI的hello程序设计

Linux下基于MPI的hello程序设计

一、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

配置主机名(以一台服务器配置为例)

bash 复制代码
sudo hostnamectl set-hostname node01

配置IP地址

使用DHCP自动获取,不需要配置

在下载与安装编译环境之前,为了使软件包保持最新的状态,需要在命令行中输入命令

bash 复制代码
sudo apt -y install update

创建SSH信任连接,实现免密钥互相连接

配置/etc/hosts文件(每台服务器都需要配置)

bash 复制代码
sudo vim /etc/hosts

安装openssh-server(每台服务器都需要配置)

bash 复制代码
sudo apt -y install openssh-server

生成用户的公钥和私钥(每台服务器都需要配置)

bash 复制代码
ssh-keygen


发布公钥信息

node01作为master节点,由master统一接收各从节点的公钥信息保存在本机的authorized_keys中,再由master将authorized_keys文件发送给各其它从节点

bash 复制代码
# master收集自己的公钥信息追加到自己的认证文件中
cd /home/student/.ssh
cat id_rsa.pub >> authorized_keys
bash 复制代码
# 各从节点(node02,node03,node04)将自己的公钥信息追加到master的authorized_keys文件中
ssh-copy-id student@node01

查看node01的authorized_keys文件

将node01的authorized_keys文件发送给其它节点

bash 复制代码
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时的登录提示(每台服务器都需要配置)

bash 复制代码
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

创建安装目录

bash 复制代码
sudo mkdir /usr/MPICH-install

将安装包放入/usr/MPICH-install

bash 复制代码
cd /usr/MPICH-install
wget https://www.mpich.org/static/downloads/3.4/mpich-3.4.tar.gz

解压安装包

bash 复制代码
sudo tar -zxvf mpich-3.4.tar.gz

设置安装目录

bash 复制代码
cd /usr/MPICH-install/mpich-3.4
sudo ./configure --prefix=/usr/MPICH-install

这里提示报错,提示没有gcc模块,我们需要安装相关编辑器

bash 复制代码
sudo apt -y install gcc
sudo apt -y install gfortran

又出现错误

根据提示加上 --with-device=ch4:ofi

加上之后再次运行,还会报错,根据提示加上--disable-fortran即可

bash 复制代码
sudo ./configure --disable-fortran --with-device=ch4:ofi --prefix=/usr/MPICH-install

又提示报错!!!这里提示没有c++模块,如果不需要根据提示加上--disable-c++即可,或者安装C++

bash 复制代码
# 第一种:
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

终于成功了!

编译并安装

bash 复制代码
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

修改环境变量

bash 复制代码
cd
vim .bashrc

测试环境变量设置

bash 复制代码
source .bashrc
which mpicc
which mpiexec
which mpirun

修改/etc/mpd.conf文件

内容为 secretword=myword

bash 复制代码
vim /etc/mpd.conf

修改文件读取权限和修改时间

bash 复制代码
chmod 600 /etc/mpd.conf

创建主机名称集合文件/home/student/mpd.hosts

bash 复制代码
vim mpd.hosts

配置NFS

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

node1安装NFS服务

bash 复制代码
sudo apt -y install nfs-kernel-server

设置nfs和nfslock随系统启动

安装服务后,默认自启动

编辑文件/etc/exports

bash 复制代码
sudo vim /etc/exports

使配置生效

bash 复制代码
sudo exportfs

以root 身份登录到其余三个结点,在文件 /etc/fstab中加入下面两行

bash 复制代码
# 其它三个节点操作
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用户进行配置。

bash 复制代码
# 方法一: 修改属主和属组
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开头的命令。

环境测试

bash 复制代码
cd /usr/MPICH-install/mpich-3.4/examples
mpiexec ./cpi

这里的文件路径必须要有路径限定。否则会报错。

二、HELLO WORLD并行程序设计

程序源码:

bash 复制代码
/*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;
}

程序编译,并运行

bash 复制代码
# 编译
mpicc -o helloworld helloworld.c
# 运行
mpiexec -n 10 -f /home/student/mpd.hosts ./helloworld
相关推荐
韩楚风6 分钟前
【linux 多进程并发】linux进程状态与生命周期各阶段转换,进程状态查看分析,助力高性能优化
linux·服务器·性能优化·架构·gnu
陈苏同学10 分钟前
4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1
linux·服务器·ide·人工智能·python·深度学习·pycharm
Ambition_LAO15 分钟前
解决:进入 WSL(Windows Subsystem for Linux)以及将 PyCharm 2024 连接到 WSL
linux·pycharm
Pythonliu732 分钟前
茴香豆 + Qwen-7B-Chat-Int8
linux·运维·服务器
你疯了抱抱我33 分钟前
【RockyLinux 9.4】安装 NVIDIA 驱动,改变分辨率,避坑版本。(CentOS 系列也能用)
linux·运维·centos
追风赶月、34 分钟前
【Linux】进程地址空间(初步了解)
linux
栎栎学编程34 分钟前
Linux中环境变量
linux
挥剑决浮云 -1 小时前
Linux 之 安装软件、GCC编译器、Linux 操作系统基础
linux·服务器·c语言·c++·经验分享·笔记
小O_好好学2 小时前
CentOS 7文件系统
linux·运维·centos
x晕x3 小时前
Linux dlsym符号查找疑惑分析
linux·运维·服务器