基准测试程序 (Benchmark) 用 于测试和预测计算机系统的性能,揭示不同结构机器的长处和短处,为用户决定购买或使用那种机器合适他们的应用要求提供决策。基准测试程序试图提供一个客 观,公正的评价机器性能的标准。但真正做到完全公正并非易事,要涉及到因素很多,包括硬件,体系结构,编译优化,编程环境,测试条件,解题算法等。一组标 准的测试程序要提供一组控制测试条件和步骤的规范说明,包括测试平台环境,输入数据,输出结果和性能指标等。

  不同的基准测试程序,侧重目的不同:有的测试 CPU 性能,有的测试文件服务器性能,有的测试输入、输出界面,有的测试网络通讯速度等。根据不同用途,测试程序可有专用和通用之分。目前国际上流行的通用测试程序可分为几类:

  1. 综合型(如 Dhrystone,Whetstone 等);

  2. 核心型(如 Livemore Fortran Kernals,NASA 之 NAS 等);

  3. 数学库(如 Linpack,FFT 等);

  4. 应用型(如 SPEC , Perfect,Splash 等);

  5. 并行型(如 NAS 之 NPB,PARKBENCK 等)。

  这里介绍的一些常见的测试程序,它们都可以在 internet 上公开查到 :http://www.netlib.org/liblist.html 。在这里你可查到 LINPACK,LAPACK,BLAS,BLACS,Livemore,Loops,Dhrystone,Whetstone,NAS,SPEC,Sim 等包含源代码的基准测试程序。

  Whetstone 它是为比较不同的计算机的浮点性能而设计的综合型基准测试程序,早用 Algol-60 写成,后用 Fortran 改写。这是从英国国立物理实验室 1970 年是常用的数值计算程序中取出的频繁使用的有代表性的程序段。这些程序段语句转换到称为 Whetstone 虚拟计算机上的指令,因而得名 Whetstone 基准测试程序。此基准测试程序包括整数运算,又包括浮点运算,涉及到数组下标索引,子程序调用,参数传递,条件转移和三角、超越函数等,使用系统完成的 Kwhetstone/s 数度量。

  测试程序可以访问 netlib/benchmark/whetstone

  Dhrystone 它主要为测试整数与逻辑运算性能二设计的综合型基准测试程序,用 Ada,C 和 Pascal 完成,它是 CPU 密集 (CPU-intensive )型测试程序,由很多整型语句和逻辑语句的小循环组成。它使用系统完成的 Kdhrystone/s 数度量。
测试程序可访问 netlib/benchmark/dhrystone

  人们对 Whetstone 和 Dhrystone 这两者综合型基准测试程序的批评是,它们不能预测用户程序性能,这些基准测试程序的主要缺点是对编译程序比较敏感。

  SPEC 是 Standard Performance Evaluation cooperation 的首字母缩写,它是作为 NCGA(National computer graphics association )的一个小组 20 世纪 80 年代创立,这个小组的创始者来源于 HP,DEC,MIPS , SUN, 他们拥有一组基准测试程序以评测新机器的性能。第一组基准测试程序叫 SPEC89 ,包含 10 个程序; SPEC92 扩从到 20 个程序, 6 个整数程序,和 14 个浮点程序分别称为 SPECint92,SPECfp92 。随后 SPEC 又发布了一些新的基准测试程序(如 SPEC95,SPEChpc96,SPECweb96, SPEC2000 等)。 SPEC 原主要是测试 CPU 性能的,现在强调开发能反映真实应用(如实际负载等)的基准测试程序,并已推广至客户 / 服务器计算,商业应用, I/O 子系统等。

  SPEC 基准测试程序使用的单位是所测试机器执行性能与 XAX11/780 执行性能之比值。

  数学库测试程序

  Linpack 自 20 世纪 70 年代中期以来,国际上曾经开发过一批基于 Fortran 语言的求解线性代数方程组的子程序,于 1979 年正式发布了 LinPACK 包。因为线性代数方程组在各个领域中应用甚广,所以该软件包很自然地称为测试各种机器性能的测试程序。 LinPACK 测试的基准是用全精度的 64 位字长的子程序求解 100 阶线性方程组的速度,测试的结果以 Mflops (每秒百万次浮点运算)作为单位给出。 LinPACK 的测试报告由 J.Dongarra 经常更新发布(通常每月发布一次)。 LinPACK 是使用 BLASI(Basic Algebra Subprogramsl) 的第一个线性代数软件包。 BLAS1 执行通常意义下的标量(如标量乘向量,向量加,向量内积等),主要为向量计算机而设计的,它用 Fortran 77 写成,但有些计算机商也提供汇编语言的 BLAS1 版本。

  LAPACK 尽管 LinPACK 作为测试程序现在仍很有生命力,但作为实际求解线性代数问题的软件包已经落伍了。所以在 1992 年推出了代替 LinPACK 以及 EisPACK (特征值软件包)的 LAPACK ,它使用了数值线性代数中新,精确的算法,同时采用了大型矩阵分解成小矩阵的方法从而可有效地使用存储器。 LAPACK 是建立在 BLAS1 ,BLAS2,BLAS3 的基础上的,其中 BLAS2 执行矩阵-向量运算, BLAS3 执行矩阵 - 矩阵运算。

  ScaLAPACK 是 LAPACK 的增强版,主要为可扩放的,分布存储的并行计算机而设计的。 ScaLAPACK 支持稠密和带状矩阵上各类操作,诸如乘法,转置和分解等。在国际上, ScaLAPACK 例程可以加入多个并行算法,并且可根据数据分布,问题规模和机器大小选择这些算法,然而用户却不必关心这些细节。