benchmark和性能评估综述
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Benchmark和性能评测综述
1.简介
1.1性能评估标准
用户使用计算机的主要原因是使工作效率更高,更快的完成任务。这也是用户非常关心计算机性能的原因。
那么计算机性能评价的标准是什么?直到上世纪80年代后期,评价计算机性能的主要标准是MIPS(million instructions per second)和Mflops(million floating-point operations per second);通过计算每条指令在运行时的百分比,就可以得到这两个数据。但是这两个标准在评价不同的指令集体系结构就失去了意思,例如CISC体系结构和RISC体系结构,RISC指令比CISC 指令更简单更快。
但是,人们一直都想建立一个性能评测的标准,而现在公认的方法就是通过运行评测程序(我们也称之为benchmark),比较运行的时间来评价性能的好坏。
1.2关于评测程序(benchmark)
选择合理的评测程序是正确评价性能的基础,下面列出5种评测程序,他们评测的准确程序依次递减
1.真实的程序:虽然得到的结果最真实,但是经常碰到一些由于依赖操作系统或者编译器
而引起的移植性问题
2.修改过的程序:很多情况下通过修改真实的程序来构造基准程序,主要是为了两个原因:
要么增强可移植性,要么是为了集中测试某种特定的系统功能
3.程序内核:从真实的程序中提取出一些小而关键的程序片断来评估程序性能。程序内核
的最大用途就是分别测试机器的各项性能,以解释运行真实程序性能差异的原因。典型的是Linpack和Livermore。
4.小型基准程序:通常只有10-100行那么大,用户在测试前往往就知道了运行结果。
5.综合(synthetic)基准程序:也可以说是人造(synthetic)程序,取大量程序的指令和操作书出
现频率的平均值,与真实的情况差距最远,只是最早期的时候才有这样的评测程序。
然而因为机器的性价比关系到企业的兴衰,各企业都不遗余力的提高机器运行广泛使用的测试软件的性能,可是针对每个真实程序优化却是不太可能的。于是,将一些基准测试软件集中在一起来评测处理器性能的方法就十分的流行,它的优点是单独某一种测试软件的弱点会被另一种测试软件所掩盖。
1.3关于执行时间
但是怎么根据一组程序的运行结果综合的评价计算机的性能?下面是几个方法
总执行时间:最简单的相对相对性能综合评价方法就是比较几个程序的总的执行时间。对总执行时间取算术平均值,就得到平均总执行时间…
加权执行时间:总执行时间方法的问题是每个程序在工作负载中所占的比例可能并不相同,如果他们所占的比例不同,那么有两种方法可以近似评估机器的综合性能。
第一种方法是为每一个程序赋予一个权值,将各个程序的权值和执行时间乘积加起来就是加权执行时间
第二种方法是将执行时间对一台参考机器归一化,然后去归一化执行时间的平均值。。。。
时间是评价性能的标准,但是对于计算机的用户和管理员来说,时间的概念是不同的。对于计算机用户来说,当一个程序在一台机器上运行比其他机器上运行的时间短时,用户认为这台计算机快,也就是响应时间;而对于管理员来说,单位时间内完成的任务多的机器比较快,也就是吞吐量。但是关键的衡量标准还是时间,相同的任务花费的时间越少,速度越快,区别是单任务还是多任务。
1.4执行时间的组成
同时,也必须清楚到底是衡量的哪部分时间,执行时间可能有不同的定义。时间最直接的定义是也称为外部时钟,相应时间,指的是完成一项任务所需要的延迟,包括磁盘访问时间,内存访问时间,输入输出操作时间,操作系统开销,也就是所有任务的执行时间包括在内。但是当多个程序同时运行的计算机中,当一个程序等待I/O操作完成时,CPU会转而执行另一个程序,此时计算机不一定会使每个程序经过的时间最短。这样,我们就需要另一个术语将这种情况考虑在内。CPU时间体现了这一区别,它指得是CPU计算耗用的时间,而不包括等待I/O操作完成或运行其他程序的时间。CPU时间又可细分为执行程序的时间(用户CPU时间)和完成程序执行所需的操作系统功能调用时间(称为系统CPU时间)。
了解CPU时间的组成也是非常重要,它可以指导我们通过对体系结构的改进而改进CPU时间。
CPU时间=一个程序的CPU时钟周期数*时钟周期长度
CPU时间=IC(指令数)*CPI*时钟周期长度
CPU时间和三个因素因素有关:时钟周期长度,每条指令执行所需的时钟周期数和程序的指令数。这三个因素对CPU时间的影响是相同的。这三个因素相关联的技术如下:
●时钟周期的长度—由硬件技术和计算机组成决定
●CPI—由计算机组成和指令集的系统结构决定
●指令数—由指令集的系统结构和编译器决定
几个因素中,指令集的系统结构和计算机组成是和体系结构相关的,所以对体系结构研究者来说,往往通过改进这两部分来改进CPU时间。
指令集结构设计有以下几个方面
●寻址模式:增加寻址模式能够明显减少指令数量,但是也增加了设计计算机的复杂度和
CPI
●操作数的大小和类型:这影响到指令的长度。
●指令类型:增加新的指令可能因为减少指令数提高性能,但是也可能因为增加时钟周期
长度而降低性能
●控制流指令:现在的很多处理器通过深度流水来提高时钟频率,分支失败的代价随着流
水线深度加深而增大,所以控制流指令和分支预测当然也值得注意
●指令集的编码:应该在下面几个因素之间找到平衡,希望有尽可能多的寄存器和寻址模
式,尽量少增加指令的长度,使程序尽量小,指令的长度易于流水线处理。
。。。(可能有遗漏)
计算机组成包括下面几个方面
●是否流水线
●是否动态调度
●是否多发射
●分支预测技术
●。。。(可能有遗漏)
当然我们评价的可能并不只是CPU的性能,而是包括存储层次在内的总体性能,那么需要用CPU执行时间而非CPU时间来评价
CPU执行时间=(CPU时钟周期+存储器停顿周期数)*时钟周期时间
存储器停顿周期数=缺失次数*缺失代价
=执行指令数*缺失次数/指令数*缺失代价
=执行指令数*存储器访问次数/指令数*缺失率*缺失代价
缺失率是cache设计的最重要的指标之一
上面所说的都是影响执行时间的一些重要的因素,人们常常通过运行benchmark通过分析这些因素来得到系统性能好坏的原因,我们在后面将看到很多论文中对他们的分析。
1.5 影响性能的非体系结构因素
●编程语言
经常使用的几种语言是Fortran,C,C++,Java,每种语言的特性造成了性能的差别。例如调用顺序,指针语义,字符串语义,面向对象的语言的一些特点都会影响执行时间。
●编译器
高级语言是通过编译器转化成机器代码,所以编译器的对性能的影响是非常大的
●系统库实现
benchmark一般来说都需要调用系统函数库,有的benchmark在库中花的时间非常多,例如Whetstone达到了40%-50%,所以系统库实现的效率也会影响性能。
2.benchmark介绍
2.1早期的benchmark
2.1.1 Whetstone和Dhrystone
历史上第一个benchmark是于1976年发布的Whetstone。它是前面提到的第五类也就是综合测试程序。
Whetstone是Fortran语言编写的,由几个模块组成,每个模块包括一个特定种类的语句,例