1、于是,将一些基准测试软件集中在一起来评测处理器性能的方法就十分的流行,它的优点是单独某一种测试软件的弱点会被另一种测试软件所掩盖。1.3关于执行时间但是怎么根据一组程序的运行结果综合的评价计算机的性能?下面是几个方法总执行时间:最简单的相对相对性能综合评价方法就是比较几个程序的总的执行时间。对总执行时间取算术平均值,就得到平均总执行时间加权执行时间:总执行时间方法的问题是每个程序在工作负载中所占的比例可能并不相同,如果他们所占的比例不同,那么有两种方法可以近似评估机器的综合性能。第一种方法是为每一个程序赋予一个权值,将各个程序的权值和执行时间乘积加起来就是加权执行时间第二种方法是将执行时间对一
2、台参考机器归一化,然后去归一化执行时间的平均值。时间是评价性能的标准,但是对于计算机的用户和管理员来说,时间的概念是不同的。对于计算机用户来说,当一个程序在一台机器上运行比其他机器上运行的时间短时,用户认为这台计算机快,也就是响应时间;而对于管理员来说,单位时间内完成的任务多的机器比较快,也就是吞吐量。但是关键的衡量标准还是时间,相同的任务花费的时间越少,速度越快,区别是单任务还是多任务。1.4执行时间的组成同时,也必须清楚到底是衡量的哪部分时间,执行时间可能有不同的定义。时间最直接的定义是也称为外部时钟,相应时间,指的是完成一项任务所需要的延迟,包括磁盘访问时间,内存访问时间,输入输出操作时
3、间,操作系统开销,也就是所有任务的执行时间包括在内。但是当多个程序同时运行的计算机中,当一个程序等待I/O操作完成时,CPU会转而执行另一个程序,此时计算机不一定会使每个程序经过的时间最短。这样,我们就需要另一个术语将这种情况考虑在内。CPU时间体现了这一区别,它指得是CPU计算耗用的时间,而不包括等待I/O操作完成或运行其他程序的时间。CPU时间又可细分为执行程序的时间(用户CPU时间)和完成程序执行所需的操作系统功能调用时间(称为系统CPU时间)。了解CPU时间的组成也是非常重要,它可以指导我们通过对体系结构的改进而改进CPU时间。CPU时间=一个程序的CPU时钟周期数*时钟周期长度CPU
4、时间=IC(指令数)*CPI*时钟周期长度CPU时间和三个因素因素有关:时钟周期长度,每条指令执行所需的时钟周期数和程序的指令数。这三个因素对CPU时间的影响是相同的。这三个因素相关联的技术如下: 时钟周期的长度由硬件技术和计算机组成决定 CPI由计算机组成和指令集的系统结构决定 指令数由指令集的系统结构和编译器决定几个因素中,指令集的系统结构和计算机组成是和体系结构相关的,所以对体系结构研究者来说,往往通过改进这两部分来改进CPU时间。指令集结构设计有以下几个方面 寻址模式:增加寻址模式能够明显减少指令数量,但是也增加了设计计算机的复杂度和CPI 操作数的大小和类型:这影响到指令的长度。 指
5、令类型:增加新的指令可能因为减少指令数提高性能,但是也可能因为增加时钟周期长度而降低性能 控制流指令:现在的很多处理器通过深度流水来提高时钟频率,分支失败的代价随着流水线深度加深而增大,所以控制流指令和分支预测当然也值得注意 指令集的编码:应该在下面几个因素之间找到平衡,希望有尽可能多的寄存器和寻址模式,尽量少增加指令的长度,使程序尽量小,指令的长度易于流水线处理。(可能有遗漏)计算机组成包括下面几个方面 是否流水线 是否动态调度 是否多发射 分支预测技术 。当然我们评价的可能并不只是CPU的性能,而是包括存储层次在内的总体性能,那么需要用CPU执行时间而非CPU时间来评价 CPU执行时间=(
6、CPU时钟周期+存储器停顿周期数)*时钟周期时间 存储器停顿周期数=缺失次数*缺失代价 =执行指令数*缺失次数/指令数*缺失代价 =执行指令数*存储器访问次数/指令数*缺失率*缺失代价缺失率是cache设计的最重要的指标之一上面所说的都是影响执行时间的一些重要的因素,人们常常通过运行benchmark通过分析这些因素来得到系统性能好坏的原因,我们在后面将看到很多论文中对他们的分析。1.5 影响性能的非体系结构因素 编程语言经常使用的几种语言是Fortran,C,C+,Java,每种语言的特性造成了性能的差别。例如调用顺序,指针语义,字符串语义,面向对象的语言的一些特点都会影响执行时间。 编译器
7、高级语言是通过编译器转化成机器代码,所以编译器的对性能的影响是非常大的 系统库实现benchmark一般来说都需要调用系统函数库,有的benchmark在库中花的时间非常多,例如Whetstone达到了40%-50%,所以系统库实现的效率也会影响性能。2.benchmark介绍2.1早期的benchmark2.1.1 Whetstone和Dhrystone历史上第一个benchmark是于1976年发布的Whetstone。它是前面提到的第五类也就是综合测试程序。Whetstone是Fortran语言编写的,由几个模块组成,每个模块包括一个特定种类的语句,例如整型操作,浮点操作,if语句,ca
8、lls语句等等。它有很多的浮点数据和浮点操作,同时由于有很多的循环,所以代码的局部性非常高,指令cache命中率将近100%。跟Whetstone类似的是Dhrystone,他们是最有名的两个综合测试程序。下面两个表分别是对Whetstone和Dhrystone程序中用户代码中各个函数以及库函数所占时间的比例2.1.2Linpack和Livermore LoopsLinpack是第一个内核级的测试程序,也就是上面提到的第三类测试程序,于1976年发布。按照作者的说法,一开始并不是想作为一个benchmark发布,只是收集了fortran程序里面常用的线性代数算法。Linpack程序中很有很大规
9、模的矩阵,大量的浮点运算。由于大量的时间花在一个函数执行中,所以很高的指令局部性,但是几乎没有数据局部性。同时对cache的配置非常的敏感,不同的数组会导致数据在cache中不同的分布。Livermore Loops包含24个内部循环,都是从物理学计算中提取出来的,程序中有很多的浮点操作和对数组的访问。下图是对Linpack程序各函数所占时间分析2.1.3 其他的早期的benchmark2.2 benchmark的发展随着编译技术的发展以及各个企业针对测试程序进行的优化,以前的小的测试程序已经不能正确反映机器的性能。例如SPEC89里面的Matrix300性能因为编译器优化而提高的几十倍。所以
10、普遍的趋势是修改真实的程序来作为benchmark。同时计算机应用的范围也越来越广,服务器,高性能处理,多媒体等等,它们的程序行为是不同的,所以benchmark也表现出了多样化的趋势。2.3 主流的benchmark(不知道这样的标题合理不)下面对每个benchmark的介绍大都围绕几个问题 这个benchmark是用来做什么的 大概包含了哪些应用 测量了哪些部分的性能,没有测量哪些部分的性能 评估性能高低的标准(metric)是什么 为什么新的版本要替换旧的版本下面所有图表和数据都是摘自论文中,具体的配置请参照原文。2.3.1 桌面应用桌面应用的特点:复杂的控制指令,好的指令和数据的局部性
11、1)SPEC CPUSPEC 是最成功的标准成套测试软件之一,它是在20世纪80年代末期为了评估工作站性能而产生的。目前SPEC和基于它开发出来的测试软件已经基本覆盖了各个不同的应用领域。SPEC CPU是SPEC的桌面应用测试程序。SPEC的基准测试程序是从真实的应用中提取出来,并且提供源码使其可以在不同的UNIX工作站上编译运行。SPEC89是SPEC CPU最早的版本,得到了工业界的认同。但是随着处理器,编译器,计算机系统(原文是system,不知道对不对)的迅猛发展,测试程序也是需要不断发展的。到现在已经发展到了第四版:SPEC CPU2000,最开始的叫SPEC89,中间经历了SPE
12、C92,SPEC95。作为一个计算密集型的benchmark,SPEC CPU测试处理器,存储层次和编译器的性能,但是并不测试I/O,网络和图形显示的性能,SPEC程序特意精简并且最小化程序的I/O活动。SPEC CPU根据用户的需要测试性能的不同的方面,可以以单个程序响应时间或者吞吐量作为性能评价标准。同时,编译时可以选择”conservative” 和”aggressive”两个参数,conservative表示编译器的通常的优化参数,而aggressive表示最佳性能的优化参数。SPEC CPU的程序是在不断更新的,主要表现在下面几方面 运行时间:有的benchmark运行的时间太短,有
13、的部分稍作改变对性能影响就很大。 应用的大小:实际的应用的大小和复杂度都是在不断增加的,基准测试程序应该跟随其发展。 应用的类型:SPEC感觉到应该有更多类型的应用应该加进来。例如从SPEC92到SPEC95增加了图像压缩和数据库的基准程序 可移植性:SPEC发现benchmark和运行benchmark的工具跟操作系统无关是很重要的,但是一开始的SPEC CPU是针对UNIX的,并且特意选择依赖POSIX和ANSI标准开发环境,SPEC将增加针对其他操作系统的版本。 不断更新程序:SPEC一直是希望在一个benchmark上性能的提高能代表着整体性能的提高,但是随着竞争越来越激烈,可能有的提
14、高只是针对某个程序。通过不断更新程序,希望优化能够针对性更弱。 特殊的程序:有的程序因为编译器优化或者其他原因导致性能变化太大,不能表现实际的性能,需要删除。例如SPEC89里面的Matrix300因为编译器优化性能达到了10倍,所以在SPEC92中没有出现。上图是SPEC2000中包含的应用2)其他桌面应用的benchmark其他我所见到的桌面应用一般都是第三类也就是程序内核级别的,提取一些很经典的算法。有Linpack,BYTEmark。2.3.2 java client/server1)java技术相关Java技术拥有”write-once-run-anywhere”的特性,他的基石是J
15、ava虚拟机(Java Virtual machine -JVM)技术。Java虚拟机是在硬件平台上用软件实现的,在Java程序运行之前,Java虚拟机必须在目标平台在上安装好,正因为Java虚拟机可以在不同的平台安装,所以才提供了Java程序的可移植性。java程序编译后变成字节码(Bytecode)组成的文件,字节码可以看成是运行在Java虚拟机上的指令。指令集体系结构的最根本的区别在于CPU内部的存储类型有堆栈,累加器和寄存器。Java虚拟机使用的是堆栈,也就是所有的操作数在使用之前都要放到栈顶。Java虚拟机的实现方式有三种,解释执行,Just-In-Time(JIT)和通过硬件实现(
16、Java Processor)。解释执行是通过Java解释器实现的,是执行Java Bytecode的最原始的方法,解释器顺序读取并执行用户程序的Bytecode.解释器的优点是简单,不需要太大的memory空间,易于实现。Just-In-Time是一种利用编译器将Java字节码转化成本地码的技术。通常来说,JIT比解释执行效率更高,因为解释器解析每个遇到的字节码,而JIT只是在第一次遇到的时候将其转化成本地码。Java processor是在硬件上实现的Java虚拟机,字节码就是Java processor的本地码,可以直接在上面运行。由于java虚拟机是在软件上实现的,所以有一些不同版本的
17、JVM实现,最流行的是Sun JDK和Kaffe VM,很多benchmark存在的原因之一就是为了比较各个JVM的性能。2)Java client benchmark对Java client becnhmark的介绍,以及对client应用的介绍2.1)SPECjvm98SPECjvm98是一个用来衡量客户端Java虚拟机的性能的benchmark。它含有8组测试程序,其中5组是从真实程序中提取出来的;其中7组程序用来测试性能,而1组程序测试Java和Java虚拟机的特点。SPECjvm98能够测试load程序,验证.class文件,JIT编译和运行的时间。在软件方面,能够测试JVM性能,J
18、IT编译器和操作系统的性能;在硬件方面,测试CPU,cache,memory和其他特定平台的硬件性能。一共有3个输入集S1,S10,S100。2.2)Java Grande顾名思义,Java Grande包括一些大型的Java程序。在这里,大型的程序是指有很多的处理,I/O,网络带宽或者访存。开发这个benchmark的目的是为了提供测试和比较不同的JAVA执行环境,这对大型的应用是很重要的。不仅包含了科学和工程计算的应用,还包括一些数据库方面和商业方面的模拟。benchmark分为4部分 串行的benchmark,在单处理机上执行 多线程的benchmark,在共享存储多处理机上执行 MPJ
19、 benchmark,在分布存储的多处理机上执行 C benchmark,是第一个部分的子集,用C语言写的而每个部分又包括几个层次的测试 Low level operations:衡量底层操作的性能,例如数学库操作,函数调用以及强制类型转换 Kernels:程序内核级别的程序 Large scale application:真实的大型程序。在比较各个java平台的性能上可能没有前面两部分程序有针对性,但是可以真实的表现Java的性能。2.3)其他Java client benchmarkJava client benchmark在各种类型的benmark中应该算是数量最多的,不过他们大概都集中
20、在两个方面:一是测试底层操作,另一种是程序内核级别的测试。第一类的benchmark有JavaWorld,CaffeineMark,Java Microbenchmarks,UCSD benchmark for Java等第二类的benchmark有Java SciMark,jBYTEmark,Linpack Java version等其中一些benchmark是从C版本的修改过来的2.4)Java client应用表现在体系结构方面的特点本节内容主要参考Architectural Issues in Java Runtime Systtems,主要通过运行SPECJVM98对比解释执行和JI
21、T模式在性能造成差别 指令分析不管在解释模式或者JIT模式下,都有15%-20%的控制转移指令,25%-40%的访问内存指令,这跟C和C+的程序并无太大差异。相比之下,解释模式下的内存操作更多,因为JVM的操作数都放在栈上,所以操作数都是从内存中读或者写;而JIT将指令转化为本地码,内存的操作转化成寄存器操作。 分支预测虚函数是面向对象语言实现继承的方法,在编译阶段无法确定跳转的地址,导致编译成为间接跳转指令。跟条件分支指令相比,间接跳转难于预测,因为条件分支只有一个目标地址而间接跳转有多个。对比解释模式和JIT模式下的分支预测率,JIT下比较好,因为JIT将虚函数转化为内联函数的形式,减少了
22、间接跳转的次数3)Java server benchmark Java技术发展得非常快,不仅在客户端,用Java语言编写的应用在服务器端也对以前的技术有很大的冲击,但是需要benchmark来衡量他的性能。主要衡量的方面包括数据库服务,web服务等3.1)VolanoMark 97年发布,历史上第一个测试Java server JVM性能的benchmark。它是一个聊天室程序,主要用来发现Java服务器运行多个线程时候的问题。虽然能够反映一些问题,但是不够全面。3.2)jBOB & pBOBjBOB(Business object benchmark for Java)是一个用来衡量简单的事
23、务型应用的Java服务器的性能。它使用TPC-C的模型,也就是说模拟的是在线事务处理(OLTP)类型的应用,但是它和TPC-C侧重点不同:TPC-C衡量包括客户端,网络,服务器在内的整个系统的软件和硬件的最大性能,但是jBOB只通过计算事务的吞吐量衡量服务器端的性能。模拟三层模型,第一层客户端,遵循TPC-C的模型,中间层Java程序是第三层数据库服务器(JDBC)的前端。pBOB(portable business object benchmark)是设计来衡量服务的处理器-存储子系统,以及相应的软件性能。与jBOB类似,pBOB也是根据TPC-C的模型设计的。pBOB更注重纯粹的Java环
24、境的性能,为此他将第三层的数据库表换成了Java的类和记录,同时用Java线程替代客户端进行输入。3.3)SPECjbb2000 SPECjbb2000是SPEC的第一个用来衡量Java服务器端的benchmark。SPECjbb2000也根据TPC-C模型设计的。它跟pBOB类似,是一个三层的系统,主要着重于中间层也就是商业逻辑和对象操作,而客户端用线程代替,数据库用二叉对象树代替。只注重服务器端的性能。软件方面,测试JVM,JIT,garbage collection,线程,以及操作系统的一部份性能硬件方面测试CPU,cache,memory,memory,可扩展性(SMP)。3.4)SP
25、ECjAppServer200xSPECjAppServer2001-2004是衡量Java Enterprise Application Servers 性能的client/server的benchmark。通过结合SPECjvm98和SPECjbb2000,利用了J2EE的API建立了一个完整的端到端 的web应用,它衡量整个系统的性能而不仅仅客户端或者服务器端。测试Java Enterprise Application Server,JVM,SUT,RDBMS,Web Server2.3.3多媒体应用让通用处理器增加处理多媒体应用的能力并不是一件容易的事,因为多媒体应用跟桌面应用有非常大
26、的不同,包括下面一些方面: 实时响应:多媒体应用例如视频会议需要实时响应。例如,为了达到一个稳定的输出,跳过几个frame的方法比为了显示所有frame从而降低吞吐率的方法更好。 连续的多媒体数据类型:多媒体应用的输入一般是从模拟信号中采集出来的,很多连续的多媒体的整型数据仅仅是8bit或16bit,这对通常的桌面应用的32bit或64bit的数据宽度是个很大的浪费 细粒度的数据并行性:对于信号处理和图形图像应用,数据并行性是天生的。因为有很多小的数据单元,例如象素。大都利用SIMD的方法提取细粒度的数据并行性。 线程级并行性:大多数的多媒体应用含有多于一个的线程,例如video解码译码,au
27、dio解码译码以及后台线程 指令局部性:信号和图像处理通常包含一些小的循环和kernel级的算法,它们在总的处理时间上占很大部分。 需要大的存储带宽:一般的多媒体应用的输入集都比较大,需要大的存储带宽,同时cache性能因为没有数据局部性比较少而降低 高的网络带宽:处理器的时钟频率或者memory带宽的发展可能跟不上网络速度的发展,所以可能需要新的硬件和指令集来支持。 数据重组的能力:如果没有数据重组的能力,即使有SIMD指令,也不能得到很大的性能的提高。因为处理器需要适应不同的数据流的格式。1) Intel Media BenchmarkIntel推出MMX指令集后,发布了Intel Med
28、ia Benchmark。它的发布是因为当时并没有足够的工业标准的多媒体benchmark。但是并没有发布源码,所以不能用来MMX和其他多媒体指令集的差别。2) UCLA MediaBenchUCLA MediaBench 是为正在出现的多媒体和通信系统的应用设计的benchmark。这些应用和相应的输入集的选择是根据作者的经验和市场的驱动。1.0版本有19个应用,包括图像压缩,视频压缩,语言编码,语音识别,加密,图文显示,3D显示。UCLA MediaBench设计中遵循的很重要的一个概念就是数据集和应用是一样重要的。3) Berkeley Multimedia Workload在UCLA MediaBench工作基础上建立的Benchmark,也遵循UCLA MediaBench的数据集和应用一样重要的原则。选择应用主要的动机是为了覆盖更多的多媒体处理,主要考虑应用的使用人数,代码质量(性能,鲁棒性)和可维护性。4) 多媒体应用表现在体系结构方面的特点本节主要参考Desgin and Characterization of Berkeley Multimeida Workload。Berkeley multimedia workload和UCLA MediaBench和SPEC95指令的比
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1