安装HPL、GotoBLAS2、openmpi

来源:互联网 发布:淘宝潮男店铺粉丝排行 编辑:程序博客网 时间:2024/05/21 11:37

安装HPL

Linpack(Linear Equations Package)背景

是近年来较为常用的一种计算机系统性能测试的线性方程程序包
内容包括求解稠密矩阵运算,带状的线性方程,求解最小平方问题以及其他各种矩阵运算
Linpack使用线性代数方程组,利用选主元高斯消去法在分布式内存计算机上按双精度算法,测试求解稠密线性方程组所需的时间

HPL(High Performance Linpack)
目前已经成为国际标准的Linpack基准测试程序
HPL测试标准的用户自由度要大很多,使用者可以选择矩阵的规模,分块大小,分解方法等一系列各种参数,都是按需要更改的

HPL软件包需要再配备了MPI环境选的系统中才能运行
还需要底层有线性代数子程序包BLAS的支持(或者有另一种向量信号图像处理库VSIPL也可)

主算法
该软件包是用来求一个N维的线性方程组Ax=b的解,首先通过选局部列主元的方法对系数矩阵进行LU分解成:
[A b]=[[L,U] y]

HPL的安装及使用

主要软件包:

hpl-2.1.tar.gz
GotoBLAS2-1.13.tar.gz
openmpi-1.6.5.tar.gz

(1)安装GOTOBLAS2

下载GotoBLAS2-1.13.tar.gz

(网址https://www.tacc.utexas.edu/tacc-projects/gotoblas2

在文件当前目录下解压

# tar -zxvf GotoBLAS2-1.13.tar.gz


进入

#cd GotoBLAS2


编译

#make CC=gcc BINARY=64 TARGET=NEHALEM

注:

可以使用

# cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq –c查看cpu的型号

intel的NEHALEM架构还是AMD的OPTERON


如果编译出现错误请先输入#gmake clean再重新开始

如果成功则显示类似如下图:




(2)安装openmpi

解压

tar -zxvf openmpi-1.6.5.tar.gz

系统配置

cd openmpi-1.6.5

./configure --prefix=/opt/openmpi-1.6.5

/opt/openmpi-1.6.5是安装路径

编译

make

安装

make install


设置辅助检索路径

超级用户:

vim /etc/profile

在适当位置修改和添加:

export PATH=/opt/openmpi-1.6.5/bin:$PATH

export INCLUDE=/opt/openmpi-1.6.5/include:$INCLUDE

export LD_LIBRARY_PATH=/opt/openmpi-1.6.5/lib:$LD_LIBRARY_PATH

若是普通用户则修改用户目录下的~/.bash_profile文件:

运行以下命令使得修改生效:

source /etc/profile(或者source.bashrc)

(注意可通过命令$env |grep -w LD_LIBRARY_PATH 和$env |grep -w PATH来查看修改是否成功)

在安装时可能需要一些软件,可通过yum install **进行安装

例如

*** C++ compiler and preprocessor

checking for g++... no

checking for c++... no

checking for gpp... no

checking for aCC... no

checking for CC... no

checking for cxx... no

checking for cc++... no

checking for cl.exe... no

checking for FCC... no

checking for KCC... no

checking for RCC... no

checking for xlC_r... no

checking for xlC... no

checking whether we are using the GNU C++ compiler... no

checking whether g++ accepts -g... no

checking dependency style of g++... none

checking how to run the C++ preprocessor... /lib/cpp

configure: error: in `/usr/hpl/openmpi-1.6.5':

configure: error: C++ preprocessor "/lib/cpp" fails sanity check

See `config.log' for more details

是由于没有编译器,可以网上查找软件的名称,然后安装,一下指令可以完成该编译器的安装(保证在能联网的状态下)

[root@pc1 ~]# yum install gcc-c++


(3)安装HPL

在用户目录下解压

tar -zxvf hpl-2.1.tar.gz

cd hpl-2.1

根据机器的情况复制Makefile模板:

cp setup/Make.Linux_PII_CBLAS   Make.Linux

vi Make.Linux

根据如下情况修改Make.Linux

ARCH = Linux

 

TOPdir = /home/用户目录 / hpl-2.1

 

MPdir = /home/用户目录/openmpi安装目录/ openmpi-1.6.5

MPinc = $(MPdir)/include

MPlib = -L$(MPdir)/lib

 

LAdir = usr/local/mathlib/goto/GotoBLAS2的安装目录 

LAlib = $(LAdir)/ libgoto2_nehalemp-r1.13.a

 

HPL_INCLUDES = -I$(INCdir) -I$(INCdir)/$(ARCH) -I$(LAinc) -I$(MPinc)

CC = /home/用户目录/openmpi的安装目录/bin/mpicc

CCNOOPT  = $(HPL_DEFS)

CCFLAGS  = $(HPL_DEFS) -fomit-frame-pointer -O3 -funroll-loops

LINKER = CC

LINKFLAGS =CCFLAGS


我自己的修改是:

ARCH = Linux 
TOPdir = /home/chenyu/Desktop / hpl-2.1
MPdir =/opt/ openmpi-1.6.5
MPinc = -I$(MPdir)/include
MPlib = -L$(MPdir)/lib
LAdir = /home/chenyu/Desktop/GotoBLAS2
LAlib = $(LAdir)/ libgoto2_nehalemp-r1.13.a
HPL_INCLUDES = -I$(INCdir) -I$(INCdir)/$(ARCH) -I$(LAinc) -I$(MPinc)
CC = /opt/ openmpi-1.6.5/bin/mpicc 
CCNOOPT  = $(HPL_DEFS)
CCFLAGS  = $(HPL_DEFS) -fomit-frame-pointer -O3 -funroll-loops
LINKER =  /opt/ openmpi-1.6.5/bin/mpicc 
LINKFLAGS =$(CCFLAGS)

因为我的hpl安装在桌面

我的GotoBLAS2也安装在桌面

CC的路径是查看了which mpicc

 /opt/ openmpi-1.6.5/bin/mpicc 

编译

在HPL的安装目录下运行

make arch=Linux

如果编译成功会在hpl的安装目录下的bin/linux目录下有HPL.dat和xhpl文件

如果失败,重新编译前加入make arch=Linux clean_arch_all


HPL运行

进入安装hpl的目录的/bin/Linux(即编译生成的文件)

cd /home/用户名/Desktop/hpl-2.1/bin/Linux  (因为我安装在桌面)


准备节点文件(用来运行的计算机或者虚拟机的名称)

vi nodes

内容为:

slave1

master

slave2

之类的

如果是多个,则需要同时打开这些虚拟机


修改HPL.dat,设置运算规模和进程数

vi HPL.dat

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

修改



运行

mpirun -np 最大进程数 -machinefile nodes xhpl

成功运行后出现类似如下图:


其中的一个性能测试值,规格为29,分块是4,P=1,Q=1,运行时间接近0,运算速度Gflops


0 0