数据背后你不了解的事儿

2021-07-12 11:27张平
微型计算机 2021年11期
关键词:测试软件编译器源代码

张平

《微型计算机》的读者应该对各种各样的评测很熟悉了。在对新产品进行评测时,一般分为两个角度,主观与客观。主观角度的测试自然不用多说,这类测试主要包括外观、设计、易用性、颜色和流行趋势等这些难以量化的内容。客观角度的测试则要复杂一些,它指的是使用一种方法或者一种模式对测试目标进行操作,从而得出一个可以在相同的环境和条件下可复制的结果的过程。换句话来说,客观测试主要是指利用各种测试软件或者测试工具、测试环境运行统一的测试,得到测试目标的运行结果的过程。仅仅看测试软件的话,S P E C旗下的测试软件虽然出镜较少,但是其较高的专业性和比较均衡、公平的设置,一直是很多专业媒体的最爱。那么,SPEC是什么,包含哪些测试,又应该如何解读SPEC的测试结果,尤其是CPU测试结果呢?

标准性能评估公司:五大评测架构

S P E C 的全称是S t a n d a r dPerformance Evaluation Corporation,也就是标准性能评估公司,这个公司成立于1988年,其主要目的是为市场提供现实且标准化的测试数据。在30多年后,SPEC已经发展成拥有60多家成员公司、业内影响力巨大的性能标准化机构之一。

SPEC的发展理念是确保市场上拥有一套公平、有效的指标来区分不同的候选系統,并且试图在候选产品的独特优势和严格遵守标准之间取得平衡。S P E C宣称一个能够被合理利用得好的测试将促进市场的发展。鉴于此,SPEC提供了一整套基于现有测试程序的标准化源代码,这使得基准测试人员可以使用S PEC的源代码调整系统的性能,以获得最佳测试结果,也减少了市场上存在的完全不可类比的问题。

在组织架构方面,SPEC被定义为一个非营利性机构,它的成员资格对任何愿意支持其目标的公司或者组织开放,由于SPEC的运营也需要经费,因此成为SPEC的成员也就意味着需要交纳一定的入会费用。目前,根据测试目的的不同,SPEC拥有5个下属机构,分别是:

1.开放系统组织(T h e O p e nSystems Group,简称OSG)

该组织来自最早的S P E C委员会。OSG所针对的是运行开放系统环境的桌面系统、高端服务器或者高端工作站的基准测试,这个部分的测试也是我们目前接触最多的。OSG在应用中还细分为下列几个部分:

云计算测试:包括云计算基础设施、应用情况和新兴技术相关领域的工业标准基础测试等。

CPU测试:包括传统的SPECmarks以及其他的相关CPU测试。

JAVA测试:包括Java客户端和服务器基准测试JVM98、JVM2008、JBB2000和JBB2005,SPECjAppServer和SPECjEnterprise Java企业应用服务器基准,以及SPECjms2007测试等。

功耗测试:主要用于针对服务器级的计算设备的功率和性能的测试,SPEC在2007年就推出SPECpower_ssj2008,对CPU、缓存、内存层次结构以及共享内存的处理器在多个负载级别上的可扩展性进行了测试。新的SERT套件的工作大约从2009年开始,首先是Chauffeur框架的突破性设计,然后是工作负载的设计和实施、硬件和软件的自动发现,以及GUI。在进行这些工作的同时,SPECpower委员会与更注重学术的SPEC Power研究工作组合作,进行了大规模的实验,以确定SERT套件2.0的服务器效率指标,并最终在2017年发布。

存储测试:包括NFS基准SFS93(L A D D I S)、S F S97、S F S 97_ R1和SFS2008、SPEC SFS2014和SPECstorageSolution 2020等测试,主要也是不同场合的存储应用的性能。

虚拟化测试:这是第一代用于比较数据中心服务器虚拟化性能的S P ECv ir t_s c2010,以及其后续的SPECvirt_sc2013。

2.国际标准小组( T h eInternational Standards Group,简称ISG),其工作是负责监督标准化基准的研究并将其应用在政府法规和计划中,同时促使国际标准化的发展。

3.高性能小组(T h e H i g h -Performance Group 、简称HPG),主要面向高性能计算领域的标准化的、跨平台的性能评估。

4.图形和工作站性能小组(TheGraphics and Workstation PerformanceG roup,简称为GW PG),这个小组主要是针对图形和工作站的性能基准和报告程序进行研发。它于1994年就推出标准化基准测试,目前包括应用性能测试、图形性能测试和工作站性能表征三个模块,不过GWPG的测试比较老旧,目前不多见。

5.研究小组(SPEC Research Group,简称RG),这个小主要是促进对基准测试方法和工具的创新研究等。

基于上述5个下属机构,SPEC推出了16款测试软件或工具,涵盖了CPU、GPU、HPC、Java、功率、开发和结果分析等不同的用途。今天,我们重点来看一下目前CPU方面最新的测试软件SPEC CPU 2017。

