CPU - 知识库

CPU 编辑

SPEC CPU2000

一、SPEC CPU2000简介 SPEC CPU2000是由标准性能评价机构“The Standard Performance Evaluation Corporation (SPEC)”开发的用于评测CPU性能的基准程序测试组。处理器、内存和编译器都会影响最终的测试结果,而I/O(磁盘)、网络、操作系统和图形子系统对SPEC CPU2000的影响非常小。目前,SPEC CPU2000是业界首选的CPU评测工具。

SPEC CPU2000包括CINT2000和CFP2000两套基准测试程序,前者用于测量和对比CPU的定点性能,后者用于测量和对比浮点性能。CINT2000包含12个测试项目,CFP2000包含14个测试项目.

二、运行SPEC CPU2000 首先登录操作系统,打开终端,进入SPEC CPU2000安装目录(cd /home/benchmark/spec2000-new),然后顺序执行下列两条命令语句即可:

1. . shrc

输入时,圆点与shrc之间至少一个空格,该命令开始启动SPEC CPU2000程序。

2. runspec -c test.cfg -i ref -n 3 -I all

命令参数说明:

runspec 表示执行SPEC CPU2000基准程序开始进行测试。其参数说明:

-c:读取测试配置文件,test.cfg位于SPEC CPU2000安装目录的config目录下;

-i:输入测试数据集的大小,ref代表最大测试数据集,test代表最小测试数据集;

-n:每个测试项目运行的次数,如果需要SPEC CPU2000自动计算测试分值,需要指定运行次数等于或大于3,即n>=3;

-I:测试过程中如果某个用例发生错误,则跳过错误用例,继续执行其他用例,如果不加该参数,程序运行过程出现错误时,SPEC CPU2000将停止测试;

all:SPEC CPU2000将运行基准测试程序中的所有测试项目。



三、命令补充:

执行SPEC CPU2000测试时,如果不使用-r与–u参数,得到的分值叫做Ratio数据。

-r:测试rate,rate数据指多核CPU情况下运行多个相同进程的分值,与-u联合使用。

-u:CPU的核数,用于多核CPU测试,与-r联合使用。

all:表示SPEC CPU2000将运行基准测试程序中的所有测试项目。

int:表示SPEC CPU2000将运行基准测试程序中的12个定点测试项目。

fp: 表示SPEC CPU2000将运行基准测试程序中的14个浮点测试项目。

164:表示SPEC CPU2000将运行基准测试程序中164.gzip这个程序。


四、举例说明SPEC CPU2000常用测试命令组合:

1.runspec -c test.cfg -i test -I all

基于最小测试数据集快速执行所有的测试,测试过程中如果某个用例发生错误,则跳过错误用例,继续执行其他用例。

2.runspec -c test.cfg -i ref -n 3 -I all

基于最大测试数据集全面执行所有的测试,用于测试单核CPU,测试过程中如果某个用例发生错误,则跳过错误用例,继续执行其他用例。

3.runspec -c test.cfg -i ref -n 3 -r -u 4 -I all

基于最大测试数据集全面执行所有的测试,用于测试4核CPU,测试过程中如果某个用例发生错误,则跳过错误用例,继续执行其他用例。

4.runspec -c test.cfg -i ref -n 3 -r -u 8 -I all

基于最大测试数据集全面执行所有的测试,用于测试8核CPU,测试过程中如果某个用例发生错误,则跳过错误用例,继续执行其他用例。

5.runspec -c test.cfg -i ref -n 3 -r -u 8 -I int

基于最大测试数据集执行12个定点的测试,用于测试8核CPU,测试过程中如果某个用例发生错误,则跳过错误用例,继续执行其他用例。

6.runspec -c test.cfg -i ref -n 3 -r -u 8 -I 164

基于最大测试数据集只执行164单个测试,用于测试8核CPU,测试过程中如果某个用例发生错误,则跳过错误用例,继续执行其他用例。


五、test.cfg文件软硬件、测试环境修改:


1、test.cfg文件中的常用修改选项说明,这个需要根据自己的机器实际配置情况进行修改:

  1. Modify these variables according to your system, vendor, run environment

etc.

company_name = XYZ Inc. //输入公司名字

