gcc/g++/gfortran 得有
//ubuntu sudo apt install gcc(以此类推)
并行环境mpich,
基本线性代数子方程gotoblas
1、 mpich安装
wget http:/www.mpich.org/static/downloads/3.3.2/mpich-3.3.2.tar.gz
tar zxvf mpich-3.3.2.tar.gz
cd mpich-3.3.2
./configure --prefix=/usr/local/mpich-3.3.2(prefix后为安装路径)
sudo make
sudo make install
vim ~/.bashrc
export PATH=”usr/local/mpich-3.3.2/bin:$PATH”
source ~/.bashrc
which mpicc (路径记一下)
which mpiexec
如果出现正确路径,则说明安装成功。
2、GotoBLAS2安装
下载位置GotoBLAS:百度网盘 请输入提取码
2.1 解压GotoBLAS包之后,在解压后的目录下执行./ quickbuild.64bit进行快速安装,如果安装正常,在本目录下就会生成libgoto2.a和libgoto2.so两个文件
执行./ quickbuild.64bit
make BINARY=64 TARGET=NEHALEM/ 或者OPTERON(取决于电脑情况)
若出现如下:
../kernel/x86_64/gemm_ncopy_4.S:192: Error: undefined symbol
RPREFETCHSIZE' in operation
../kernel/x86_64/gemm_ncopy_4.S:193: Error: undefined symbol
RPREFETCHSIZE' in operation
../kernel/x86_64/gemm_ncopy_4.S:194: Error: undefined symbol
RPREFETCHSIZE' in operation
../kernel/x86_64/gemm_ncopy_4.S:195: Error: undefined symbol
RPREFETCHSIZE' in operation
则执行: gmake clean
vim Make.rule
修改
VERSION = 1.13 (去掉注释)
TARGET = NEHALEM/OPTERON
CC=gcc
BINARY=64 /*如果你是用的是64位进行该操作*/
USE_OPENMP = 1
INTERFACE64 = 1
INTERFACE64=1
关闭
执行./ quickbuild.64bit
make BINARY=64 TARGET=NEHALEM/ 或者OPTERON(取决于电脑情况)
2.2 编译正常的话,会在目录下生成libgoto2.a 和libgoto2.so文件
3、HPL程序的编译
解压HPL程序包
cd hpl-2.3(进去目录)
//从hpl/setup目录下拷贝Make.Linux_ATHLON_CBLAS(具体根据电脑情况选择)文件到hpl/目录下,并将文件更名为Make.test
(从setup目录中选择一个和自己实际的测试平台最相似的配置文件,将其复制到hpl根目录下,因为我的电脑是AMD的,(可以查看 CPU 型号是 Intel 的 NEHALEM 架构还是 AMD 的 OPTERON 架构cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq)所以我选择Make.Linux_ATHLON_CBLAS )
cp setup/Make.Linux_ATHLON_CBLAS Make.test(宗旨是拷贝setup里适合自己电脑的文件然后进行修改,拷贝完改个名交Make.test)
可以重新命名以示区别,这也是因为编译Make文件比较麻烦,所以建议先拷贝一个Make文件的例子
Make配置文件中有大量的注释信息,可以借助grep之类的工具将真正有用的参数筛选出来
cat Make.test |grep -v "#"
SHELL = /bin/sh
CD = cd
CP = cp
LN_S = ln -s
MKDIR = mkdir
RM = /bin/rm -f
TOUCH = touch
ARCH = Linux_PII_FBLAS <--系统架构名称
TOPdir = $(HOME)/hpl <--hpl程序所在的目录
INCdir = $(TOPdir)/include
BINdir = $(TOPdir)/bin/$(ARCH)
LIBdir = $(TOPdir)/lib/$(ARCH)
HPLlib = $(LIBdir)/libhpl.a
MPdir = /usr/local/mpi <--mpi所在的目录
MPinc = -I$(MPdir)/include
MPlib = $(MPdir)/lib/libmpich.a <--mpi库文件
LAdir = $(HOME)/netlib/ARCHIVES/Linux_PII <--GotoBlas库所在的路径
LAinc =
LAlib = $(LAdir)/libf77blas.a $(LAdir)/libatlas.a <--Gotoblas库文件所在的路径
F2CDEFS = -DAdd__ -DF77_INTEGER=int -DStringSunStyle
HPL_INCLUDES = -I$(INCdir) -I$(INCdir)/$(ARCH) $(LAinc) $(MPinc)
HPL_LIBS = $(HPLlib) $(LAlib) $(MPlib)
HPL_OPTS =
HPL_DEFS = $(F2CDEFS) $(HPL_OPTS) $(HPL_INCLUDES)
CC = /usr/bin/gcc
CCNOOPT = $(HPL_DEFS)
CCFLAGS = $(HPL_DEFS) -fomit-frame-pointer -O3 -funroll-loops -W -Wall
LINKER = /usr/bin/g77
LINKFLAGS = $(CCFLAGS)
ARCHIVER = ar
ARFLAGS = r
RANLIB = echo
参数配置很麻烦
注意配置好MPICH Gotoblus hpl文件 三个参数(注意最后CCFLAGS后、LINKER前的那一行,记得加上-pthread)
设置好hpl程序的编译参数之后,通过命令make arch=test来指定编译配置文件,开始进行编译,编译完成后,将在hpl目录的bin/test/下生成HPL.dat和xhpl两个文件,其中HPL.dat是hpl测试时参数的配置文件,xhpl是hpl测试时被执行的mpi程序。如果失败(大概率参数问题),重新编译前make arch=test
clean_arch_all
cd hpl/bin/test
mpirun -np 4 ./xhpl就可以成功运行
如果是参加ASC,祝你好运(很拼硬件的,尤其是显卡)
如果是河师大的同学,更祝你好运(柴老师yyds!)