安装GOTO BLAS
mkdir /usr/local/mathlib/
mkdir /usr/local/mathlib/goto/
#另:到下载目录
tar -zxvf GotoBLAS2-1.13.tar.gz -C /usr/local/mathlib/goto/
cd /usr/local/mathlib/goto/GotoBLAS2/
make
安装openMPI
cd /usr/local/
mkdir openMPI
#下面是缺少的依赖
yum install glibc-headers gcc-c++
#另:到下载目录
tar -zxvf openmpi-2.0.1.tar.gz
cd openmpi-2.0.1
./configure --prefix=/usr/local/openMPI/
#不要先make all再make install
make all install
gedit /etc/profile
在/etc/profile
最后面另起一行,添加:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/openMPI
使生效:
source /etc/profile
因为之前已经装了MPICH,就不去配它(open MPI)的环境变量了,在使用HPL时直接指明它的工具的路径绝对即可,都在这里:
安装HPL
tar -zxvf hpl-2.1.tar.gz -C /home/lzh/
将解压目录/setup/
路径下的Make.Linux_PII_FBLAS
复制到解压目录/
下,命名为以Make.
开头的文件,不妨用Make.Linux
,该名字会在文件内配置时使用。
修改复制后的文件Make.Linux
:
特别注意TOPdir
必须使用现在的路径(解压后的hpl所在的目录),该文件中配置了前面的GOTO BLAS和openMPI的关联路径。
#
# -- High Performance Computing Linpack Benchmark (HPL)
# HPL - 2.1 - October 26, 2012
# Antoine P. Petitet
# University of Tennessee, Knoxville
# Innovative Computing Laboratory
# (C) Copyright 2000-2008 All Rights Reserved
#
# -- Copyright notice and Licensing terms:
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions, and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# 3. All advertising materials mentioning features or use of this
# software must display the following acknowledgement:
# This product includes software developed at the University of
# Tennessee, Knoxville, Innovative Computing Laboratory.
#
# 4. The name of the University, the name of the Laboratory, or the
# names of its contributors may not be used to endorse or promote
# products derived from this software without specific written
# permission.
#
# -- Disclaimer:
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY
# OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# ######################################################################
#
# ----------------------------------------------------------------------
# - shell --------------------------------------------------------------
# ----------------------------------------------------------------------
#
SHELL = /bin/sh
#
CD = cd
CP = cp
LN_S = ln -s
MKDIR = mkdir
RM = /bin/rm -f
TOUCH = touch
#
# ----------------------------------------------------------------------
# - Platform identifier ------------------------------------------------
# ----------------------------------------------------------------------
#
ARCH = Linux
#
# ----------------------------------------------------------------------
# - HPL Directory Structure / HPL library ------------------------------
# ----------------------------------------------------------------------
#
TOPdir = $(HOME)/hpl-2.1
INCdir = $(TOPdir)/include
BINdir = $(TOPdir)/bin/$(ARCH)
LIBdir = $(TOPdir)/lib/$(ARCH)
#
HPLlib = $(LIBdir)/libhpl.a
#
# ----------------------------------------------------------------------
# - Message Passing library (MPI) --------------------------------------
# ----------------------------------------------------------------------
# MPinc tells the C compiler where to find the Message Passing library
# header files, MPlib is defined to be the name of the library to be
# used. The variable MPdir is only used for defining MPinc and MPlib.
#
MPdir = /usr/local/openMPI
MPinc = -I$(MPdir)/include
MPlib = $(MPdir)/lib/libmpi.so
#
# ----------------------------------------------------------------------
# - Linear Algebra library (BLAS or VSIPL) -----------------------------
# ----------------------------------------------------------------------
# LAinc tells the C compiler where to find the Linear Algebra library
# header files, LAlib is defined to be the name of the library to be
# used. The variable LAdir is only used for defining LAinc and LAlib.
#
LAdir = /usr/local/mathlib/goto/GotoBLAS2
LAinc =
LAlib = $(LAdir)/libgoto2_baniasp-r1.13.so $(LAdir)/driver/others/xerbla.o
#
# ----------------------------------------------------------------------
# - F77 / C interface --------------------------------------------------
# ----------------------------------------------------------------------
# You can skip this section if and only if you are not planning to use
# a BLAS library featuring a Fortran 77 interface. Otherwise, it is
# necessary to fill out the F2CDEFS variable with the appropriate
# options. **One and only one** option should be chosen in **each** of
# the 3 following categories:
#
# 1) name space (How C calls a Fortran 77 routine)
#
# -DAdd_ : all lower case and a suffixed underscore (Suns,
# Intel, ...), [default]
# -DNoChange : all lower case (IBM RS6000),
# -DUpCase : all upper case (Cray),
# -DAdd__ : the FORTRAN compiler in use is f2c.
#
# 2) C and Fortran 77 integer mapping
#
# -DF77_INTEGER=int : Fortran 77 INTEGER is a C int, [default]
# -DF77_INTEGER=long : Fortran 77 INTEGER is a C long,
# -DF77_INTEGER=short : Fortran 77 INTEGER is a C short.
#
# 3) Fortran 77 string handling
#
# -DStringSunStyle : The string address is passed at the string loca-
# tion on the stack, and the string length is then
# passed as an F77_INTEGER after all explicit
# stack arguments, [default]
# -DStringStructPtr : The address of a structure is passed by a
# Fortran 77 string, and the structure is of the
# form: struct {char *cp; F77_INTEGER len;},
# -DStringStructVal : A structure is passed by value for each Fortran
# 77 string, and the structure is of the form:
# struct {char *cp; F77_INTEGER len;},
# -DStringCrayStyle : Special option for Cray machines, which uses
# Cray fcd (fortran character descriptor) for
# interoperation.
#
F2CDEFS = -DAdd__ -DF77_INTEGER=int -DStringSunStyle
#
# ----------------------------------------------------------------------
# - HPL includes / libraries / specifics -------------------------------
# ----------------------------------------------------------------------
#
HPL_INCLUDES = -I$(INCdir) -I$(INCdir)/$(ARCH) $(LAinc) $(MPinc)
HPL_LIBS = $(HPLlib) $(LAlib) $(MPlib)
#
# - Compile time options -----------------------------------------------
#
# -DHPL_COPY_L force the copy of the panel L before bcast;
# -DHPL_CALL_CBLAS call the cblas interface;
# -DHPL_CALL_VSIPL call the vsip library;
# -DHPL_DETAILED_TIMING enable detailed timers;
#
# By default HPL will:
# *) not copy L before broadcast,
# *) call the BLAS Fortran 77 interface,
# *) not display detailed timing information.
#
HPL_OPTS = -DHPL_CALL_CBLAS
#
# ----------------------------------------------------------------------
#
HPL_DEFS = $(F2CDEFS) $(HPL_OPTS) $(HPL_INCLUDES)
#
# ----------------------------------------------------------------------
# - Compilers / linkers - Optimization flags ---------------------------
# ----------------------------------------------------------------------
#
CC = $(MPdir)/bin/mpicc
CCNOOPT = $(HPL_DEFS)
# CCFLAGS = $(HPL_DEFS) -fomit-frame-pointer -O3 -funroll-loops -W -Wall
CCFLAGS = $(HPL_DEFS) -fomit-frame-pointer -O3 -funroll-loops
#
# On some platforms, it is necessary to use the Fortran linker to find
# the Fortran internals used in the BLAS library.
#
LINKER = $(MPdir)/bin/mpif77
LINKFLAGS = $(CCFLAGS)
#
ARCHIVER = ar
ARFLAGS = r
RANLIB = echo
#
# ----------------------------------------------------------------------
bash:
make arch=Linux
如果make失败,需要使用以下参数回退:
make arch=Linux clean_arch_all
再去修改前面的文件,再回来make。
基于前面为Make.*
文件起的名字,就会生成这样一个与*
处同名的目录,即是安装成功了。
cd /home/lzh/hpl-2.1/bin/Linux/
ls
可以看到HPL.dat
测试配置文件,和xhpl
测试程序。因为总是要去修改HPL.dat
测试配置文件来进行测试,不妨对其拷贝一份原始副本:
cp HPL.dat HPL.dat.copy
参数解释
取自实验指导书。
HPLinpack benchmark input file //文件头,说明
Innovative Computing Laboratory, University of Tennessee
HPL.out output file name (if any) //如果使用文件保留输出结果,设定文件名
6 device out (6=stdout,7=stderr,file) //输出方式选择(stdout,stderr或文件)
2 # of problems sizes (N) //指出要计算的矩阵规格有几种
1960 2048Ns //每种规格分别的数值
2 # of NBs //指出使用几种不同的分块大小
60 80 NBs //分别指出每种大小的具体值
2 # of process grids (P x Q-l //指出用几种进程组合方式
2 4 Ps //每对PQ具体的值
2 1 Qs
16.0 threshold //余数的阈值
1 # of panel fact //用几种分解方法
1 PFACTs (0=left, 1=Crout, 2=Right) //具体用哪种,0 left,1 crout,2 right
1 # of recursive stopping criterium //几种停止递归的判断标准
4 NBMINs (>= 1) //具体的标准数值(须不小于1)
1 # of panels in recursion //递归中用几种分割法
2 NDIVs //这里用一种NDIV值为2,即每次递归分成两块
1 # of recursive panel fact. //用几种递归分解方法
2 RFACTs (0=left, 1=Crout, 2=Right) //这里每种都用到(左,右,crout分解)
1 # of broadcast //用几种广播方法
3 BCASTs (0=1rg,1=1rM,2=2rg,3=2rM,4=Lng,5=LnM) //指定具体哪种(有1-ring,1-ring Modified,2-ring,2ring Modified,Long以及long-Modified)
1 # of lookahead depth //用几种向前看的步数
1 DEPTHs (>=0) //具体步数值(须大于等于0)
2 SWAP (0=bin-exch,1=long,2=mix) //哪种交换算法(bin-exchange,long或者二者混合)
64 swapping threshold //采用混合的交换算法时使用的阈值
0 L1 in (0=transposed,1=no-transposed) form //L1是否用转置形式
0 U in (0=transposed,1=no-transposed) form //U是否用转置形式表示
1 Equilibration (0=no,1=yes) //是否采用平衡状态
8 memory alignment in double (> 0) //指出程序运行时内存分配中的采用的对齐方式