Featured image of post OpenMPI与NPB应用部署

OpenMPI与NPB应用部署

NAS并行基准测试是一套针对高并行超级计算机性能评估的基准测试,基于OpenMPI在多机上分布式运行NPB应用

OpenMPI安装

包安装

使用以下命令安装OpenMPI

1
2
3
sudo apt-get update
sudo apt-get install gfortran
sudo apt-get install openmpi-bin openmpi-common libopenmpi-dev

验证是否安装正确

1
2
3
which mpicc
which mpiexec
mpicc --version

创建一个名为mpi_hello的示例测试程序

1
2
3
4
cd ~
mkdir mpi_program
cd mpi_program
vim mpi_hello.c

创建C语言文件mpi_hello.c,并将以下代码粘贴到文件中:程序在每个MPI进程中打印“Hello from rank x of y”信息,其中x是进程的排名,y是进程的总数

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#include <mpi/mpi.h>
#include <stdio.h>

int main(int argc, char** argv) {
    MPI_Init(NULL, NULL);
    int world_rank;
    MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
    int world_size;
    MPI_Comm_size(MPI_COMM_WORLD, &world_size);
    printf("Hello from rank %d of %d\n", world_rank, world_size);
    MPI_Finalize();
}

保存并退出文件编辑器,然后编译示例程序

1
2
mpicc -o mpi_hello mpi_hello.c
mpirun -np 4 ./mpi_hello

源码安装

暂缺

配置SSH免密

配置主机列表,让集群中的每台服务器彼此之间都知道对方的主机名和IP地址

1
sudo vim /etc/hosts

Node1填写本机与Node2

1
2
127.0.0.1       node1
192.168.207.129 node2

Node2填写本机与Node1

1
2
192.168.207.128 node1
127.0.0.1       node2

各节点生成秘钥对

1
ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa

各节点遍历各节点进行密钥对的拷贝

1
2
ssh-copy-id hedwig@node1
ssh-copy-id hedwig@node2

各节点测试SSH免密是否正确

1
2
ssh node1
ssh node2

集群分布式

OpenMPI 通常会假定每个节点只有一个可用的进程槽,因此运行时只会启动一个 MPI 进程

1
2
mpirun --host node1  ~/mpi_program/mpi_hello
mpirun --host node2  ~/mpi_program/mpi_hello

因此需要设定程序使用的进程槽数量

1
2
3
mpirun --host node1:4 ~/mpi_program/mpi_hello
mpirun --host node2:4 ~/mpi_program/mpi_hello
mpirun --host node1:4,node2:4 ~/mpi_program/mpi_hello

也可以通过mpi_config_file设置进程槽的数量分配(只需要在Node1上操作)

1
2
node1 slots=4
node2 slots=4

1
mpirun --hostfile ~/mpi_program/mpi_config_file ~/mpi_program/mpi_hello

NPB安装

NAS并行基准测试是一套针对高并行超级计算机性能评估的基准测试,NPB地址:https://www.nas.nasa.gov/software/npb.html

需要修改配置文件,将MPI相关的库路径置空,使自动链接到正确的库

1
2
3
4
5
wget https://www.nas.nasa.gov/assets/npb/NPB3.3.1.tar.gz
tar -zxvf NPB3.3.1.tar.gz
cd NPB3.3.1/NPB3.3-MPI/config
cp make.def.template make.def
vim make.def
1
2
3
4
32行:MPIF77 = mpif77
39行:FMPI_LIB =
78行:MPICC = mpicc 
85行:CMPI_LIB =

以IS为例,编译指令为 make IS(指定哪个程序)、CLASS=B(指定问题规模)、NPROCS=8(指定运行的处理器个数),注意Node1和Node2上均需要编译,并保证目录一致

  • S级:较小,用于快速测试
  • W级:工作站大小(90年代的工作站;现在可能太小了)
  • A,B,C级:标准测试问题; 从一个类到下一个类,大小增加约4倍
  • D,E,F级:大型测试问题; 与之前的每个类相比,大小增加了约16倍
1
2
cd ~/NPB3.3.1/NPB3.3-MPI/
make IS CLASS=A NPROCS=8

单机运行测试

1
2
cd bin/
mpirun ~/NPB3.3.1/NPB3.3-MPI/bin/is.A.8

多机运行测试,只需在Node1上执行命令

1
mpirun --hostfile ~/mpi_program/mpi_config_file ~/NPB3.3.1/NPB3.3-MPI/bin/is.A.8
Licensed under CC BY-NC-SA 4.0


使用 Hugo 构建
主题 StackJimmy 设计