概览SPEC

Standard Performance Evaluation Corporation:标准性能测试协会,一个致力于发布管理计算机性能标准化测试的组织.建立于1988年,会员包括Apple,Dell,IBM,Intel,Microsoft和Sun。Spec的测试例子被光感应用于计算机系统的性能测试中。

SPEC的测试例子是为了测试实际生活中的场景,如SPEC web2005通过并发HTTP请求测试web服务器的性能.SPEC CPU通过多个例子的运行时间长短衡量CPU的性能。SPEC的测试例子都采用平台无关代码编写,以便能使用各种编译器和平台来测试。现在的工业界更是针对SPEC中的测试例子做优化来证明编译器,CPU,web服务器等等的性能提升。

SPEC发布了以下性能测试集:

  • SPEC CPU2006/2000用来测试CPU,存储和编译器的性能
  • SPEC jms 2007,用于测试JAVA消息服务的性能
  • SPEC web 2005 用于测试PHP或者JSP的性能
  • SPEC Viewperf,用于测试OpenGL 3D图形系统的性能
  • SPEC apc,用于测试给定系统中多个3D交互应用的性能
  • SPEC OMP2001 使用OpenMP测试并行系统的性能
  • SPEC MPI2007 使用MPI测试并行系统的性能
  • SPEC JVM 2008,测试Java Runtime Environment(JAVA运行时环境,JRE)在不同客户和服务器系统上的JAVA性能
  • SPEC jAppServer2004, 测试JAVA 2 Enterprise Edition应用服务器的性能
  • SPEC jbb2005,同样测试JAVA系统的性能,但测试的是a three-tier client/server system (with emphasis on the middle tier)
  • SPEC Mail2001,测试邮件服务器的

SPEC CPU 2000:

SPEC CPU 2000是SPEC用于测试CPU,编译器和存储性能的,包括整点CINT2000和浮点CFP2000两部分,选取了常用的一些应用作为测试标准,SPEC PU 2000曾是CPU,编译器和存储研究人员证明自己成果的标准,现在已经被SPEC CPU 2006代替,关于2006,本博以后也将会有文章介绍之,敬请期待。

CINT2000

