下载HPL软件
wget https://www.netlib.org/benchmark/hpl/hpl-2.3.tar.gz --no-check-certificate
安装OpenBLAS
git clone https://github.com/xianyi/OpenBLAS.git
cd OpenBLAS && make
make PREFIX=/data/software/OpenBLAS install
修改LD_LIBRARY_PATH
vim ~/.bashrc
#在文件末尾添加
export LD_LIBRARY_PATH=/data/software/OpenBLAS/lib:$LD_LIBRARY_PATH
#使更改生效
source ~/.bashrc
解压软件修改编译参数
tar -xf hpl-2.3.tar.gz
cd hpl-2.3
cp setup/Make.Linux_PII_CBLAS Make.Linux
修改参数(使用openmpi)
SHELL = /bin/sh
CD = cd
CP = cp
LN_S = ln -s
MKDIR = mkdir
RM = /bin/rm -f
TOUCH = touch
ARCH = Linux
TOPdir = /data/software/hpl-2.3 ##修改
INCdir = $(TOPdir)/include
BINdir = $(TOPdir)/bin/$(ARCH)
LIBdir = $(TOPdir)/lib/$(ARCH)
HPLlib = $(LIBdir)/libhpl.a
MPdir = /data/software/openmpi/3.1.6 ##修改
MPinc = -I$(MPdir)/include
MPlib = $(MPdir)/lib/libmpi.so
LAdir = /data/software/OpenBLAS ##修改
LAinc =
LAlib = $(LAdir)/lib/libopenblas.so ##修改
F2CDEFS =
HPL_INCLUDES = -I$(INCdir) -I$(INCdir)/$(ARCH) $(LAinc) $(MPinc)
HPL_LIBS = $(HPLlib) $(LAlib) $(MPlib)
HPL_OPTS = -DHPL_CALL_CBLAS
HPL_DEFS = $(F2CDEFS) $(HPL_OPTS) $(HPL_INCLUDES)
CC = /data/software/openmpi/3.1.6/bin/mpicc ##修改
CCNOOPT = $(HPL_DEFS)
CCFLAGS = $(HPL_DEFS) -fomit-frame-pointer -O3 -funroll-loops -lpthread
LINKER = /data/software/openmpi/3.1.6/bin/mpif77 ##修改
LINKFLAGS = $(CCFLAGS)
ARCHIVER = ar
ARFLAGS = r
RANLIB = echo
编译软件
make arch=Linux
测试运行
修改HPL.dat
https://www.advancedclustering.com/act_kb/tune-hpl-dat-file/
可以根据生成HPL.dat
测试运行 (slurm)
#!/bin/bash
#SBATCH --job-name=hpltest
#SBATCH --output=slurm.out
#SBATCH --error=slurm.err
#SBATCH -N 1
#SBATCH --ntasks-per-node=128
export LD_LIBRARY_PATH=/data/software/OpenBLAS/lib:$LD_LIBRARY_PATH
export OMP_NUM_THREADS=1
/data/software/openmpi/3.1.6/bin/mpirun -np 128 --allow-run-as-root ./xhpl
测试结果
使用oneapi编译HPL
下面是编译参数
SHELL = /bin/sh
CD = cd
CP = cp
LN_S = ln -s
MKDIR = mkdir
RM = /bin/rm -f
TOUCH = touch
ARCH = Intel
TOPdir = /data/software/hpl-2.3
INCdir = $(TOPdir)/include
BINdir = $(TOPdir)/bin/$(ARCH)
LIBdir = $(TOPdir)/lib/$(ARCH)
HPLlib = $(LIBdir)/libhpl.a
MPdir = /data/software/oneapi2021/mpi/latest #修改
MPinc = -I$(MPdir)/include
MPlib = $(MPdir)/lib/libmpicxx.a #修改
LAdir = /data/software/oneapi2021/mkl/latest/lib/intel64 #修改
LAinc =
LAlib = $(LAdir)/libmkl_intel_lp64.a $(LAdir)/libmkl_intel_thread.a $(LAdir)/libmkl_core.a -liomp5 -lpthread -lm #修改
HPL_INCLUDES = -I$(INCdir) -I$(INCdir)/$(ARCH) $(LAinc) $(MPinc)
HPL_LIBS = $(HPLlib) $(LAlib) $(MPlib)
HPL_OPTS = -DHPL_CALL_CBLAS
HPL_DEFS = $(F2CDEFS) $(HPL_OPTS) $(HPL_INCLUDES)
CC = /data/software/oneapi2021/mpi/latest/bin/mpicc -lpthread #修改
CCNOOPT = $(HPL_DEFS)
CCFLAGS = $(HPL_DEFS) -fomit-frame-pointer -O3 -funroll-loops #修改
LINKER = /data/software/oneapi2021/mpi/latest/bin/mpicc -lpthread #修改
LINKFLAGS = $(CCFLAGS)
ARCHIVER = ar
ARFLAGS = r
RANLIB = echo