Skip to content

Latest commit

 

History

History
161 lines (119 loc) · 7.79 KB

File metadata and controls

161 lines (119 loc) · 7.79 KB

集群的使用,模式的编译运行记录

程序的并行一般有两种方式,多线程和多进程。即OpenMP(共享内存)和MPI(分布式)。OpenMP为编译器自带,编译时加上对应参数即可。 如:gfortran -fopenmpifort -qopenmp。MPI并行库需要额外提供,有Intel MPI,OpenMPI,mvapich(基于mpich增加了IB网络的支持)。 气象海洋模式的大规模并行计算都是用到上百个节点,而程序里并行代码都已经给定。我们做的就是根据具体的服务器,编译环境,并行库, 测试出一个计算速度最快,使用核数适中的方案。

1 编译器使用

现在大部分超算都是Intel处理器,而Intel编译器针对它做了一定优化。但是部分版本Intel compiler编译出的模式存在一些问题,比如运行时core dump,以及并行效率不高等等。所以建议使用最新update版本,比如2017update5,2018update3等。对于一些必要的库,如hdf5,netcdf。可以静态编译进去,这样模式很容易迁移到其他集群上去。不用去安装编译器和库来重新编译(前提是glibc一致)。具体做法为:

  1. WRF模式

修改configure.wrf中的LIB_EXTERNAL,改为如下形式:

LIB_EXTERNAL    = \
                  -L$(WRF_SRC_ROOT_DIR)/external/io_netcdf -lwrfio_nf /netcdfpath/lib/libnetcdff.a \
                  /netcdfpath/lib/libnetcdf.a /hdf5path/lib/libhdf5_fortran.a /hdf5path/lib/libhdf5_hl.a \
                  /hdf5path/lib/libhdf5.a /usr/lib64/libz.a -ldl 

其中netcdfpathhdf5path分别为netcdfhdf5的安装路径。 修改external/io_netcdf/makefile中的LIBSLIBFFS,改为如下形式:

LIBS    = $(LIB_LOCAL) -L$(NETCDFPATH)/lib /netcdfpath/lib/libnetcdff.a /netcdfpath/lib/libnetcdf.a \
          /hdf5path/lib/libhdf5_fortran.a /hdf5path/lib/libhdf5_hl.a \
          /hdf5path/lib/libhdf5.a /usr/lib64/libz.a -lm -ldl
LIBFFS  = $(LIB_LOCAL) -L$(NETCDFPATH)/lib /netcdfpath/lib/libnetcdff.a /netcdfpath/lib/libnetcdf.a \
          /hdf5path/lib/libhdf5_fortran.a /hdf5path/lib/libhdf5_hl.a \
          /hdf5path/lib/libhdf5.a /usr/lib64/libz.a -lm -ldl

得到的wrf.exe依赖如下:

wang@localhost$ ldd wrf.exe
        linux-vdso.so.1 =>  (0x00007ffd7618c000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00002b5ff2eda000)
        libmpifort.so.12 => /app/intel/compilers_and_libraries_2018.3.222/linux/mpi/intel64/lib/libmpifort.so.12 (0x00002b5ff30de000)
        libmpi.so.12 => /app/intel/compilers_and_libraries_2018.3.222/linux/mpi/intel64/lib/libmpi.so.12 (0x00002b5ff3487000)
        librt.so.1 => /lib64/librt.so.1 (0x00002b5ff4116000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00002b5ff431e000)
        libm.so.6 => /lib64/libm.so.6 (0x00002b5ff453a000)
        libiomp5.so => /app/intel/compilers_and_libraries_2018.3.222/linux/compiler/lib/intel64/libiomp5.so (0x00002b5ff483c000)
        libc.so.6 => /lib64/libc.so.6 (0x00002b5ff4c17000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00002b5ff4fe4000)
        /lib64/ld-linux-x86-64.so.2 (0x00002b5ff2cb6000)
  1. FVCOM模式

思路和WRF模式编译一致,链接时写静态库的全路径。具体做法如下: 修改make.inc中的IOLIBS

IOLIBS  = -L. /netcdfpath/lib/libnetcdff.a /netcdfpath/lib/libnetcdf.a \
          /hdf5path/lib/libhdf5_fortran.a /hdf5path/lib/libhdf5_hl.a 
          /hdf5path/lib/libhdf5.a /usr/lib64/libz.a -lm -ldl

得到的fvcom为:

