简介
在设计一个计算机系统时,除了要搞清楚硬件界面外,还要从设计者角度,按所希望达到的最佳性能与价格比最合理地实现硬件功能。那么计算机系统的性能与价格比指的是什么呢?以及如何来衡量它们呢?
衡量计算机系统性能可采用各种尺度,但最为可靠的衡量尺度是时间。时间可根据计算方法给以不同的定义,如响应时间、CPU 时间等。响应时间是指用户向计算机系统送入一个任务后,直到获得他所需要的结果所需的等待时间。其中包括了访问磁盘和访问主存器时间、CPU 运算时间、I/O动作时间以及操作系统工作的时间开销等。虽然这种定义比较直观,但对于多道程序,由于 CPU 可在某一程序等待 I/O操作时转去执行其他程序,响应时间并不能区别这种情况。另一种情况是只考虑 CPU 时间,此时便可加以区别,它将不包括等待 I/O操作的时间以及 CPU 转去运行其他程序所花的时间。当然 CPU 时间本身还可分为用户CPU 时间和系统 CPU 时间。系统 CPU 时间的统计很难做到精确,因为这实际是要求操作系统进行自测量。此外,当比较具有不同系统代码的机器时,由于系统 CPU 时间是不一样的,因而误差较大,故采用用户 CPU 时间作为性能衡量时间较为妥当。当然,在衡量未加载系统的性能时,采用响应时间较为合适,而衡量 CPU性能则宜采用用户 CPU 时间,下面主要讨论以用户 CPU 时间来衡量的 CPU 性能1。
CPU 性能绝大多数计算机都使用以固定速率运行的时钟,它的运行周期称为时钟周期 (clocks),它常以时间长短或运行速率来表示。一个程序在 CPU 上运行所需的时间 Tcpu可用以下的公式表示:
式中,表示要执行程序中的指令总数,CPI表示执行每条指令所需的平均时钟周期数,而 Tc则表示时钟周期的时间长度。由以上公式可见,用户 CPU 时间取决于三个特征:时钟周期 (或速率),每条指令所需时间周期数以及程序中的指令数。其中主要取决于机器指令系统和编译技术,CPI主要与计算机组成和指令系统有关,而 Tc 则主要由硬件工艺和计算机组成决定。每条指令平均所需时钟周期数CPI,可由下式表示:
其中,Ii表示第 i 类指令在程序中执行条数,CPIi 表示执行一条第 i 类指令所需要的平均周期数,n 为程序中所有指令类数。上述公式还可以改写成:
其中,表示第 i 类指令在程序中所占的比例1。
MIPSMIPS(Million Instruction Per Second)它表示每秒百万条指令数。这是一个用来描述计算机性能的尺度。对于一个给定的程序,MIPS可定义为:
显然,机器愈快其 MIPS愈高,愈小。但是 MIPS有三个方面的缺陷:
MIPS依赖于指令集,所以用MIPS 来比较指令集不同的机器的性能好坏是很不准确的。
在同一台机器上,MIPS 因程序不同而变化,有时是很大的。
MIPS 可能与性能相反!
典型例子就是具有可选硬件浮点运算部件的机器。因为浮点运算远慢于整数运算,所以很多机器提供了可选的硬件浮点运算部件,但是软件实现浮点运算的MIPS 高,然而硬件实现浮点运算的时间少,这时 MIPS 与机器性能恰好相反。类似的情况在具有优化功能的编译器中也有发生。
另外,在使用 MIPS 时应注意它的应用范围,它只适宜于评估标量机,因为在标量机中执行一条指令,一般可得到一个运算结果,而向量机中,执行一条向量指令通常可得到好多个运算结果,因此,用 MIPS 来衡量向量机是不合适的。在 MIPS 中,不光是运算指令,所有的服务性指令,如取数、存数、转移等都计算在内,而在浮点运算中服务性指令均不予计入。
MELOPS另一个替代标准是MFLOPS(Million Floating Point Operation Per Second) ,它表示每秒百万次浮点操作次数。MFLOPS 可用如下式子表示:
显然,MFLOPS 取决于机器和程序两个方面。所以 MFLOPS只能用来衡量机器浮点操作的性能,而不能体现机器的整个性能。例如编译程序,不管机器性能有多好,它的 MFLOPS 不会太高。
然而,因为 MFLOPS 是基于操作而非指令,所以它可以用来比较两种不同的机器。因为同一程序在不同的机器上执行的指令可能不同,但是执行的浮点运算却是完全相同的。然而 MFLOPS也并非可靠,因为不同机器上浮点运算集不同,例如 CRAY-2没有除法指令,而 Motorala68882却有。另外 MFLOPS 还依赖于操作类型。例如 100%的浮点加要远快于100%的浮点除。单个程序的MFLOPS 值并不能反映机器的性能。所以 MFLOPS 也不是一个十分有用的替代标准。
评估性能的基准测试程序在进行计算机系统的评价时,除了与被评价的机器的结构、功能等特性参数有关以外,还与输入,即该计算机系统的工作负荷有密切关系。被评价的一个计算机系统往往对某一种工作负荷表现出较高性能,而对另一种工作负荷则可能呈现较低性能。为了对计算机系统的性能进行客观的评价,就需要选取具有真实代表性的工作负荷。通常采用不同层次的基准测试程序来评价系统性能。
采用实际应用程序。如C语言或C++ 开发的各种编译程序;Photoshop图形处理软件、Premiere以及 CAD 工具软件。
采用核心程序。这是从实际程序中抽取少量关键循环程序段,并以此来评估性能,但这些核心程序,只具有评价性能的价值。
玩具基准测试程序。玩具基准测试程序通常只有10~100行而且运行结果是可以预知的。因为小而且容易键入并且适用于任何机器而受到青睐。
合成测试程序。它类似于核心程序方法,但这种合成测试是 人 为 编 制 的 , 流 行 的 合 成 测 试 程 序 有WinBench 99、3DMMARK2001、WhatCPUIs等等。尤其是WinBench 99,它提供的测试结果都非常令人信服,都是非常权威的。因此,大部分报刊在对新硬件进行介绍时,提供的数据都是来自 WinBench 99 的测试结果。
有关专家对上述方法分析,总结出以下不足:
上述方法都试图使用一个测试数据来表征计算机的处理能力。
以上方法只进行性能测试,而没有性能分析工作。
通过上述分析并提出一种比较完善和全面的性能评价方法,包括两部分:
计算机性能测试。
对测试数据的分析。