【Linux学习笔记】42:安装High Performance Linpack

安装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)     //指出程序运行时内存分配中的采用的对齐方式

猜你喜欢

转载自blog.csdn.net/shu15121856/article/details/80226048
今日推荐