wang@localhost$ ldd fvcom
        linux-vdso.so.1 =>  (0x00007ffd96156000)
        libm.so.6 => /lib64/libm.so.6 (0x00002b0ec362b000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00002b0ec392d000)
        libmpifort.so.12 => /app/intel/compilers_and_libraries_2018.3.222/linux/mpi/intel64/lib/libmpifort.so.12 (0x00002b0ec3b31000)
        libmpi.so.12 => /app/intel/compilers_and_libraries_2018.3.222/linux/mpi/intel64/lib/libmpi.so.12 (0x00002b0ec3eda000)
        librt.so.1 => /lib64/librt.so.1 (0x00002b0ec4b69000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00002b0ec4d71000)
        libc.so.6 => /lib64/libc.so.6 (0x00002b0ec4f8d000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00002b0ec535a000)
        /lib64/ld-linux-x86-64.so.2 (0x00002b0ec3407000)

2 数值模式的计算方案

WRF之类有限差分模式,并行计算主要体现在空间差分上,所以他所使用的核数=X方向的核数乘以Y方向核数。而FVCOM有限体积模式, 并行时需要把空间分为几个区域(区域数即核数),与模拟的空间大小分辨率等有很大关系,需要具体测试。

3 HPC结构

3.1 集群体系结构

集群中一个节点相当于一台计算机,按功能其类型主要有,用户节点,控制节点,管理节点,存储节点,计算节点。

  1. 用户节点

即登录节点,用户在这些节点提交作业。一般可以访问外网,下载数据。而且安装了许多实用的小工具。譬如:wget,axel,imagemagick,htop。 如果没有装,后面讲在集群安装软件的方法。

  1. 控制节点

调度计算节点上的作业,通常集群的作业调度程序(如PBS)应该运行在这个节点上。但大多集群的登录节点,或管理节点同时负责作业调度。

  1. 管理节点

也就是mgt节点,监控集群中各个节点和网络的运行状况。通常的集群的管理软件也运行在这个节点上。一般只能root才能登录,没有挂载并行文件系统。

  1. 存储节点

也叫IO节点,这些节点上挂载了TB级的并行文件系统,然后共享到其他节点。如果这些节点挂载出问题,那么其他节点并行文件系统也就不能用了。

  1. 计算节点

计算节点是整个集群系统的计算核心。它的功能就是执行计算。一般一个节点10几到20几核不等。

3.2 集群网络结构

节点间一般是通过以太网来实现tcp通信。但是如果并行计算,这种千兆以太网的速度是远远不够的。所以现在大多集群并行计算都是通过IB网络来通信, 速度达到了56Gb/s。并行程序执行时的通信结构有如下方式:shm|dapl|tcp|tmi|ofa|ofi。shm为共享内存,tcp为以太网,ofa为IB网络。

有用的命令:ibstat, ibstatus, ip addr, ip link

  • Intel MPI运行参数。

version:2018update3

FVCOM模式运行时,设置环境变量export I_MPI_FABRICS=shm:ofa。节点内共享内存,节点间IB网络。 经测试这种搭配是效率最高的。WRF模式对这个设置不敏感,I_MPI_FABRICS=shm:ofaI_MPI_FABRICS=ofa速度基本一致,后者为节点内,节点间都用IB网络。

  • OpenMPI运行参数。

version:2.1.5

OpenMPI文档中讲,从v1.8系列开始,vader BTL就替代了sm BTL,这两者都是节点内共享内存通信。测试发现vader BTL速度要快一些。

mpirun -np 20 --mca btl vader,openib  ./a.out

即只使用vader,openib通信方式。如果不使用某一方式,用^指定。

mpirun -np 20 --mca btl ^tcp,openib  ./a.out

即不包含tcp方式。OpenMPI默认是根据网络拓扑关系来自动识别并行的通信方式,一般不用指定相关参数。

  • mpich运行参数。

version:3.2

mpiexec -iface ib0 -n 4 ./a.out

mpich默认节点间使用tcp方式,需强制改为IB通信方式。

最后想说的是,这些MPI库执行标准都一样,所以相同编译器和通信方式下,这些MPI库的计算速度相差很小

4 PBS作业系统

常用的命令,适用于PBS-Pro,torque。

  1. qmgr -c "p s"

查看队列配置

  1. qstat

查看作业状态,可用参数-a,-n,s

  1. showq

查看作业状态,为maui软件中的命令

  1. qsub

提交作业

  1. pbsnodes

pbsnodes -a,查看各节点状态,衍生命令为pestat

  1. qdel

删除作业,qdel + 作业号