HPL入门(ZT) python入门

HPL 入门

HPL是目前Linpack的基准测试程序,关于Linpack的详细信息和如何优化等情况,请参考曹振南的文章《如何做Linpack测试及性能优化》。本文仅仅就目前Goto库的源代码编译和HPL编译运行做一简单的描述。

Goto源码包的下载请到http://www.tacc.utexas.edu/resources/software/,注册以后可以登陆下载Goto源代码,最新的源代码包为GotoBLAS-1.25.tar.gz。

1.GotoBlas源码编译

解开上述压缩包以后,然后编辑Makefile.rule,这是主要需要修改的配置文件。

1 #

2 # Beginning of user configuration

3 #

4

5 # This library's version

6 REVISION = -r1.25

7

8 # Which do you prefer to use for C compiler? Default isgcc.

9 # I recommend you to use GCC because inline assembler isrequired.

10 C_COMPILER =GNU

11 # C_COMPILER = INTEL

12

13 # Which do you prefer to use for Fortran compiler? Default isGNU g77.

14 # F_COMPILER = G77

15 # F_COMPILER = G95

16 # F_COMPILER = GFORTRAN

17 F_COMPILER =INTEL

18 # F_COMPILER = PGI

19 # F_COMPILER = PATHSCALE

20 # F_COMPILER = IBM

21 # F_COMPILER = COMPAQ

22 # F_COMPILER = SUN

23 # F_COMPILER = F2C

24

25 # If you need 64bit binary; some architecture can accept both32bit and

26 # 64bit binary(EM64T, Opteron, SPARC and Power/PowerPC).

27 BINARY64 = 1

28

29 # If you want to build threaded version.

30 # You can specify number of threads by environment value

31 # "OMP_NUM_THREADS", otherwise, it's automaticallydetected.

32 SMP = 1

33

34 # You may specify Maximum number of threads. It should beminimum.

35 # For OpenMP users; you have to specify MAX_THREADS even ifyou don't

36 # use threaded BLAS(MAX_THREADS >=OMP_NUM_THREADS * GOTO_NUM_THREADS)

37 MAX_THREADS = 16

55 # If you want to use memory affinity (NUMA)

56 # You can't use it with ALLOC_STATIC

57 # NUMA_AFFINITY =1

编译静态库 #make or make libs

编译动态库 # cd exports; make so

具体编译可以参考根目录下02QuickInstall.txt

如果Makefile.rule里面指定了使用thread (SMP=1),编译生成的Goto库文件名称为libgoto_core2p-r1.07.a,其中的p表示可以使用pthreads。由于曙光的机器目前单节点最大CPUCore数是16,所以这里指定MAX_THREADS = 16。

如果不想使用pthreads,可以明确禁止之。即不定义SMP=1。编译出来的库的名称是libgoto_core2-r1.07.a

根据我们的测试经验,使用pthreads测试出来的效果一般要优于使用纯MPI的测试结果。

这里用INTEL和PathscaleFortran编译器分别编译出来了Core2平台和Opteron的Goto库(纯MPI的这里暂时不提供,只提供Ptheads版本的)

HPL的编译采用mpi,需要C编译器和Fortran77编译器,建议使用GNU编译器(影响HPL性能的关键不在HPL程序本身,而在于它所用的BLAS库,所以HPL的编译采用GNU编译器已经足够,而且采用GNU编译器容易编译)。MPI推荐采用MPICH-1.2.7,这个版本比较稳定,使用简单。

2.MPICH-1.2.7的编译安装

#tar zxvf mpich-1.2.7.tar.gz

#cd mpich-1.2.7

#./configure --prefix=/opt/mpich-ether-gnu -cc=gcc -c++=g++-fc=g77 --disable-weak-symbols

#make

#make install

3.HPL编译安装

#tar zxvf hpl.tar.gz

#cd hpl

对于AMD平台,执行如下命令

#cp setup/Make.Linux_ATHLON_FBLAS Make.Goto

如果是Intel平台,则

#cp setup/Make.Linux_PII_FBLAS Make.Goto

下面编辑Make.Goto文件

找到

60 #----------------------------------------------------------------------

