实验4linpackWord格式文档下载.docx
《实验4linpackWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《实验4linpackWord格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。
![实验4linpackWord格式文档下载.docx](https://file1.bdocx.com/fileroot1/2023-1/23/8f97308f-529e-4eb9-9313-0b50a4f642c5/8f97308f-529e-4eb9-9313-0b50a4f642c51.gif)
100的矩阵
在该测试中,不允许对Linpack测试程序进行任何修改,哪怕是注释行。
所有的优化工作只能在编译器里完成。
----1000×
1000的矩阵
该测试也叫“面向峰值性能的测试”,在该测试中,要求有所放宽,允许对算法和软件进行修改或替换,并尽量利用系统的硬件特点,以达到尽可能高的性能。
但是所有的优化都必须保持和标准算法如高斯消去法相同的相对精度,而且必须使用Linpack的主程序进行调用。
测试者可修改或替换其中的过程调用例程DGEFA和DGESL。
其中DGEFA是Linpack软件包中标准的高斯消去LU分解过程,而DGESL是根据分解后得到的结果回代求解过程。
----针对大规模并行计算系统的测试,即HighlyParallelComputing。
在这一测试中,问题规模限制被取消,针对现代的并行计算机,要求最宽松,即用户可对任意大小的问题规模,使用任意个数的CPU,使用各种优化方法(必须基于高斯消去法)来执行该测试程序,寻求最佳的测试结果。
其实HPL(主页:
lib.org/benchmark/hpl/algorithm.html)就是这样的一个大规模高度并行的测试版本,也是当今用来进行世界前500超级计算机排名的公用测试标准(网址:
http:
//www.top500.org/)。
目前,用Linpack基准测试出的最高性能指标已经成为衡量机器性能的标准之一,这个数字可以作为对系统峰值性能的一个修正。
通过测试求解不同问题规模的实际计算速度值,我们不仅可以得到达到最佳性能的问题规模和性能测试数据。
2、HPL基准测试
(1)概述
HPL,即HighPerformanceLinpack,目前已经成为国际标准的Linpack基准测试程序,其1.0版于2000年9月发布,是第一个标准的公开版本并行Linpack测试软件包,一般用于全世界TOP500超级计算机上的并行超级计算机排名。
HPL测试标准的用户自由度要大很多,使用者可以选择矩阵的规模,分块大小,分解方法等等一系列的各种参数,都是按需要更改的。
HPL软件包需要在配备了MPI环境下的系统中才能运行,还需要底层有线性代数子程序包BLAS的支持(或者有另一种向量信号图像处理库VSIPL也可)。
HPL软件包不仅提供了完整的Linpack测试程序,还进行了全面细致的计时工作,最后可以得到求解的精确性和计算所花费的总时间。
该软件在系统上所能达到的最佳性能值适合很多因素有关的。
(2)主算法
该软件包是用来求一个N维的线性方程组Ax=b的解,首先通过选局部列主元的方法对Nⅹ(N+1)的[Ab]系数矩阵进行LU分解成如下形式:
[Ab]=[[L,U]y]
由于下三角矩阵L因子所作的变换在分解的过程中也逐步应用到b上,所以最后方程组的解x就可以由转化为求解上三角矩阵U作为系数矩阵的线性方程组Ux=y从而得到。
为了保证良好的负载平衡和算法的可扩展性,数据是以循环块的方式分布到一个PxQ的由所有进程组成的2维网格中。
Nx(N+1)的系数矩阵首先在逻辑上被分成一个个NbxNb大小的数据块,然后循环的分配到PxQ进程网格上去处理。
这个分配的工作在矩阵的行、列两个方向同时进行。
如下图所示:
(左图为整个矩阵被分成小块以后,右图为各小块分配到各个进程后的情况)
在LU分解的主循环中使用的是向右看(right-looking)的分解法,也就是说,在每次迭代过程对一个nb列的板块分解,然后剩余的子矩阵被更新。
因此,我们也可以注意到这里的板块在逻辑上被分为nb大小的子块,而这个Nb恰好就是前面数据分布中使用的Nb。
在前面所提到的N,Nb,P,Q都是可以根据集群的具体配置和用户需要而随时修改的,也是HPL测试中十分关键和重要的几个参数。
详细内容请看后面。
二、HPL的安装及使用
使学生掌握HPL的安装及运行。
主要软件包:
hpl-2.1.tar.gz
GotoBLAS2-1.13.tar.gz
openmpi-1.6.5.tar.gz
1.HPL的安装
(1)安装gotoblas
注:
出于提高性能的因数,选择GOTOBLAS,作为HPL调用的底层线性代数子程序包
目前最新版本为GotoBLAS2
下载GotoBLAS2-1.13.tar.gz
(网址https:
//www.tacc.utexas.edu/tacc-projects/gotoblas2)
执行步骤:
在usr/local/mathlib/goto下解压:
$tar-zxvfGotoBLAS2-1.13.tar.gz
$cdGotoBLAS2
$make(TARGET=NEHALEM)
可直接输入#make既可也可自己选择参数类似
$makeCC=gccBINARY=64TARGET=NEHALEM
依次是编译器库的位数和cpu的类型(architecture),具体可选择的参数可从GotoBLAS2的目录下02QuickInstall.txt的查找
cpu的类型(architecture)需要根据cpu的型号自行网上查找,可使用命令$cat/proc/cpuinfo|grepname|cut-f2-d:
|uniq–c查看cpu的型号可从目录下的getarch.c查看目前支持的architecture,新一点的intelcpu需要指定为TARGET=NEHALEM
编译出现错误请先输入$gmakeclean再重新开始
如果成功则显示类似如下图:
(3)安装openmpi
(4)安装HPL
下载hpl-2.1.tar.gz(网址:
lib.org/benchmark/hpl/hpl-2.1.tar.gz)
在用户目录下解压:
$tar–zxvfhpl-2.1.tar.gz
$cdhpl-2.1
根据机器的情况复制Makefile模板:
$cpsetup/Make.Linux_PII_CBLASMake.Linux
$viMake.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可用#whichmpicc指令查看也可直接填mpicc
CCNOOPT=$(HPL_DEFS)
CCFLAGS=$(HPL_DEFS)-fomit-frame-pointer-O3-funroll-loops
LINKER=同CC
LINKFLAGS=同CCFLAGS
(5)编译
在HPL安装目录下运行
$makearch=Linux
编译成功会在bin/linux目录下有HPL.dat和xhpl文件
如果失败,重新编译前加入#makearch=Linuxclean_arch_all
如果使用icc,使用命令#whichmpiicc查看后修改Make.Linux
2.HPL的运行
(1)进入~/安装hpl的目录/bin/Linux目录
$cd/home/用户目录/hpl安装目录/bin/Linux
(2)准备节点文件
$vinodes
内容类似:
cu01
cu02
……
(3)修改HPL.dat,设置运算规模和进程数等
$viHPL.dat
(4)运行
$mpirun-np最大进程数–machinefilenodesxhpl
成功运行后出现类似如下图:
三、Performance
Tuning
使学生了解Performance
Tuning各个环节,掌握Performance
Tuning技术。
重点:
修改HPL.dat设置运行参数
1.选择优化的BLAS库
虽然同样是对BLAS运算功能的实现,但具体不同的实现方法所生成的库,对HPL测试结果也有着很大的影响。
采用GOTO开发的BLAS库要效果要好得多,尤其是在问题规模增大,计算量增多以后,效果就更明显。
另外,它还有一个用pthread库编译的版本,可以用来在SMP机群上,使节点内部的通信方式不用MPI而采用Pthread,效率会更高一些。
对于GOTO在提高节点间的通信性能的基础上,提高每个节点自身的效率也是优化集群性能的一种手段。
处理器有自己的峰值速度,由它的主频和每周期的浮点运算次数所决定,对处理器效率的优化就是要使实际运算速度能够尽可能的接近峰值速度。
针对处理器的硬件特点而进行相应的优化会取得很显著的效果。
GOTOBLAS库的设计思想,主要是基于如下几个基础方面的观察和考虑:
由浮点运算单元进行的浮点运算速度与从第二级cache经过的浮点数据流的速度相比,相对而言这个比例是很小的。
因此,启用第二级cache处理这些数据流是一笔不必要的开销
很大一部分数据流的开销来自于阻塞CPU的TLB(TranslationLook-asideBuffers转换表缓冲区)不命中率,这种不命中很多是可以避免的,不能避免的也可以分摊到大量的计算当中去。
可见GOTOBLAS之所以大大优化了性能,是由于它有效的针对Pentium4处理器的SSE2技术,提高了二级缓存的利用率,大大降低了TLB的不命中率,减少了不必要的开销。
作为HPL需要频繁调用的底层库,BLAS自身的高效率对Linpack测试的性能指标产生了显著的影响。
对一台计算机来讲,内存的性能对整个机器的影响是仅次于CPU的。
所以要提高节点的运算效率,只一味的专注于CPU速度是不够的。
对于一个SMP节点,两个处理器是共享一块物理内存的,因此处理好节点内部的并行才能够提高节点自身的性能。
在节点内部采用pthread库的进程通信方式代替MPI消息传递方式,能够使SMP节点的实际运算速度更接近于峰值速度。
这虽然是对SMP节点性能的软件上的优化,但归根结底是从其硬件特性出发,采用合适的进程通信方式,更合理的利用内存空间,减少访问冲突,使内存的使用性能提高,从而也提高了整个节点的性能。
2.修改HPL.dat设置运行参数
在HPL测试中,使用的参数选择与测试的结果有很大的关系。
HPL中参数的设定是通过从一个配置文件HPL.dat中读取的,所以在测试前要改写HPL.dat文件,设置需要使用的各种参数,然后再开始运行测试程序。
配置文件内容的结构如下:
HPLinpackbenchmarkinputfile//文件头,说明
InnovativeComputingLaboratory,UniversityofTennessee
HPL.outoutputfilename(ifany)//如果使用文件保留输出结果,设定文件名
6deviceout(6=stdout,7=stderr,file)//输出方式选择(stdout,stderr或文件)
2#ofproblemssizes(N)//指出要计算的矩阵规格有几种
19602048Ns//每种规格分别的数值
2#ofNBs//指出使用几种不同的分块大小
6080NBs//分别指出每种大小的具体值
2#ofprocessgrids(PxQ-l//指出用几种进程组合方式
24Ps//每对PQ具体的值
21Qs
16.0threshold//余数的阈值
1#ofpanelfact//用几种分解方法
1PFACTs(0=left,1=Crout,2=Right)//具体用哪种,0left,1crout,2right
1#ofrecursivestoppingcriterium//几种停止递归的判断标准
4NBMINs(>
=1)//具体的标准数值(须不小于1)
1#ofpanelsinrecursion//递归中用几种分割法
2NDIVs//这里用一种NDIV值为2,即每次递归分成两块
1#ofrecursivepanelfact.//用几种递归分解方法
2RFACTs(0=left,1=Crout,2=Right)//这里每种都用到(左,右,crout分解)
1#ofbroadcast//用几种广播方法
3BCASTs(0=1rg,1=1rM,2=2rg,3=2rM,4=Lng,5=LnM)//指定具体哪种(有1-ring,1-ringModified,2-ring,2ringModified,Long以及long-Modified)
1#oflookaheaddepth//用几种向前看的步数
1DEPTHs(>
=0)//具体步数值(须大于等于0)
2SWAP(0=bin-exch,1=long,2=mix)//哪种交换算法(bin-exchange,long或者二者混合)
64swappingthreshold//采用混合的交换算法时使用的阈值
0L1in(0=transposed,1=no-transposed)form//L1是否用转置形式
1Uin(0=transposed,1=no-transposed)form//U是否用转置形式表示
1Equilibration(0=no,1=yes)//是否采用平衡状态
8memoryalignmentindouble(>
0)//指出程序运行时内存分配中的采用的对齐方式
要得到调试出高的性能,必须考虑内存大小,网络类型以及拓扑结构,调试上面的参数,直到得出最高性能。
本次实验需要对以下三组参数进行设置:
指出要计算的矩阵规格有2种,规格是1960,2048
指出使用2种不同的分块大小,大小为60,80
指出用2种进程组合方式,分别为(p=2,q=2)和(p=4,q=1)
p=2,q=2时需要的进程数是p×
q=2×
2=4,运行时mpirun命令行中指定的进程数必须大于等于4
以上3组每组有两种情况,组合后一共有8种情况,将得到8个性能测试值,经过不断的调试将会得出一个最大的性能值,这就是得到的最高性能值。
以下是其中一个性能测试值,规格为2048,分块是60,p=2,q=2时,运行时间为:
56.14,运算速度为0.8165Gflops。
PASSED代表结果符合要求。
============================================================================
T/VNNBPQTimeGflops
----------------------------------------------------------------------------
W13R2C42048602256.148.165e-01
||Ax-b||_oo/(eps*||A||_1*N)=0.0175089......PASSED
||Ax-b||_oo/(eps*||A||_1*||x||_1)=0.0035454......PASSED
||Ax-b||_oo/(eps*||A||_oo*||x||_oo)=0.0007503......PASSED
3.编译器选择
(1)使用gcc编译
(2)使用icc编译
系统结构
实验五集群系统性能测试
学院:
学号:
姓名:
实验四集群系统性能测试
一、实验步骤:
1.计算计算机峰值速度。
CPU主频:
查看/proc/cpuinfo文件,将看见cpu的详细信息,其中cpuMHz是主频值
网上查找资料计算峰值速度
2.性能测试
使用gcc编译器的情况下测试,并将最佳测试结果填写下面表格
进程个数
1
2
3
4
峰值速度
HPL测试
效率
CPU个数
N
NB
P
Q
Time
Gflops
参与运算主机名
3.完成上述测试后比较和分析上面的测试结果,特别是如何能够得到高的性能测试值
二、设计思考实验
1、还有什么技术会影响测试结果,例如sse2、超线程等,请设计实验。
并详细书写实验的采用的库文件、Makefile文件、测试结果、数据分析等。
2、如果采用intel编译器进行测试,比较测试结果