版权归原作者所有,如有侵权,请联系我们

[科普中国]-基准程序

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

产生背景

市场上的微处理器(8位、16位和32位)品种繁多,各公司(制造厂商)都炫耀自己的产品,广大用户在选型时,无从下手。更严重的是有些公司以自已产品的一技之长和其它产品的不足之处相比,甚至把其它产品说得无一可取.很多厂商提出的比较方法既不合理又不公平,使人们很难接受。

美国Carnegie Mellon大学于1976年为大型计算机和中、小型机研制了一套基准程序。其测试结果在美国计算机年会上发表,题目是"通过测试程序来评价计算机体系结构”.这一套标准测试程序包括很多公共的算法,所用的算法都是目前计算机应用最经常使甩的。因此,我们认为这一套测试基准程序具有代表性和普遍意义。具体测试内容包括16位和32位整数和浮点数运算、中断处理、字符串检索、位操作及分类等等。通过这一套基准程序测试,可以对一台计算机或微处理器的实际处理数据和运算的能力进行比较公正而全面的评价。 ‘

基准程序的选取和建立直接影响着最后的比较结果。因此要慎重地、科学地选择标准,使它真正反映出将来用户实际应用的效果。对某一类用户来说,关键是选好合适的基准程序,经过公正合理的比较,才能找出适合自己所需的微处理器。应指出的是,在选型过程中,一定要避免盲目性,不要一味追求先进和高指标。对某些应用是可行的选型,但对另外的应用就未必可取。目前国内仍有不少单位缺乏调查研究,对测试、比较重视不够,选型缺乏足够的科学依据。2

分类按基准程序的构造特点可以把它划分成四类,即:核心程序、小基准程序、合成基准程序以及基准测试程序组。

核心程序核心程序是从真实程序中抽取的具有代表性的最耗时的程序段汇集而成的,它们的代码很短,但是非常关键。Livermore Loops及LINPACK是两种最常见的核心程序。LINACK用FORTRAN语言编写,主要是进行浮点加法和浮点乘法的操作。这些代码的执行时间直接影响到程序总的响应时间。用户不会直接使用核心程序,因为它的功能仅仅是用来测试计算机性能。核心程序可以根据需要来评价机器的各种性能,从而解释在运行真实程序时机器性能不同的原因。

小基准程序小基准程序代码一般在100行以内。用户可以随时缩写一些这样的程序来测试系统的各种功能,并产生用户已预知的输出结果。通常选取实际应用中具有代表性的求解算法构成这一类基准程序,如皇后问题、迷宫问题、快速排序、求素数等,这类流行的测试程序都具有短小、易输入、通用等特点,最适于作一些基本测试。

合成基准程序合成基准程序是人为合成的测试程序。首先要对大量应用程序中的操作进行统计,得到各种操作所占的比例,再按这个比例人为地写出测试程序。Whetstone与Dhrystone是最流行的合成基准程序。在操作类型和操作数类型这两个方面,合成基准程序试图保持与大量程序中的比例一致。用户不会自己产生合成基准程序,因为其中没有任何用户能够使用的代码。合成基准程序完全是人为制造出来的,与实际应用相差更远。其中整数测试程序是Dhrystone用C语言编写的,共有100条语句,它包括:各种赋值语句、数据类型和数据区、控制语句,过程调用和参数传送、整数运算和逻辑操作。Whetstone基准测试程序是用FORTRAN语言编写的综合性测试程序,主要包括:浮点运算、整数算术运算、功能调用、数组变址、条件转移、超越函数。

基准测试程序组基准测试程序组就是一组各个方面有代表性的基准程序组成的一个通用基准程序集合。这个基准程序的集合称为基准程序组(benchmark suites),它的最大优点是避免了独立基准程序存在的片面性,尽可能全面地测试了一个计算机系统的性能,因此对计算机系统设计有比较大的指导意义。3

用途基准程序测试结果直接反映出计算机系统各部分完成各种作业的速度,从而对系统做出有针对性的评估。基准程序最基本的用途是对产品的性能进行评估,并作为出厂的质量标准。当然,这也成为了用户选择机型的辅助决策的标准。

要在竞争激烈的计算机市场中生存和发展,就必须努力提高计算机产品的性价比。所以,每家计算机系统设计公司都投入了大量的人力、物力资源研究各种通用的基准程序,并针对测试结果,从硬件和软件两个方面对系统设计进行修改和优化,以提高他们的计算机系统的总体测试性能。但是,通用计算机系统一般不针对某一个特定的真实程序进行设计或性能优化,因为这样做不但难度大,而且成本也会增加。为了提高测试的公正性,通用基准程序往往由非商业性组织或者第三方厂商提供。通用基准程序在使用时也有明确的要求,如系统配置、数据精度、编译优化等等,以便使获得的测试结果具有良好的可比性。

基准程序测试在计算机性能评估中的应用日益广泛,它的思路和技术方法已被肯定。然而随着计算机世界的蓬勃发展,基准程序测试中存在的问题也越来越突出。需要对传统基准程序进行不断地改进。直接用实际程序测试系统结构可以纠正基准测试系统结构中不符合实际的偏差,但事实上实际应用的问题太广、太杂,一种应用问题可用多种算法求解,难以穷尽各种应用问题和算法。所以,这种思路只能解决系统在解此类问题时用此类算法的性能评价,而缺乏比较的公允性。无论如何,人们并没有停止对基准测试的探索。人们已经意识到,用所谓MIPS和MFLOPS等传统性能指标来评价计算机系统的方法没有多大的实际意义,除了研究基准程序本身外,评价方法和评价性能指标同样关键。3

开发要求开发基准程序时应考虑若干标准。首先,测试结果应该是可重复的;特别是,在相同的系统上运行基准程序时,每次产生的结果应接近相同。运行结果不一定相等,而且也很少会相同,因为一些环境相关的细节(诸如一个数据项在磁盘上的存储位置)会影响运行结果。其次,基准程序应准确反映在真实系统上执行的应用程序的类型。最后,基准程序应当得到广泛使用,以便可以对系统作出更准确的比较。一个良好的工业标准的基准程序将具备所有这些性质,然而,后面两个标准往往会导致冲突的设计决策。某个系统专用的基准程序,可能无法广泛使用;而一个旨在测试多个系统的基准程序,对某个特定的系统可能不能产生准确的测试结果。4