61 # - Platform identifier------------------------------------------------

62 #----------------------------------------------------------------------

63 #

64 ARCH = Goto

把ARCH的值改为Goto,其原来的值是Linux_ATHLON_FBLAS或者Linux_PII_FBLAS

然后找到

66 #----------------------------------------------------------------------

67 # - HPL Directory Structure / HPL library------------------------------

68 #----------------------------------------------------------------------

69 #

70 TOPdir = /root/hpl

把第70行的TOPdir变量的值改为你的当前目录的绝对路径,可以用pwd来确定。

接下来找到

77 #----------------------------------------------------------------------

78 # - Message Passing library (MPI)--------------------------------------

79 #----------------------------------------------------------------------

80 # MPinc tells the C compiler where to find the MessagePassing library

81 # header files, MPlib is defined to be the name of thelibrary to be

82 # used. The variable MPdir is only used for defining MPincand MPlib.

83 #

84 MPdir = /opt/mpich-ether-gnu

85 MPinc = -I$(MPdir)/include

86 MPlib = $(MPdir)/lib/libmpich.a

把84行的MPdir的路径改为刚才安装的mpich所在的目录绝对路径。其中第86行的libmpich.a是mpich-1.2.7的mpi消息传递库。

找到

88 #----------------------------------------------------------------------

89 # - Linear Algebra library (BLAS or VSIPL)-----------------------------

90 #----------------------------------------------------------------------

91 # LAinc tells the C compiler where to find the Linear Algebralibrary

92 # header files, LAlib is defined to be the name of thelibrary to be

93 # used. The variable LAdir is only used for defining LAincand LAlib.

94 #

95 LAdir = /root

96 LAinc =

97 LAlib = /root/hpl/libgoto_opteronp-r1.07.a

把第97行的LAlib的值改为goto库所在的绝对路径。其中如果是Opteron平台就使用附件里面的libgoto_opteronp-r1.07.a(建议采用Pathscale编译器编译的),是Xeon平台就是用附件里面的libgoto_core2p-r1.07.a(建议采用Intel编译器编译的)。

找到

165 #----------------------------------------------------------------------

166 # - Compilers / linkers - Optimization flags---------------------------

167 #----------------------------------------------------------------------

168 #

169 CC = /opt/mpich-ether-gnu/bin/mpicc

170 CCNOOPT = $(HPL_DEFS)

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

172 #

173 # On some platforms, it is necessary to use the Fortranlinker to find

174 # the Fortran internals used in the BLAS library.

175 #

176 LINKER = /opt/mpich-ether-gnu/bin/mpif77

把169行和176行的编译器改为正确的C编译器和链接器。

至此,所有修改都已经OK。

执行如下命令进行编译hpl

#make arch=Goto

如果没有错误产生的话,将在当前目录下产生bin/Goto目录,里面是编译生成的xhpl和HPL.dat文件,如果有错误要重新编译的话,可以执行#make arch=Goto clean 进行清理以后再修改相关参数进行编译。

4.下面要调整HPL.dat参数,以运行xhpl

1 HPLinpack benchmark input file

2 Innovative Computing Laboratory, University of Tennessee

3 HPL.out5 output file name (if any)

4 8 device out(6=stdout,7=stderr,8=file)

5 1 # of problems sizes (N)

6 50000 Ns

7 2 # of NBs

8 256 192 NBs

9 0 PMAP process mapping (0=Row-,1=Column-major)

10 1 # of process grids (P xQ)

11 1 Ps

12 1 Qs

13 16.0 threshold

14 1 # of panel fact

15 0 1 2 PFACTs (0=left, 1=Crout, 2=Right)

16 1 # of recursive stopping criterium

17 2 4 NBMINs (>= 1)

18 1 # of panels in recursion

19 2 NDIVs

20 1 # of recursive panel fact.

21 0 1 2 RFACTs (0=left, 1=Crout, 2=Right)

22 1 # of broadcast

23 0 BCASTs (0=1rg,1=1rM,2=2rg,3=2rM,4=Lng,5=LnM)

24 1 # of lookahead depth

25 1 DEPTHs (>=0)

26 2 SWAP (0=bin-exch,1=long,2=mix)