这是用于整点测试的,测试整点算术的性能,包括编译器,压缩,象棋等程序。具体包括以下几个例子:

  • 164.gzip:C语言编写,很流行的数据压缩程序,使用Lempel-Ziv coding(LZ77)作为压缩算法。SPEC中的gzip除了读入集外没有其他文件I/O操作,所有压缩和解压都在主存中进行,方便测试CPU和存储子系统。输入:SPEC中的gzip有五个输入,一个TIFF图像,一个web服务器的log,一个程序二进制文件,一个随机数据和一个源码tar包。每个输入集都使用多个不同的压缩级别压缩解压,每次完成之后都会做输入输出对比。
  • 175.vpr:C语言编写,FPGA中的电路定位和路由程序,用于计算机辅助电路设计领域。它自动在一个FPGA芯片上实现技术映射,在算法上属于组合优化类的程序。VPR在电路定位中使用了模拟退火法(simulated annealing),初始的随机定位通过本地的被当前位置的干扰反复修正来提高定位质量,这种方式和金属通过自然冷却来增强韧性比较相似。路由在最内层路由循环使用Dijkstra算法的变种来将一个网中的多个终点连接起来。冲突检测与避免在该最内层算法的上层用于解决不同 电路信号连接超过FPGA内部连接上限的问题。输入:net.in文件提供一个电路网表,包括电路的定位和路由信息,该网表来自MCNC电路公司的benchmark。arch.in文件描述FPGA的架构,也就是电路将要基于的。place.in文件提供电路定位,VPR将用它执行路由。在VPR执行定位时,该文件被屏蔽。输出:place_log.out,route_log.out,route.out,place,out.SPEC将会根据前三个文件判断是否输出正确,第四个文件因为随机数会有不同,所以无法判断。VPR被执行两侧,第一次执行定位,第二次执行路由。
  • 176.gcc:C语言编写,C语言优化编译器。该GCC基于GCC 2.7.2.2版本,为摩托罗拉88100处理器生成机器码.该gcc就是一个实际运行的编译器,并开启了很多优化。输入:有5个输入,都是预处理过的C代码,integrate.i和expr.i来自GCC自身,166.i通过并置SPEC int2000中的一个Fortran源文件并使用f2c转换为c代码,200.i以同样的方式产生自SPEC fp2000的200.sixtrack,scilib.i以同样的方式产生自Scilib某个版本中。输出:88100行汇编代码文件.
  • 181.mcf:C语言编写,组合优化/单点轮换调度(Single-depot vehicle scheduling),派生自使用单站轮换调度的公共物流应用程序。
  • 186.crafty:C语言编写,国际象棋游戏程序。这是一个在64位机上设计的高性能计算机国际象棋程序,在32位机上可以使用long long来表示该数据类型。主要是一个整点程序,大量的逻辑运算。通过配置,能生成不同的搜索集,可以对处理器的整点运算,转移预测和流水线等做测试。输入:搜索5个不同的国际象棋残局,并有不同的搜索深度。输出:由搜索树每一层可能的移动集合组成。
  • 197.parser:C,字处理程序。连接语法分析器(Link Grammar Parser)是一个基于连接语法的英语句法分析器。连接语法时英语语法的较早理论。给定一个句子,系统能给它赋予一个词法结构,这个结构是两个词之间被标记的连接。该分析器有大约60000个词表的字典.输入:一个给定的句串,一行一个句子。输出:对给定输入句子的分析结果,保罗一个连接集合,和标号集合。
  • 252.eon:C++,计算机可视化。eon是一个基于概率的射线跟踪程序,基于Kajiya 1986 ACM SIGGRAPH会议的论文。它将一定数量的3D射线发射到一个3D多面体中,计算射线和多边形的交点,并通过计算入射光和交点生成新射线。最终的计算结果时一个能在照相机内看到的图片。程序中的计算需求和基本计算机图形学中介绍的传统确定性射线跟踪程序很相似,但是它有较少的存储一致性需求,因为很多在同一个位置生成的随机射线横切3D空间中完全不同的区域.输入:eon渲染一个150×150像素的一把椅子在房间前脚的图片。输入文件通过定义位置,大小,发射率和亮度指定空间中的目标。eon会被运行3遍,每边都渲染相同的场景,只是渲染算法不同,渲染算法包括kajiya,Cook,Rushmeier。输出:三个输出文件是ppm格式的图片分别对应三个算法。
  • 253.perlbmk:C,Perl语言解释器。这是一个Perl v5.005_03版本的删减版,删除了很多操作系统相关的特性,并增加了一些第三方的模块,包括MD5 v1.7, MHonArc v2.3.3, IO-stringy v1.205,MailTools v1.11,TimeData v1.08。输入:由四个perl脚本组成,一个email-to-HTML 转换器,占用时间最长;一个spec CPU2000用来对比较输出的diff脚本,一个通过迭代算法寻找合格数字的脚本,一个用于测试伪随机数按照预定顺序生成的脚本。输出分别对应各个输入。
  • 254.gap:C,群论,解释器中常用。它实现一个语言和库用于做群论计算。GAP是(Groups,Algorithms和Programming的缩写)。输入:有多个部分,先是标准gab速度测试,通过执行组合函数和库,然后有限域,置换群,子群指数计算的中的测试函数;接着时比较寻找可解群正规化子的算法,最后执行一个所谓的ag-group搜集器,这是解释器的一部分,但其容积还没有被很好的计算出来(?)。输出:以上测试的输出。
  • 255.vortex,C,单用户面向对象数据库中事务处理的benchmark。SPEC中的vortex来自完整面向对象数据库程序VORTEx的一个子集。输入和输入数据库的事务都会被转换成一个方案。输入:预先配置用于邮件列表,零件目录表和几何数据的三个方案。
  • 256.bzip2:C,压缩。基于Julian Seward的bzip2 v0.1,唯一的不同是SPEC中的bzip2除了输入外,无文件I/O。所有的压缩和解压都在内存中进行。输入,输出都和gzip的相似。
  • 300.twolf:C,定位和路由模拟。twolf来自TimberWolfSC定位和全局路由,它被用于创建微处理器产品印刷电路布局的流程中,确定晶体管的位置和组内的全局连接。定位问题是一个排列,穷举法耗时太长,TimberWolfSC程序则使用模拟退火作为启发来找到较优解。有三个输入

以上就是SPEC 2000 CINT的所有例子,包括两个压缩程序(gzip,bzip2),两个电路设计程序(vpr,twolf),两个编程语言相关程序(gcc,perlbmk),一个组合优化(mcf),一个象棋搜索(crafty),一个词处理(parser),一个计算机图形(eon),一个群论(gap),一个数据库(vortex).

每个程序都有其自己的热点,在实际的编译优化中就可以根据自己的优化,选择合适的例子作为衡量标准。或根据例子的特点做优化。跟SPEC例子死磕的方式做编译优化,是否得当现在还有争议。但目前这可能是唯一可行的路了。因为普适性,原理性的优化几乎已经做完了,除了多面体模型用于循环优化。剩下的一类是机器相关的优化,比如CPU中的特殊指令,SIMD指令等。

编译优化未来的路在何方?并行?异构?还是更精彩的未知?

参考:

http://www.spec.org/cpu2000/CINT2000/

http://en.wikipedia.org/wiki/Standard_Performance_Evaluation_Corporation

相关文章:

  2 Responses to “探秘CPU性能测试:Spec CPU2000之整点篇”

  1. [...] 14: 探秘CPU性能测试:Spec CPU2000之整点篇 (0) [...]

 Leave a Reply

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

   
2009-2011© 编译点滴 Suffusion theme by Sayontan Sinha

无觅相关文章插件,快速提升流量