hw_model = ASUS SK8V, Opteron (TM) 150 //主板型号

hw_cpu = AMD Opteron (TM) 150 //CPU 类型

hw_cpu_mhz = 2400 //CPU 频率

hw_disk = IDE, WD2000 //硬盘型号

hw_fpu = Integrated

hw_memory = 2 x 512 PC3200 DDR SDRAM CL2.0 //内存情况

hw_avail = May-2003 //硬件使用日期

test_date = //测试日期

sw_file = Linux/ext3 //软件的文件系统

sw_os = CentOS //操作系统

hw_vendor = //硬件开发厂家

tester_name = XYZ Inc. //测试者

license_num = 9999 //软件序列号,不需要修改

hw_ncpu = 1

hw_ncpuorder = 1

hw_ocache = N/A

hw_other = None

hw_parallel = No

hw_pcache = 64KBI + 64KBD on chip

hw_scache = 1024KB(I+D) on chip

hw_tcache = N/A

sw_state = Multi-user SuSE Run level 3

VENDOR =

action = validate

tune = base

output_format = asc,html,config //测试结束后输出的文件格式

ext = prefetch

check_md5 = 1

reportable = 0 //是否生成正式报告,0表示不,1表示是

verbose = 6

teeout=yes

teerunout=yes

2、特别注意:

reportable = 0,文件中缺省是0,需要修改为1。否则生成的报告会出现Invalid CINT2000 Result这些内容


六、spec2000在各种型号CPU和系统上的下载地址:

1.基于2F的spec2000下载地址:

2.基于3A的spec2000下载地址(32位操作系统):

七、解压安装:

将上述下载下的文件放在/home目录下,进行解压安装,命令如下:

比如解压2F上的spec2000:

tar zxvf spec2000-new-2f-lcc.tgz


Linpack

   Linpack用于测试高性能计算机系统浮点性能的benchmark。通过利用高性能计算机,用高斯消元法求解一元N次稠密线性代数方程组的测试,评价高性

能计算机的浮点性能。

   衡量计算机性能的一个重要指标就是计算峰值,例如浮点计算峰值,它是指计算机每秒钟能完成的浮点计算最大次数。包括理论浮点峰值和实测浮点

峰值:

   理论浮点峰值是该计算机理论上能达到的每秒钟能完成浮点计算最大次数,它主要是由CPU的主频决定的

   理论浮点峰值=CPU主频×CPU每个时钟周期执行浮点运算的次数×系统中CPU核心数目 
   实测浮点峰值是指Linpack测试值,也就是说在这台机器上运行Linpack测试程序,通过各种调优方法得到的最优的测试结果。这两个值只是作为衡量

机器性能的一个指标,用来表明机器处理能力的一个标尺和潜能的度量。

  下面主要介绍了单机测试linpack和集群测试linpack.

一、单机测试linpack

首先在/home/loongson/下创建linpack子目录,用于存放linpack相关测试文件。从龙芯官网下载的linpack测试文件存放在此处。

1.安装mpich2及设置环境变量

(1)下载 mpich2.tar.gz 压缩包;

(2)进入 mpich2.tar.gz 所在的目录, 将其解压到指定目录下(以/usr/local/为例),执行命令:

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

(3)设置mpich2的环境变量 PATH :

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

上述环境变量的设置只能在当前终端生效,切换终端环境以后无效。

提示:也可以在/etc/profile中增加上述语句,进行设置,设置完成后使用source /etc/profile,使环境变量立即生效,下次启动不需要再次设置。

(4)创建并配置/etc/mpd.conf 文件

执行以下两条语句:

echo secretword=loongson > /etc/mpd.conf

chmod 600 /etc/mpd.conf

2.大页模式

在/home/loongson/linpack目录下,建立脚本huge.sh,内容如下:

umount /mnt

mount -t hugetlbfs none /mnt

echo 3 > /proc/sys/vm/drop_caches

echo 80 > /proc/sys/vm/nr_hugepages

语句“echo 80 > /proc/sys/vm/nr_hugepages”用来设置大页。linpack可用的大页由nr_hugepages * 16M计算得出。执行命令cat /proc/sys/vm/nr_hugepages,

