在使用過程中參考了在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 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
,該檔案為此次測試的詳細結果。