SPEC CPU 2017:面向专业领域的计算密集型测试

SPEC CPU包含多个版本,比如SPEC CPU 2017以及较早的SPEC CPU2000、SPEC CPU 89、SPEC CPU 92等等。目前依旧在使用的是SPEC CPU 2017,其发布于2017年,虽然看起来比较早,但是在CPU架构和应用场景没有发生巨大变化之前,一个设计出色、运行稳定且能很好地表现出绝大部分硬件性能的测试软件依旧是值得信赖的。鉴于此,本文就重点来看看这个版本的测试内容。

综述:SPEC CPU 2017的基本内容

SPEC CPU 2017是一个工业标准化、C PU密集型的测试软件,用于测量和比较计算密集型应用的性能,尤其强调处理器、内存子系统和编译器的性能等。其中,内存子系统指的是缓存、主内存等。编译器性能则指的是C、C++、Fortran等编译器的性能,包括优化器等。至于网络、图形、Java、IO系统等,SPEC CPU 2017并不关注,但是这部分设置也有可能对SPECCPU 2017最终性能产生影响。

SPEC CPU 2017测试的目的是希望能够在广泛的实际硬件范围内提供计算密集型设备的性能比较,因此其工作负载全部来自用户的实际应用。测试是以源代码方式提供的,因此在执行层面需要使用编译器命令,通过shell或者命令提示窗口才能够运行。此外,SPEC CPU 2017还包含了一个可以用于测量能耗的可选指标。

SPEC CPU 2017包含了4个板块和总计43个基准测试。具体来看,包含SPECspeed 2017整数、SPECspeed 2017浮点以及SPECrate 2017整数、SPECrate2017浮点4个部分。其中SPECspeed是用于比较计算机完成单一任务的时间,因此使用了“speed”也就是“速度”作为副标题,后两者SPECrate是用于比较计算机在单位时间内的吞吐量,因此采用的是“rate”也就是“速率”。一般来说,速度型测试对CPU内部的流程和执行部分更为敏感,但是可能无法很好地表现CPU在面临较大的计算负荷或者内存子系统相关的性能。相反,速率型测试能够很好地将压力传递给内存子系统以及CPU吞吐能力,这对很多高性能计算是至关重要的。

准备:运行SPEC CPU2017的前置条件

如果你购买了SPEC CPU 2017,那么就会获得一个I SO文件,其中包含基准测试的源代码、数据集,一些对基准测试进行编译、运行、验证和报告的工具,用于各种操作系统的预编译工具以及SPEC CPU 2017工具的源代码,可以编译未覆盖的操作系统,另外还包括SPEC CPU 2017的相关运行说明、报告规则等。

如果要运行SPEC CPU 2017,在硬件方面首先需要一台可以运行Linux、Mac OS X、Unix或者Windows的计算机。在硬件配置方面,SPEC CPU 2017需要1GB~2GB的主内存或者16GB的运行空间,磁盘方面建议保留250GB,最低需要10GB。另外还包括支持C、C++或者Fortran的编译器或者预编译的文件等。

对操作人员而言,和3D M a r k、PCMark这类面向玩家的测试软件不同的是,由于SPEC CPU 2017不提供可执行文件,因此要求用户具备基本的代码基础,比如一些基本的C M D指令,打开磁盘、定位文件、运行文件等。另外,用户还需要会使用命令行对部分运行参数进行调整和控制。在初期的测试文件配置完成后,用户可以通过一些测试命令来测试自己的配置是否正确等。

由于SPEC CPU 2017的设置和测试比较复杂,因此SPEC组织提供了非常详尽的测试前准备文档,有兴趣的读者可以在SPEC的官网查找阅读,本文就不再赘述了。

测试:SPEC CPU 2017包含的测试内容

前文我们曾提到,SPEC CPU 2017包含了4个板块的测试内容,在这里我们进一步解读这些测试分别指代哪些性能。

从上述测试内容表可以看出,SPEC CPU 2017的测试内容是包罗万象、非常丰富的。在SPEC的官網上,我们可以查到每一个测试内容的源代码、编写人员和联系方式、计算思路、可以执行、输入和输出的说明等。举例来说,508.namd_r这个测试的源代码来自伊利诺伊大学香槟分校的吉姆·菲利普斯,这个测试基准来自NAM D的数据布局和内循环,而NAMD是用于大型生物分子系统模拟的并行程序。因此这是使用在实际应用中的软件代码,利用其来测试CPU能够很好地反映CPU在实际应用中的情况。此外还有来自一些国外政府机构比如美国大气研究中心、美国海军研究实验室等提供的算法和代码,比如用于天气预报和大气模拟的计算代码以及模拟爆炸、模拟海洋、3D渲染和动画的代码等,都相当实用。