看输出是多少?程序执行时可以使用命令cat /proc/meminfo,看一下hugepages_free的个数。

测试过程中,根据物理内存实际大小,需要多次试验,最后确定合适的大页。

3.执行测试

(1)启动大页模式

./huge.sh

(2)后台启动mpd程序

mpd &

(3)修改HPL.dat,设置测试规模Ps和Qs

例如3A单路的Ps和Qs分别设置为1,3A双路的Ps和Qs分别设置为1和2

(4)执行linpack测试

3A单路单进程(即 4 核 4 线程)情况,执行命令 ./xhpl

3A双路两进程(即 8 核 8 线程)情况,执行命令 mpirun -np 2 ./xhpl

二、集群测试linpack

本次测试使用的集群模型是“一个主节点+两个其他节点”。

首先在每个节点的/home/loongson/目录中建立一个linpack目录,用于存放linpack相关测试文件,从龙芯官网下载的linpack测试文件存放在此处。

主节点和其他节点都需要执行“mpich2安装及设置环境变量”。

1.mpich2安装及设置环境变量

(1)下载 mpich2.tar.gz 压缩包;,将其放在制定的目录下(以放在/usr/local/目录下为例);

(2)进入 mpich2.tar.gz 所在的目录,将其解压到指定目录下(以/usr/local/为例),执行命令:

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

(3)设置mpich2的环境变量 PATH

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

在/etc/profile中增加上述语句,然后执行命令source /etc/profile,使环境变量立即生效。

(4)创建/etc/mpd.conf 文件

在mpd.conf文件中添加以下两条语句:

echo secretword=loongson > /etc/mpd.conf

chmod 600 /etc/mpd.conf

如果其中一台测试机的mpd.conf没有进行相应的设置,则会产生如下的报错信息:

mpdboot_node1 (handle_mpd_output 420): from mpd on node3, invalid port info:

no_port

2.设置每个节点的主机名

需要修改每个节点的主机名称,且不能重复,最好有一定的规律。

例如,将主节点设置为node1,执行命令vim /etc/sysconfig/network,修改文件内容如下:

NETWORKING=yes

HOSTNAME=node1

3.所有节点设置ssh为免密码登录

主节点+其他节点的免密码设置规则:

(1)主节点的公钥追加到其他所有节点的authorized_keys文件中;

(2)其他所有节点的公钥追加到主节点的authorized_keys文件中。

设置步骤:

(1)在主节点node1上生成一对无须密码的公私密钥。执行命令ssh-keygen -t rsa,然后无需输入,连续按回车键,详细操作及输出如下所示:

root@node1 loongson]# ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa):

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

2d:df:ef:da:a9:aa:71:f6:c4:d8:21:0c:21:61:a0:e5 root@node1

The key's randomart image is:

+--[ RSA 2048]----+

| o.+.. |

| + . . . |

| . E . |

| + |

| S + . |

| o * . |

| . = = |

| + o o . |

| ....++= |

+-----------------+


经过上述操作,在主节点node1上生成了一对公私密钥,位于/root/.ssh/目录下。其中私钥文件为id_rsa,该文件用来保存机器的私钥信息;公钥文件为

id_rsa.pub,该文件需要复制到其他节点的/root/.ssh目录下。

(2)将主节点node1的公钥文件复制到集群的每个节点上。这里以复制到node2的节点为例,执行如下命令:

scp /root/.ssh/id_rsa.pub root@node2:/root

(3)登录到节点node2上,将主节点的公钥信息追加到/root/.ssh/authorized_keys文件中,并设置authorized_keys的权限,顺序执行以下两条命令:

[root@node2 ~]# cat id_rsa.pub >> .ssh/authorized_keys

[root@node2 ~]# chmod 600 .ssh/authorized_keys

(4)在其他每个节点上,重复步骤(1)-(3),即在每个节点上都生成一对公私密钥,并且将各自的公钥信息追加到主节点的/root/.ssh

/authorized_keys文件中。

4.大页模式

建立脚本huge.sh,内容如下:

umount /mnt

mount -t hugetlbfs none /mnt

echo 3 > /proc/sys/vm/drop_caches

echo 80 > /proc/sys/vm/nr_hugepages

如何设置合适的大页请参考“单机测试linpack”的相应内容。

