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
相关推荐
愚润求学5 分钟前
【Linux】网络基础
linux·运维·网络
bantinghy35 分钟前
Linux进程单例模式运行
linux·服务器·单例模式
小和尚同志1 小时前
29.4k!使用 1Panel 来管理你的服务器吧
linux·运维
帽儿山的枪手2 小时前
为什么Linux需要3种NAT地址转换?一探究竟
linux·网络协议·安全
shadon1789 天前
回答 如何通过inode client的SSLVPN登录之后,访问需要通过域名才能打开的服务
linux
小米里的大麦9 天前
014 Linux 2.6内核进程调度队列(了解)
linux·运维·驱动开发
算法练习生9 天前
Linux文件元信息完全指南:权限、链接与时间属性
linux·运维·服务器
忘了ʷºᵇₐ9 天前
Linux系统能ping通ip但无法ping通域名的解决方法
linux·服务器·tcp/ip
浩浩测试一下9 天前
渗透测试指南(CS&&MSF):Windows 与 Linux 系统中的日志与文件痕迹清理
linux·运维·windows·安全·web安全·网络安全·系统安全
敏叔V5879 天前
大模型Text2SQL之在CentOS上使用yum安装与使用MySQL
linux·mysql·centos