27 64 swapping threshold

28 0 L1 in (0=transposed,1=no-transposed) form

29 0 U in (0=transposed,1=no-transposed) form

30 1 Equilibration (0=no,1=yes)

31 8 memory alignment in double (> 0)

其中第4行改为8,这样运行完成以后会产生一个HPL.out的输出文件。

第6行N的大小选择,可以按照内存的80%来考量,比方说现在内存如果是32GB=32*1024*1024*1024Bytes

取内存的80%来作为hpl运行时的内存。N*N*8(1个double占用8个Bytes)= 32*1024*1024*1024*80% (总内存的80%),则可以得出N=58617

第7,8两行NB的选择上,建议采用256,192也可以。

第11,12行P和Q的乘积要符合你跑的进程总数。

比方一个两路4核的机器,共8个core,如果你要跑2个进程的话(每个进程跑4个线程),这里的P=1,Q=2。而如果你要跑1个进程的话(每个进程跑8个线程),则P=Q=1,其它的参数对LinPack的值影响不大,如果要求不是太苛刻,可以不用调整。更详细的参数调整,请参考曹振南的《如何做Linpack测试及性能优化》一文。

5.HPL运行

经过上面的参数调整,现在就可以运行HPL了。

#cd bin/Goto

编辑一个machinefile

#vi hostfile.mf

内容是你的hostname,尽量别用localhost。

比方说内容是:

node1

node1

node1

node1

node1

node1

node1

node1

接着设定每个进程要启动的线程总数,用OMP_NUM_THREADS环境变量来指定,需要注意的是该值与HPL.dat里面指定的进程数(P*Q)之积应该等于你的CPUcore总数。

#export OMP_NUM_THREADS=8

这里假设待测的机器上有8个Core,测试中用1个进程,每个进程起动8个线程。

然后就可以执行如下语句运行了:

#/opt/mpich-ether-gnu/bin/mpirun -machinefile ./hostfile.mf -np1 ./xhpl

测试中可以试试不同的进程、线程组合(如1个进程8线程,或者2个进程4线程)的优略。切记运行mpirun之前要确定OMP_NUM_THREADS的值是不是你期望的(可以用#echo$OMP_NUM_THREAD来查看)。

  

爱华网本文地址 » http://www.413yy.cn/a/25101010/27648.html

更多阅读

多成中医使用基础入门 中医基础入门书籍

多成中医使用基础入门此文专为月子病病友整理,如与多成中医网站冲突,一切以网站公布内容为准。同时也也请大家尽量去网站和论坛找答案。(因为此文需要不断完善,担心个人观点会误导大家,所以严禁转载,谢谢理解。初使用者请重点看第五大点

六爻入门 六爻入门书籍

第一章第一节 起卦法  起卦时最好找一个安静的地方,使脑波不受外界音波之干扰。并请注意:起卦时不可玩笑试之,信念尤为重要,否则信息干扰而导致预测不准,并且同一事件不可多次预测。方法:将三枚铜钱合于双手掌,此时默念自己所需预测之

CRF简介入门 原油投资入门知识简介

CRF简介ConditionalRandomField:条件随机场,一种机器学习技术(模型)CRF由JohnLafferty最早用于NLP技术领域,其在NLP技术领域中主要用于文本标注,并有多种应用场景,例如:本文主要描述如何使用CRF技术来进行中文分词。CRFVS词典统计分词C

微商创业入门答案 创业入门之—男士内衣店

   创业之初,选择好的切入点非常重要。尤其对于小本经营来说,把握市场热点非常关键。       创业新品指导为你提供一些市场新门当介绍,同时为你做相关分析,为你成功迈出商场第一步助一臂之力!       都说女人的钱最好赚,这

微商创业入门答案 创业入门之——男士内衣店

    创业之初,选择好的切入点非常重要。尤其对于小本经营来说,把握市场热点非常关键。     创业新品指导为你提供一些市场新门当介绍,同时为你做相关分析,为你成功迈出商场第一步助一臂之力!     都说女人的钱最好赚,这一

声明:《HPL入门(ZT) python入门》为网友远方有我分享!如侵犯到您的合法权益请联系我们删除