1简单介绍

LINPACK是线性系统软件包(Linear system package) 的缩写。

 Linpack如今在国际上已经成为最流行的用于測试高性能计算机系统浮点性能的benchmark。通过利用高性能计算机。用高斯消元法求解一元N次稠密线性代数方程组的測试。评价高性能计算机的浮点性能。

Linpack測试包含三类,Linpack100、Linpack1000和HPL。

Linpack100求解规模为100阶的稠密线性代数方程组。它仅仅同意採用编译优化选项进行优化。不得更改代码,甚至代码中的凝视也不得改动。Linpack1000要求求解规模为1000阶的线性代数方程组。达到指定的精度要求,能够在不改变计算量的前提下做算法和代码上做优化。

HPL即High Performance Linpack,也叫高度并行计算基准測试。它对数组大小N没有限制,求解问题的规模能够改变。除基本算法(计算量)不可改变外,能够採用其他不论什么优化方法。前两种測试执行规模较小,已不是非常适合现代计算机的发展,因此如今使用较多的測试标准为HPL。并且阶次N也是linpack測试必须指明的參数。

LINPACK压力測试的目的主要为检測系统中CPU的工作的稳定性及内存訪问的稳定性。

2測试分类

Linpack測试分为两种測试方式,一 单板測试 二 集群測试

測试前的准备

为了提高CPU訪问的内存的效率。及减少页表占用CPU资源。採用内存hugepage,系统进程是通过虚拟地址訪问内存。可是CPU必须把它转换成物理内存地址才干真正訪问内存。为了提高这个转换效率,CPU会缓存近期的虚拟内存地址和物理内存地址的映射关系,并保存在一个由CPU维护的映射表中。

为了尽量提高内存的訪问速度,须要在映射表中保存尽量多的映射关系。 
    而在Linux中。内存都是以页的形式划分的。默认情况下每页是4K。这就意味着假设物理内存非常大,则映射表的条目将会非常多,会影响CPU的检索效率。

由于内存大小是固定的,为了降低映射表的条目,可採取的办法仅仅有添加页的尺寸。这样的增大的内存页尺寸在Linux 2.1中,称为Big page;在AS 3/4中,称为Hugepage。 
假设系统有大量的物理内存(大于8G),则物理32位的操作系统还是64位的,都应该使用Hugepage。

 
   注意:使用Hugepage内存是共享内存,它会一直keep在内存中的,不会被交换出去。也就是说使用hurgepage的内存不能被其它的进程使用,所以。一定要合理设置这个值,避免造成浪费。

   所以在进行測试之前,一定要确保系统内核支持Hugepage内存分页。

測试步骤

第一部分:环境设置

1设置内存大页面

# umount /mnt

首先将暂时挂载文件夹的文件夹/mnt卸载

# mount -t hugetlbfs none /mnt

挂载一个大页面系统,将hugetlbfs挂载到/mnt文件夹

# echo 3 >/proc/sys/vm/drop_caches

通过改动proc系统的drop_caches清理free的cach

# echo 80> /proc/sys/vm/nr_hugepages

设置大页面的数量

计算方式:

1 确定物理内存的大小

2 确定大页面单页的大小

大页面单页的大小,能够在内核中进行设置。查看方式:

# cat /proc/meminfo | grep huge

注|:大页面被设置后。这部分内存就会被占用,不能被其它程序所调用。建议大页面的容量应该在物理内存的80%左右。

比如:物理内存为4G。单页的大小为32M,则大页的数量应该设置为:4*1024*80%除以32 为102.,大页面的数量在102左右。

原则上不超过这个值。

2 PATH设置

MPICH

提供并行环境的软件

1、下载mpich2.tar.gz压缩包,将其放在制定的文件夹下(这里以放在/usr/local/文件夹下为

例)。

2、进入mpich2.tar.gz所在的文件夹,运行例如以下命令:

# tar xf mpich2.tar.gz C /usr/local/

能够通过#which mpirun;which mpiexec来check是否成功安装

3、设置PATH环境变量

# export PATH=/usr/local/mpich2/bin:$PATH

4、配置/etc/mpd.conf文件

# echo secretword=loongson > /etc/mpd.conf

Secretword 是你的密钥,是每台机台进行并行环境执行的基础。

# chmod 600 /etc/mpd.conf

设置mpd.conf文件的权限

注:这是单板測试,假设在集群測试中,每一个Node都必须加入该文件,而且设置文件的权限

5、运行mpd & 命令。