5. 编辑除主节点之外的其他节点的/etc/hosts文件

将主节点的主机名称和映射的IP地址追加到各个节点自己的hosts文件中。例如在节点node2的hosts文件中增加一行内容:

172.17.109.188 node1

注意:如果其他节点的/etc/hosts中没有主节点的主机名称和IP映射关系,当执行mpdboot命令时会出现下面的错误信息:

mpdboot_node1 (handle_mpd_output 407): failed to handshake with mpd on node3; recvd output={}

从现在开始,以下操作只需要在主节点进行。

6.编辑主节点的/etc/hosts文件

必须将所有其他节点的主机名称和映射的IP地址追加到主节点的hosts文件中。例如主节点node1的hosts文件中增加:

172.17.109.163 node2

172.17.109.199 node3

注意:如果主节点的hosts文件中缺少其中一个节点的主机名称和IP映射关系,在主节点上执行mpdboot命令时会出现下面的错误信息:

[root@node1 linpack]# mpdboot -n 3 -f mpd.hosts

unable to obtain IP for host: node3

totalnum=3 numhosts=2

there are not enough hosts on which to start all processes

7.新建mpd.hosts文件

在主节点的/home/loongson/linpack目录中新建mpd.hosts文件,将参与集群联跑的节点主机名称存放到mpd.hosts文件中,每个主机名称占用一行,内容

如下:

node1

node2

node3

8.启动集群系统

在主节点上运行测试命令:mpdboot -n [主机数量] -f mpd.hosts,即启动集群系统。

[root@node1 linpack]# mpdboot -n 3 -f mpd.hosts

参数说明:

-n [主机数量] 表示参与集群联跑的所有节点和(包括主控节点和其它节点)

-f mpd.hosts 表示读取mpd.hosts文件

9.检查节点连接情况

需要检查所有的节点是否都已经正确连接到集群系统中,执行如下命令即可:

[root@node1 linpack]# mpdtrace –l

因为本次搭建的集群系统共包含三个节点,所以输出内容如下:

node1_44755 (172.17.109.188)

node2_50719 (172.17.109.163)

node3_46812 (172.17.109.172)

10.配置HPL.dat文件

在主节点上需要配置HPL.dat文件,主要就是修改Ps,Qs, Ns这三个值。首先介绍如何修改Ps和Qs的值。

设置Ps和Qs的原则:

(1)Ps<Qs

(2)P=2n,且n>=0。 Ps中的P最好选择 2 的幂,P=1,2,4,8,16, ...

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

例如集群系统中有两台3A双路主板,则联跑主机的总核数就是16,那么Ps中的P可以设置为1,Qs中的Q可以设置为4。

为了比较1x4和2x2的性能,可以在HPL.dat中Ps和Qs可以进行如下设置:

2 # of process grids (P x Q)

1 2 Ps

4 2 Qs

实际测试发现,1x4的性能比2x2性能要好些。

如果只需要测试1x4的性能,HPL.dat中Ps和Qs可以这样设置:

1 # of process grids (P x Q)

1 Ps

4 Qs


设置Ns的原则:

因为系统启动以后会占用一定的内存,通常将系统总内存的80%用来测试linpack。

一个双精度占8个字节,系统总内存的80%用来存N * N的双精度数矩阵时,N = sqrt(系统总内存 * 80% / 8bytes)时可以获得最好的性能指标。 ,

Ns的值可以根据以下公式确定:

sqrt(2048 * 8 * 1024 * 1024 * 80% / 8) = 41448

所以,Ns的值可以设置为41000。

当使用32G内存时(2048M/条),Ns的值可以这样确定:

sqrt(2048 * 16 * 1024 * 1024 * 80% / 8)=58617

可以将Ns的值设置为58000。

11.执行测试

格式:mpiexec -n [Ps*Qs的值] ./xhpl

例如,集群系统中有两块3A双路主板,执行以下命令:mpiexec –n 4 ./xhpl

12.退出并关闭集群

测试完成以后,退出并关闭集群,执行命令mpdallexit即可。

附录1:

在主节点上可以增加一个脚本multihuge.sh,这个脚本的作用就是代替了之前在每一台机器上手工执行./huge.sh, multihuge.sh脚本内容如下:

