在使用过程中参考了在ubuntu下测试本机的HPCC分数这一篇博文。由于我的环境和这篇文章有所不同,该测试是在学校的超级计算机上完成的,相关配置有所差别。
在HPC Chellenge下载对应的源文件hpcc-1.x.x.tar.gz
。将安装包传输到超级计算机对应的个人文件夹下。
使用命令行在合适的位置解压文件
tar xzvf hpcc.1.x.x.tar.gz
进入目录 ./hpcc.1.5.0/hpl/setup
,该目录下保存有多种构建好的MAKE文件脚本示例。根据其命名,可以看出对应适合的系统。
将其复制到上级目录./hpcc1.5.0/hpl
中,修改Make.xxx文件。具体修改项目如下:
MPdir = /home/andywang/mpich-install //本机安装mpi的位置
MPinc = -I$(MPdir)/include //mpi头文件所在的位置
MPlib = $(MPdir)/lib/libmpi.a //mpi静态库所在的位置
LAdir = $(HOME)/clapack/lib //blas所在的位置
LAinc = //HPCC没有用到blas头文件,可以空着
LAlib = $(LAdir)/blas_LINUX.a $(LAdir)/lapack_LINUX.a $(LAdir)/libf2c.a
LINKER = $(CC)
根据自己计算的具体情况,选择对应的路径和位置。可以使用which
等命令来协助查找本机的相关可执行文件的路径。
在我的使用环境中,可以配置为:
# MPI 部分:
MPdir = /usr/local/mpi3-icc13
MPinc = -I$(MPdir)/include
MPlib = -L$(MPdir)/include
# LA 部分
LAdir = /opt/intel/mkl
LAinc = -I$(LAdir)/include
LAlib = -L$(LAdir)/lib/intel64/ $(LAdir)/lib/intel64/libmkl_intel_lp64.a -Wl,--start-group $(LAdir)/lib/intel64/libmkl_sequential.a $(LAdir)/lib/intel64/libmkl_core.a -Wl,--end-group -L $(LAdir)/lib/intel64/ -lpthread -lm
# CC 部分
CC = mpicc
CCNOOPT = $(HPL_DEFS)
CCFLAGS = $(HPL_DEFS) -fomit-frame-pointer -O3 -funroll-loops -Wall
# Linker 部分
LINKER = mpicc
LINKFLAGS = -L$(LAdir)/lib/intel64
在hpl
上级目录,即目录./hpcc.1.5.0/
下进行编译。使用命令如下,其中xxx
为所修改的文件后缀。
make arch = xxx
如果希望默认为根据某个Make文件编译,可以在./hpcc.1.5.0/hpl/Make.top
中将arch=UNKONWN
修改为对应的文件后缀。
在我的环境中,编译过程中出现了报错信息stream.c文件a,b,c未定义
。经过查阅相关文档,发现我的环境编译器不支持C语言中的restrict
,可以通过修改./hpcc.1.5.0/hpl/Stream/stream.c
解决问题。
在编译过程中,可能遇到其他错误,通过排查,一般能够发现对应的路径或者是文件问题所在。按照错误信息解决即可。常见有某些文件没有找到,一般是错误设置了路径,查看Make文档中对应的路径设置即可。
在正常的版本的mpi下,可以使用如下命令行运行。在某些超级计算机上面运行,根据运行的相关要求,将命令行中的mpiexec
更换为对应提供的运行命令即可。
mpiexec -np 64 ./hpcc
通过该命令运行,可能会报错cannot open file hpccinf.txt
。此时检查目录./hpcc.1.5.0/
下是否存在文件_hpccinf.txt
,如果有,重命名为hpccinf.txt
即可。
还有可能报错Need at least 4 processes for these tests
,此时根据要求指定运行线程数大于4即可。或者是修改文件./hpcc-1.5.0/hpccinf.txt
,将Ps和Qs的积(Ps*Qs)减小即可。
运行结束后,没有任何提示信息。会在目录./hpcc.1.5.0/
下生成文件hpccoutf.txt
,该文件为此次测试的详细结果。