# mpd & 

单机时启动MPI的命令 ,假设为集群測试,此处有改动,參见以下文档。

执行单板測试

在进行測试之前,须要进行HPL优化设置。

HPL的设置说明:

假设编译正常。在hpl/bin/Linux_xeon文件夹下就会生成两个文件HPL.dat和xhpl。 HPL.dat文件是Linpack測试的优化配置文件,这个对測试的结果十分重要。xhpl为可运行程序。

假设是集群測试,就将linpack文件夹拷贝到机群中其余节点同样的文件夹下。注:公司提供的linpack为编译完毕的,不在须要又一次编译。

第1行HPLinpack benchmark input file  

第2行Innovative Computing Laboratory, University of Tennessee

前两行为说明性文字,不用作改动

第3行 HPL.out output file name (if any)  

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

device out"为"6"时,測试结果输出至标准输出(stdout)

"device out"为"7"时,測试结果输出至标准错误输出(stderr)

"device out"为其他值时,測试结果输出至第三行所指定的文件里

能够通过设置此处用来保存測试结果。

第5行 1   # of problems sizes (N)  

选择矩阵的数量 如 1 则为第一个矩阵。

第6行10240 26680 28800 30720 29 30 34 35  Ns  

矩阵的规模N越大,有效计算所占的比例也越大,系统浮点处理性能也就越高;但与此同一时候,矩阵规模N的添加会导致内存消耗量的添加。一旦系统实际内存空间不足,使用缓存、性能会大幅度减少。

因为之前採用了大页面内存系统,所以此处计算规模的大小,应以设置的大页面内存总量做计算。计算方式为:N*N*8=大页内存总量*0.8 ,内存总量换算为字节。

并且规模的大小最好为384的倍数。

第7行 1  # of NBs  

第8行 128 2 3 4     NBs  

提高数据的局部性,从而提高总体性能。HPL採用分块矩阵的算法。

分块的大小对性能有非常大的影响。NB的选择和软硬件很多因素密切相关。

NB值的选择主要是通过实际測试得到最优值。但NB的选择上还是有一些规律可寻,如:NB不可能太大或太小,一般在256下面;NB × 8一定是Cache line的倍数等。

比如,我们的L2 cache1024K, NB就设置为192另外。NB大小的选择还跟通信方式、矩阵规模、网络、处理器速度等有关系。一般通过单节点或单CPU測试能够得到几个较好的NB值,但当系统规模添加、问题规模变大,有些NB取值所得性能会下降。所以最好在小规模測试时选择3个左右性能不错的NB。再通过大规模測试检验这些选择。此处一般选择128

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

选择处理器阵列是按列的排列方式还是按行的排列方式。

按HPL文档中介绍,按列的排列方式适用于节点数较多、每一个节点内CPU数较少的系统;而按行的排列方式适用于节点数较少、每一个节点内CPU数较多的大规模系统。在机群系统上,按列的排列方式的性能远好于按行的排列方式。

此处一般选择1

第10行 3  # of process grids (P x Q)  

第11行 2 1 4  Ps  

第12行 2 4 1  Qs  

)第10~12行说明二维处理器网格(P × Q)。二维处理器网格(P × Q)的有下面几个要求。

P × Q = 系统CPU数 = 进程数。一般来说一个进程对于一个CPU能够得到最佳性能。对于Intel Xeon来说,关闭超线程能够提高HPL性能。P≤Q;一般来说,P的值尽量取得小一点,由于列向通信量(通信次数和通信数据量)要远大于横向通信。P = 2n,即P最好选择2的幂。HPL中,L分解的列向通信採用二元交换法(Binary Exchange)。当列向处理器个数P为2的幂时,性能最优。比如,当系统进程数为4的时候,P × Q选择为1 × 4的效果要比选择2 × 2好一些。 在集群測试中,P × Q = 系统CPU总核数。如系统为总核数为16核,则P*Q值应该为4.

第13行 16.0   threshold  

第13行说明測试的精度。这个值就是在做完线性方程组的求解以后。检測求解结果是否正确。若误差在这个值以内就是正确,否则错误。一般而言,若是求解错误,其误差非常大;若正确,则非常小。

所以没有必要改动此值

第14行1  # of panel fact  

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

第16行 2  # of recursive stopping criterium  

第17行 2 4    NBMINs (>= 1)  

第18行 1  # of panels in recursion  

第19行 2  NDIVs  

第20行 3  # of recursive panel fact.  

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