for i in 1 2 3

do

echo $i

ssh node$i pkill -9 xhpl

ssh node$i umount /mnt

ssh node$i mount -t hugetlbfs none /mnt

ssh node$i "echo 3 > /proc/sys/vm/drop_caches"

ssh node$i "echo 405 > /proc/sys/vm/nr_hugepages" done

使用说明:

(1)脚本对主节点可能会提示输入密码,解决办法就是将主节点自己的公钥文件id_rsa.pub中的

信息追加到自己的/root/.ssh/authorized_keys即可;

(2)这里的echo 405是针对一台3A双路8根内存设置的,实际测试时最好在一台机器上先试验出最大的数值,并且其他机器也使用相同的内存数目。

附录2:

HPL.dat中常见参数说明,下面只截取一部分,用来说明如何设置常用参数。

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)

5 1 # of problems sizes (N)

6 58000 60000 30 34 35 Ns

7 1 # of NBs

8 128 NBs

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

10 2 # of process grids (P x Q)

11 2 Ps

12 2 Qs

参数说明: (1)1、2 行为注释说明行,不需要作修改

(2)第 3、4 行说明输出结果文件的形式

“device out”为“6”时,测试结果输出至标准输出(stdout)

“device out”为“7”时,测试结果输出至标准错误输出(stderr)

“device out”为其它值时,测试结果输出至第三行所指定的文件中

(3)第5行说明需要测试矩阵的个数;

本例中是第5行的数字为1,说明只测试矩阵58000,但不测试60000、30、34、35四个矩阵

(4)第6行说明每个矩阵的大小

矩阵的规模 N 越大,有效计算所占的比例也越大,系统浮点处理性能也就越高,但与此同时,矩阵规模 N 的增加会导致内存消耗量的增加,一旦系统实际内

存空间不足,使用缓存,性能会大幅度降低。因此,对于一般系统而言,要尽量增大矩阵规模 N 的同时,又要保证不使用系统缓存。

考虑到操作系统本身需要占用一定的内存,除了矩阵 A(N×N)之外,HPL还有其它的内存开销,另外通信也需要占用一些缓存(具体占用的大小视不同的 MPI

而定)。一般来说,矩阵 A 占用系统总内存的 80%左右为最佳,即 N*N*8=系统总内存×80%。这是一个参考值,具体 N 的最优选择还与实际的软硬件环境密

切相关。

(5)第 7、8 行说明求解矩阵分块的大小 NB

为提高数据的局部性,从而提高整体性能,HPL 采用分块矩阵的算法。分块的大小对性能有很大的影响,NB 的选择和软硬件许多因数密切相关。NB 值的选

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

Cache line 的倍数等等。NB 大小的选择还跟通信方式、矩阵规模、网络、处理器速度等有关系。

一般通过单节点或单 CPU 测试可以得到几个较好的 NB 值,但当系统规模增加、问题规模变大,有些 NB 取值所得性能会下降。所以最好在小规模测试是

选择三个左右性能不错的 NB,在通过大规模测试检验这些选择。

(6)第 9 行,选择处理器阵列是按列的排列方式还是按行的排列方式

按列的排列方式适用于节点数较多、每个节点内 CPU 数较少的瘦系统;而按行的排列方式适用于节点数较少、每个节点内 CPU 数较多的胖系统。在集群

系统上,按列的排列方式的性能远

好于按行的排列方式。在 HPL 文档中,其建议采用按行的排列方式,可能和 MPI任务递交的不同方式有关。

(7)第 10~12 行说明二维处理器网格,P x Q要遵循以下几个要求:

P x Q = 进程数,这也是 HPL 的硬性规定;

P x Q = 系统CPU数 = 进程数;

P≤Q,这是一个经验值,一般来说,P 的值尽量取得小一点;

P=2n ,即 P 最好选择 2 的幂,即P=1,2,4,8,16,...。


linpack下载地址:

1.xhpl和HPL.dat下载地址:

2.mpich2.tar.gz下载地址:
3.Loongson3A/3B上linpack简介

备注:上述软件可以在redaht系统上使用,不支持debian系统。

词条统计

浏览:22 次

字数:24152

最后编辑:2017-08-08