SPEC CPU 2017的测试内容除了来自实际工作,很接地气之外,还在一定程度上反映出C P U在内部架构方面的改进情况。比如整数测试部分的500.p erlbenc h_r和502.gcc_r测试涉及指令解释,因此可以考察CPU架构的IPC以及OP-Cache的性能。520.omnetpp_r测试内容是离散事件模拟,可以用来考查C P U的I P C提升尤其是内存方面的性能提升。523.xalancbmk_r则可能和带宽、延迟等内容相关。525.x264_r则是IPC、内存带宽和整体执行能力。几个人工智能相关的测试和处理器的IPC、分支预测存在相关性等。557.xz_r这类通用数据压缩测试则和处理器的IPC、内存设计以及吞吐能力相关。在浮点部分,所有的测试都和CPU的浮点计算能力相关,并且503.bwaves_r可能也涉及到处理器存储相关的性能。508.namd_r和538.imagick_r涉及有关IPC性能的提升。519.lbm_r、549.fotonik3d_r和554.roms_r则和内存带宽有一定关系,部分测试内容要求CPU能够对缓存实现充分的高效率的应用,因此其结果也能够在一定程度上反映处理器的缓存性能。

对普通用户来说,SPEC CPU 2017的测试内容虽然看起来没有PCMark和3DMark这类合成类测试通俗易懂,但是C P U并不是针对某一个用户设计的CPU,我们日常所有的动作在CPU内部最终都会被分解成各类基本操作,比如数据移动、乘加计算或者解码、回写等,因此最终运行SPEC CPU2017更快的处理器,在各类我们常常接触到的合成类测试中依旧会有更好的表现。SPEC CPU 2017还可以去考察到底是哪一个测试带来了更好的性能表现,CPU的那一部分需要加强,是否可以通过编译器带来更好的性能等。对专业人员来说,这有着相当重要的意义。

结果:SPEC CPU 2017的结果解读

SPEC CPU 2017的测试结果包含基准和峰值两种类型。前者是使用SPEC CPU 2017所给定的语言并且以相同的编译方式所得出的结果,所有测试结果都需要包含基准结果,这相当于是一个标准化的普遍适应的结果。另外SPEC CPU 2017还允许厂商通过优化得到峰值数据,厂商可以通过编译器、软件方面的操作,来获得相比基准测试更高的性能,并展示给用户以体现自己产品的潜力。

SPEC CPU 2017的所有测试结果都公布在https://www.spec.org/cpu2017/results上。截至2021年5月底,一共有624个系统上传了SPEC CPU 2017的测试成绩,包括戴尔、华硕、富士通、惠普、联想等企业。测试成绩包含了所有系统的总成绩分数以及以额外链接形式提供的系统配置、测试分数细节等内容。对用户来说,如果要了解某款处理器的性能,也可以在SPEC官网查询相关测试结果。除了SPEC外,一些IT媒体也会使用SPECCPU2017进行测试并将所有的测试数据存档列表在网站上,比如anandtech等网站,用户也可以自行搜索对比。

值得一提的是,由于英特尔、AMD、高通等厂商偶尔会在新品发布前对产品进行SPEC CPU 2017测试,因此之前曾发生过未发布的新品数据和信息被上传至SPEC网站的情况,因此SPEC CPU 2017的结果网站偶爾会成为新闻爆料的来源。

SPEC CPU 2017:专业而可靠

不难看出,SPEC CPU 2017测试相当可靠,尤其它的测试内容来自实际工作中使用的代码,最终表现出来的性能也和处理器架构设计存在一定的相关性,这也反映了SPEC CPU 2017在设计上的优势。和其他测试软件相比,SPEC CPU 2017的弱势在于使用麻烦、价格较贵,并且成绩解读和分析需要较多知识储备。当然,作为一个面向专业用户的测试软件,SPEC CPU2017自然也不会像3DMark、PCMark那样太多考虑用户的感受。不过,我们还是希望SPEC CPU 2017能够在未来的版本中增加易用性,尤其是加快版本更新速度,毕竟目前的处理器和半导体产业发展还是相当迅速的,在AI计算、浮点计算方面不断有新的指令集和技术提出,SPEC也需要进一步紧跟时代。在今后,MC也会不定期地对各种评测中所使用到的,有意思的测试软件进行类似介绍,帮助读者更好地了解数据背后的故事与意义。

猜你喜欢
测试软件编译器源代码
人工智能下复杂软件源代码缺陷精准校正
基于TXL的源代码插桩技术研究
网络自适应测试软件运行方法设计
基于相异编译器的安全计算机平台交叉编译环境设计
软件源代码非公知性司法鉴定方法探析
自动化检测EPU10A板卡系统设计与实现
揭秘龙湖产品“源代码”
远程开放教育学生自主学习能力评价的研究
一款重型包装抗压系统控制软件的设计与开发
通用NC代码编译器的设计与实现