第14~21行指明L分解的方式。在消元过程中。zHPL採用每次完毕NB列的消元。然后更新后面的矩阵。这NB的消元就是L的分解。每次L的分解仅仅在一列处理器中完毕。

对每个小矩阵作消元时,都有3种算法:L、R、C,分别代表Left、Right和Crout。

在LU分解中。详细的算法非常多,測试经验,NDIVs选择2比較理想,NBMINs 4或8都不错。而对于RFACTs和PFACTs,对性能的影响不大。在HPL官方文档中。推荐的设置为:

1       # of panel fact  

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

2       # of recursive stopping criterium  

4 8     NBMINs (>= 1)  

1       # of panels in recursion  

2       NDIVs  

1       # of recursive panel fact.  

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)  

第22、23行说明L的横向广播方式。HPL中提供了6种广播方式。当中。前4种适合于快速网络;后两种採用将数据分割后传送的方式。主要适合于速度较慢的网络。眼下。机群系统一般採用千兆以太网甚至光纤等快速网络,所以一般不採用后两种方式。一般来说。在小规模系统中,选择0或1;对于大规模系统。选择3。推荐的配置为:

2       # of broadcast  

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

第24行 1  # of lookahead depth  

第25行 0  DEPTHs (>=0)  

第24、25行说明横向通信的通信深度。

这依赖于机器的配置和问题规模的大小,推荐配置为:

2       # of lookahead depth  

0 1     DEPTHs (>=0) 

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

第27行 32     swapping threshold  

第26、27行说明U的广播算法。U的广播为列向广播,HPL提供了3种U的广播算法:二元交换(Binary Exchange)法、Long法和二者混合法。SWAP="0",採用二元交换法;SWAP="1",採用Long法;SWAP="2",採用混合法。

推荐配置为: 

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

60      swapping threshold  

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

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

第28、29行分别说明L和U的数据存放格式。若选择"transposed",则採用按列存放,否则按行存放。推荐配置为: 

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

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

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

第30行主要在回代中使用,一般使用其默认值

第31行 8  memory alignment in double (> 0) 

第31行的值主要为内存地址对齐而设置,用于在内存分配中对齐地址。

出于安全考虑,能够选择8

执行

一、单进程(即4核4线程)情况

直接运行./xhpl就可以;

二、两进程(即8核8线程)情况:

# mpirun -np 2 ./xhpl 

集群測试

配置环境

各板子配置ssh免password登录

系统一般已经启用了SSH服务,

1 #:cd ~/.ssh

进入系统保存SSH密钥的文件夹

2 #:ssh-keygen -t rsa 

生成私钥

3:cp id_rsa.pub authorized_keys

 id_rsa_pub是与本机上面的私钥能够对上号的公钥。

因为每台机器既要当作SSHserver又要当作SSHclient。因此我们须要做的就是将这对公钥和私钥分发给每台机器。可是首先必须将公钥的文件名称改 成"authorized_keys"

4:scp * test@192.168.1.2:~ /.ssh/

将私钥和公钥分发到各个子板。通过远程CP将私钥和公钥拷贝到各个子板的.ssh文件夹下。用来实现各节点之间的免passwordSSH登陆。

5 尝试能否够实现无password登陆。

使用 SSH xx.xx.xx.xx或者SSH 主机名的方式check是否实现免password登陆

设置主机名映射和IP

准备确保网络环境是能够联通的。能够设置各节点的网卡的静态IP,及各节点的主机名称。

命令为:hostname test1

编辑各子板/etc/hosts文件。加入各子板IP与主机名映射。

VI /etc/hosts文件。格式例如以下:

192.168.1.1test1

192.168.1.2 test2

注意 各个节点都应该加入该文件

文件m,加入要联跑的主机名(一行写一个)

格式为:test1 

        Test2 

能够通过mpdboot –n 【主机名】-f m 来验证并行环境是否建立。

配置測试环境

集群測试环境的配置和单板一致。但必须确保每一个节点的环境一致。

须要注意的是:在启动MPI并行环境时,应採用执行

mpdboot -n [主机数量] -f m 

编辑HPL.dat文件。更改规模,Ps。Qs值,

规则:1.Ps<Qs

Ps为2的n次方。

Ps*Qs = 联跑主机的总核数/4

规模计算方法:

mpi分配计算量是每一个板子一样的

应该依照内存最小子板的大页数来计算规模的大小

执行

  执行mpiexec -n PsQs的值] ./xhpl