第1章 计算机设计基本原理

更新时间:2024-05-22 22:15:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第一章 计算机设计基本原理

1.1

简介

半个多世纪以来,计算机技术取得了惊人的发展。1945年时还没有能存储程序的计算机。现在,花不到一千美元买到的个人计算机比1980年花一百万美元买的计算机具有更高的性能、更大的主存和磁盘空间。这一高速发展既得益于计算机制造技术的进步,又离不开计算机设计的创新。

尽管制造技术的进步速度相当稳定,但系统结构的发展速度却不那么稳定。在电子计算机发展的最初25年中,这两股力量的贡献都很大,但大约从七十年代开始,计算机设计者开始更多地依赖于集成电路技术。七十年代,当时计算机工业占统治地位的大型机和小型机的性能以每年25—30%的速度提高。

七十年代末出现了微处理器,它比大型机和小型机集成度更高,因而促进了集成电路技术的发展,这又进一步推动了计算机性能的提高——计算机性能以大约每年35%的速度提高。 这一发展速度,再加上微处理器批量生产的成本优势,使得计算机产业中以微处理器为基础的部分迅速膨胀。此外,计算机市场的两个重大变化使新的计算机系统结构比以往更容易取得商业运作的成功。其一,人们实际已经不再使用汇编语言编程,这就降低了对目标代码兼容性的要求。其二,标准的、与厂商无关的操作系统(如UNIX)的出现,减小了推出新系统结构的成本和风险。

图1.1 八十年代中期之后微处理器的性能增长速度实际上要比以前快。这张图表是根据SPECint测试程序的结果绘制的计算机性能曲线,以VAX 11/780为基准。随着SPEC的

1

发展变化,通过和SPEC的两个不同的版本(如SPEC92和SPEC95)有关的比例因子来对更新的机器性能进行评估。在八十年代中期以前,微处理器的性能提高主要是技术驱动的,平均以每年35%的速度提高。此后,微处理器的性能提高主要得益于先进的系统结构设计思想。截止到2001年,这一增长速度已经使总的性能与单纯依靠技术进步能够达到的性能之间有了十五倍的差距。 浮点运算的性能提高得更快。

正是这些变化使得在八十年代初RISC的新系统结构的推出成为可能。设计者把基于RISC的机器的注意力放在两个关键性能技术上:指令级并行的开发(从最初的流水线操作到后来的多指令流)和高速缓存的使用从最初简单的形式到后来的复杂的组织方式和优化方式。系统结构和组织的共同增强导致在性能方面以每年50%以上的速度持续提高了长达20年。图1.1显示了这种发展速度的差异。 这一令人难以置信的飞速发展带来了双重效果。一方面,它极大地增强了计算机提供给用户的功能。现代最高性能的微处理器对很多应用程序的处理效果远远超过不到10年前的那时候的巨型机。 另一方面,这一飞速发展使以微处理器为基础的计算机在整个计算机领域占据了统治地位。工作站和PC机已经成为计算机工业的主要产品。由逻辑电路或门阵列制成的小型机已经被用微处理器制造的服务器取代了。大型机也在慢慢地被由流行的微处理器组成的多处理器取代。甚至高端产品——巨型机也可以由多个微处理器构成。 不必与以往设计相兼容的自由性和微处理器技术的使用促使了计算机设计的复兴,此时的计算机设计既强调系统结构的创新,又强调充分利用技术进步的成果。正是这一复兴带来了如图1.1所示的计算机工业史无前例的飞速发展。截止到2001年,微处理器的最高性能与单纯依赖以提高集成电路设计在内的技术进步能够达到的性能相比,前者几乎是后者的十五倍。

在过去短短几年间,集成电路的迅猛发展使得像x86(或是IA-32)这样的旧的少流水线型的系统结构也能够采用基于RISC的许多新的方法。如我们所看到的,现代x86处理器基本上有一个前端部件,这个部件可以读取并解码x86指令并将其映射为简单的ALU、内存访问,或者是能在RISC式流水线处理器中执行的分支操作。从90年代末开始,随时晶体管数量的猛增,解释更多更复杂的x86系统结构的费用相对于它在一个现代微型处理器中的整个晶体管数量来说,已经变的微不足道了。

本教材讲述的正是使这一飞速发展成为可能的系统结构设计的基本思想和相关的编译器的发展。处于这一戏剧性革命中心地位的是计算机设计的定量方法的发展和以对程序的直接观察、实验和模拟为工具的分析方法。本书所反映的正是这种设计风格和方法。 要保持近年来计算机成本降低、性能提高的速度需要计算机设计的不断创新,笔者认为这种创新将建立在计算机设计的定量方法基础上。因此,写本书的目的不仅限于阐述这种设计方式,而且希望它能够激励读者为计算机的发展做出自己的贡献。

1.2 计算的改变方向和计算机设计者的任务

六十年代,计算的主要形式是利用大型机,这种机器往往价值几百万美元,并且安放在专用的计算机室里,需要多个操作员来进行操作。典型的应用程序是商务数据处理和大规模的科学计算。七十年代诞生了小型机,这是一种小规模的主要针对科学实验室的机器,但是却像多用户通过自己的终端共享一台机器这个技术一样得到了广泛的使用。八十年代出现了基于微处理器的台式电脑,有个人电脑和工作站两种形式。个人拥有台式电脑取代了分时技术导致了服务器的应用,服务器是一个能够提供如可靠的长时间的文件存储、大内存和高计

2

算能力的大规模服务的计算机。九十年代出现了Internet和WWW,第一个成功的掌上电脑(个人数字助理或PDA)和高性能数字消费品,这包括视频游戏和机顶盒等。 这些变化对我们如何看待计算、计算的应用以及在新千年开始的计算机市场的巨大变化起了铺垫作用。在个人电脑诞生20余年后的今天,我们看到在计算机在外表以及使用方法上的巨大变化。在计算机使用上的变化导致了三个不同的计算机市场,它们之间以不同的应用程序、需求和计算技术作为区别。

桌面电脑

第一个,也是最大的一个市场是桌面电脑市场。桌面电脑的界定可以从低于1000美元的低端系统到超过10000美元、具有良好性能的工作站。在价格和性能的这个范围内,台式电脑市场的总体趋势是优化性价比。性能和价格的结合是这个市场的消费者最关心的,因此也是设计者最关心的。因此,桌面系统往往是最新最高性能的处理器和降价微处理器系统最先露面的场所。 尽管网络中心和交互式应用对性能的评估产生了新的挑战,桌面电脑在考虑应用和测试方面上也是最趋于合理的。我们在1.9中将会讨论,桌面电脑市场中PC部分似乎是更把时钟频率作为衡量性能的直接尺度。这种关注将导致消费者和设计者都产生错误的决定。

服务器

桌面电脑兴起的同时,服务器在提供更大规模及更可靠的文件与计算服务中的作用也日趋明显。World Wide Web的出现使加速了这种趋势,这是因为对Web服务器和基于Web的成熟服务的需求增长迅速。这些服务器取代了传统的大型机成为企业进行大规模处理的中枢。 对于服务器来讲,一些不同的特点是很重要的。首先,可用性是关键。我们使用“可用性”这个词表示系统能够提供可靠的和有效的服务。这有别于“可靠性”,它仅表示系统不失败。大规模系统的一些部分不可避免的要失败;服务器的一个挑战是在面对部件失败的前提下保证系统的有效性,这通常是通过冗余来达到的。这个话题将在第7章详细讨论。 为什么可用性很关键呢?想想Yahoo!的服务器,为Cisco确保订单的服务器,或者eBay上提供拍卖的服务器。显然,这样的系统一定是1周7天,1天24小时运转的。这样服务器系统的失败比起一台桌面电脑的失败要更具有灾难性。评估停工期(downtime)的损失是很难的,这里我们可以假设停工期均匀分布,而且不发生系统空闲的时候,图1.2给出了这样的一个分析。这里我们可以看出,一个不可用系统的估计成本是很高的,图1.2仅仅给出了损失的收入,其中还不包含给顾客造成的心理上的损失。 服务器系统的第二个关键特性是强调可扩展性。由于对服务器所提供服务的需求的增长和对其它功能的需求,服务器通常会超过其寿命。因此,对于服务器来讲,能够升级计算能力、主存储器、存储空间和I/O带宽是很关键的。 最后,服务器是为有效的吞吐量设计的。也就是说,服务器的整体性能——用每分钟处理的事务数或者每秒钟提供的页面服务来衡量——是关键。对单个请求的相应很重要,但用单位时间处理的请求数目来表示的整体的效率和成本效率对绝大多数服务器来讲是关键的。(我们将在1.5节再次谈到不同类型的计算环境下性能的核定) 年平均损失 应用 每小时损失 1%(87.6小时/0.5%(43.8小时0.1%(8.8小时年) /年) /年) $565 $283 $56.5 经纪人业务 $6,450 $228 $114 $22.8 信用卡认证 $2,600

3

$150 $1.3 $6.6 $1.3 家庭购物通道 $113 $9.9 $4.9 $1.0 包装服务 $90 $7.9 $3.9 $0.8 编目销售中心 $89 $7.9 $3.9 $0.8 航空预定中心 $41 $3.6 $1.8 $0.4 手机服务激活 $25 $2.2 $1.1 $0.2 网络在线费用 $14 $1.2 $0.6 $0.1 ATM服务费 图1.2 通过分析停工期得到的不可用系统的损失(在直接收入损失方面),假设有三种不同级别的有效性,同时停工期是均匀分布。数据来源于Kembel[2000],由Contingency Planning Research整理和分析。

嵌入式计算机

嵌入式计算机——放置在其他设备中的计算机,计算机的存在往往并不显而易见——是计算机市场中增长最快的部分。这些设备范围很广泛,从每天都使用的机器(如大多数微波炉、洗衣机、打印机、网络交换机,和所有包含嵌入式微处理器的汽车)到手持数字设备(如掌上电脑,手机和Smart卡)到视频游戏和数字机顶盒。尽管在一些应用中(如掌上电脑)计算机是可编程的,但是在更多的嵌入式应用中,编写程序仅仅发生于初始的应用代码载入和后期软件的升级。因此,应用通常可以针对处理器和系统量体裁衣。这样的裁减过程包括关键循环用汇编语言实现等,但这些汇编代码的开发是受开发时间和好的软件工程实践所限制的。汇编语言的使用、标准化操作系统的出现和大量兼容性的基础代码是嵌入式市场上最受关注的。像其他计算应用一样,软件花费也是嵌入式系统中很大的一部分开销。 嵌入式计算机的处理能力和价格范围很广泛——从低端的少于1美元的8比特和16比特处理器,到少于10美元每秒可以执行5千万条指令的全32比特微处理器,到高端的几百美元能够为最新的视频游戏或高端网络交换机提供每秒十亿条指令计算能力的嵌入式处理器。尽管嵌入式计算机市场上处理能力的范围很广泛,但价格仍然是设计计算机时考虑的一个关键因素。性能的需求是存在的,但是主要的目标还是以最低的价格满足性能要求,而不是用高价格达到更高性能。 通常,嵌入式应用的性能需求是实时需求。实时性能是指每个程序片断有一个有限的最大执行时间。举个例子,在数字机顶盒中,因为处理器必须在很短时间内接受和处理下一帧,所以每一个视频帧的处理时间是有限的。在一些应用中存在着更为复杂的需求:当时间超过最大时间时,一个特定任务的平均时间和例程的数目是受约束的。为此,一种能够偶尔避免一个事件的时间约束,又不避免过多的约束的方法产生了,这种方法有时被称为软件实时。实时性能往往是和应用高度相关的。通常是在核心态下,用应用程序或者标准的测试程序(参见1.5节的EEMBC测试程序)来衡量的。随着嵌入式微处理器的广泛使用,产生了对测试程序的广泛需求,这些需求包括从运行小且有限的程序片断到能够稳定的运行数万行代码。 在很多嵌入式应用中还存在着其他两个关键的特性:最小化存储器的需要和最小化功耗的需要。在很多嵌入式应用中,存储器是作为系统成本的一部分,因此对存储器大小的优化是很重要的。有时应用程序能够装入整个处理器片上的存储器,其他时候应用程序需要装入一个片外的小存储器。无论如何,因为数据大小是受应用程序决定的,所以存储器大小的重要性就转化为代码大小的重要性。下一章我们将会看到,一些体系结构存在专门的指令集能够减少代码长度。大存储容量同样代表了更高的功耗,同时优化功耗在嵌入式应用中也是关键。尽管强调低功耗是因为使用电池的原因,但是使用更便宜封装材料(塑料和陶瓷的对比)的需求和缺少风扇的制冷都限制了功耗的整体消耗。我们将在后续章节里详细介绍这个问题。

4

另外一个在嵌入式系统中很重要的趋势是把处理器核和特定应用电路相结合。通常应用程序的功能和性能是通过将定制的硬件解决方案和在能在标准嵌入式处理器核上运行的软件相结合的方法得到的,这种软件能够与专用硬件交互。实际上,嵌入式问题通常是通过以下三种方法之一解决的:

1. 设计者使用一个组合的软硬件解决方案,其中包括定制的硬件和整合在所定制硬件

中的嵌入式处理器核。

2. 设计者使用定制的软件运行在非定制的嵌入式处理器上。

3. 设计者使用一个数字信号处理器和为这个处理器定制的软件。数字信号处理器

(DSPs)是专为信号处理应用程序设计的处理器。我们将在下章讨论数字信号处理器和通用嵌入式处理器的区别。

不管是非定制的微处理器还是微处理器核,本书讨论的大部分内容都适用于嵌入式处理器(需要同其它专用硬件一起组装)的设计和使用。针对特定应用程序的专用硬件的设计和DSP的细节不在本书讨论范围。图1.3总结了这三类计算环境和它们的重要特性。 特征 桌面式 服务器 嵌入式 系统价格 $1,000-$10,000 $10,000-$10,000,$10-$100,000(包000 括高端网络路由器) 微处理器价格 $100-$1,000 $200-$2000(每个) $0.20-$200 每年微处理器销量150,000,000 4,000,000 300,000,000(只(2000年) 有32位和64位的) 关键设计 性价比,图形性能 吞吐量,可用性,可价格,功耗,专用程扩展性 序性能 图1.3 三种计算类型和系统特征的总结 注意服务器和嵌入式系统的价格的变化范围是很广的。对于服务器来讲,这种范围来源于应用高端事务处理和网页服务时对大规模多处理器系统的需求。对于嵌入式系统来讲,一个重要的高端应用是网络路由器,它包括多个处理器和大量的存储器以及其他电子设备。如果包括8位和16位微处理器的话,2000年销售的嵌入式处理器的总数估计可超过10亿块。事实上,最大的销售微处理器的市场是Intel的8位微控制器。另外,区分低端的服务器市场和桌面电脑市场也是很困难的,因为低端服务器——特别是那些在5000美元以下的服务器——同桌面电脑本质上是没有区别的。因此,多达几百万的PC单元也可以有效的做为服务器来使用。

计算机设计者的任务

计算机设计者面临的任务非常复杂:对一台新计算机而言,首先要判断哪些特征是最重要的,然后在不超出成本的范围内力求性能最高。这里面涵盖的问题是多方面的,包括指令集的设计、功能组织、逻辑设计与实现。其中实现可能涉及集成电路的设计、封装、电源的设计以及冷却措施。优化设计需要熟练掌握很多领域中的技术,从编译器、操作系统到逻辑设计和封装技术。 过去,计算机系统结构通常仅指指令集设计,计算机设计的其他方面则被称为实现。这种说法通常暗示着实现不那么有趣或不那么具有挑战性。笔者认为这种说法不仅不正确,甚至应对新指令集设计中出现的错误负责。系统结构的设计者――即计算机设计者――的工作远不止是指令集设计,在其它方面遇到的技术困难与在指令集设计中遇到的困难同样具有挑战性。尤其是在不同指令集之间的差距不断缩小和存在三个截然不同的应用领域的今天,这

5

一点更是千真万确。 在本书中,指令集系统结构指的是程序员可见的实际指令集。这一指令集的系统结构是软件与硬件的界面,这是第二章集中讨论的内容。一台计算机的实现包括两部分内容:结构和硬件。 结构涵盖了计算机设计的高层次方面,例如存储系统、总线结构以及内部CPU(中央处理单元——实现算术运算、逻辑运算、分支和数据传输的部件)的设计。Pentium III和Pentium 4的指令集系统结构相同,结构却不同。尽管Pentium 4增加了新的指令,但基本上都是浮点运算指令。 硬件是指一台计算机实现的具体细节。这可能包括具体的逻辑设计和封装技术。同一系列的计算机通常具有相同的指令集系统结构和几乎完全相同的结构,但它们的具体硬件实现却不同。例如,Pentium II 和Celeron,二者具有几乎完全相同的结构,但时钟频率和存储系统的实现细节的有所不同使得对于低端计算机而言Celeron更加有效。在本书中,系统结构一词包含了上述计算机设计的所有三个方面——指令集系统结构、结构和硬件。 系统结构设计者必须设计一台既能满足功能要求,又能达到价格和性能目标的计算机。通常,他们还必须弄明白功能要求究竟是什么。这可能是主要的任务。这些要求中可能包括由市场需求激发的特定功能。确定了机器的用途后,应用软件通常能帮助我们筛选出特定的功能要求。如果市场上已有大量为某一指令集系统结构设计的软件,系统结构设计者就可能会在新机器中实现这一指令集。如果对某一类特定应用软件的市场需求非常大,设计者也可能会在新计算机中引入某些支持这些软件的功能特性,以增强新计算机在市场中的竞争力。图1.4总结了设计一台新计算机时要考虑的功能要求。其中许多要求和特性将在以后的章节中深入讨论。 一旦确定了一系列功能要求后,系统结构设计者就要尽可能优化设计。当然,究竟哪一种设计是最优的取决于不同的衡量标准。过去几十年里计算机应用领域的变化强烈的影响着衡量标准的变化。桌面电脑一直注重在费用性能方面的优化,而服务器却注重可用性、可扩展性、吞吐量和那些价格驱动的计算机内部的功耗问题等。 不同的市场的多样性导致了设计计算机基本原理的不同方面的努力。对于桌面电脑市场而言,他们把更多的努力放在如何设计一个可以将图像和I/O系统集成到系统中的领先的微处理器;在服务器市场,则更多的关注在一个多处理器结构中,如何集成一个高性能的微处理器和设计可扩展和高可用性的I/O系统。最后,领先的嵌入式处理器市场中的挑战在于,在考虑功耗限制和图形视频高性能处理的前提下,如何在一定价格范围内应用高端处理器技术来获得更好的性能。 除了性能,价格也是优化性能价格比的一个关键因素。此外,设计者还必须密切关注实现技术和计算机应用方面的重要发展趋势,这不仅关系到产品未来的成本,而且能够决定某种系统结构的寿命。下面的两小节将讨论成本和技术的发展趋势。

功能要求 应具备或支持的典型特性 应用领域 计算机的目标 通用 对一系列任务均有较好的平衡性能(如图像、视频、 音频的交互性能)(第2、3、4、5章) 科学计算 具有较高的浮点运算和图像处理功能(附录G、H) 商用 支持数据库和事务处理功能;有较强的可靠性和可用 性;支持可扩展性。(第2、6、8章) 嵌入式计算 通常要求对图像、视频(或是其它一些有特殊要求的地)有特殊的支持;功耗限制、控制(第2、3、4、5章) 6

软件兼容级别 决定机器可以运行哪些软件 编程语言级 设计者自由度较大,但需要新的编译器(第2、6章) 目标代码或二进制级兼容 系统结构已经确定——基本无随意性可言——但无需对软件或端口程序追加投资 操作系统要求 地址空间的大小 内存管理 安全保护 标准 浮点 I/O总线 操作系统 网络 编程语言 为支持选定的操作系统所必需的特性(第5、8章) 非常重要的特性(第5章);可能限制应用程序的运行 只有现代操作系统才需要考虑这一点,可以是页式或段式管理 不同的操作系统和应用都需要考虑,可以是页式或段式保护 市场已经有某种需要满足的标准 格式和算法:IEEE754标准(附录H),针对图像信号处理的特殊算法 I/O设备:ATA、SCSI、PCI(第7、8章) UNIX、PalmOS、Windows、WindowsNT、WindowsCE、CISCO IOS 对不同网络的支持:Ethernet, Infiniband(第8章) 编程语言(ANSI C、C++、Java、FORTRAN)将影响指令集(第2章) 图1.4 系统结构设计者要面对的最重要的性能要求一览表。左边一列是需求的种类,右边一列则包括了可能需要的特性和相关章节及附录。

1.3 计算机技术和应用的发展趋势

一个成功的指令集必须能够适应硬件、软件及应用特性的各种变化。设计者必须密切关注计算机应用和技术的发展趋势。一个成功的指令集系统结构可能会被持续使用数十年,例如IBM大型机的核心从1964年至今一直被使用着。系统结构设计者对那些可能会延长计算机寿命的技术变化必须心中有数。

从计算机的长远发展考虑,设计者必须密切注意计算机实现技术的变化。以下四种飞速发展的实现技术对现代实现技术的影响最为深远:

? 集成电路逻辑技术——晶体管的密度以每年大约35%的速度增长,四年后增长为

原来的四倍。电路核心尺寸的变化速度还没有精确的数值,大约在每年10—20%之间。二者总的效果是每片硅片上的晶体管数目以每年大约55%的速度增加。器件的增长速度较慢,我们将在下一节中讨论这一问题。

? 半导体DRAM(动态随机存取存储器)——其密度以每年40%-60%的速度增长,

三、四年后增长为原来的四倍。访问速度提高得非常慢,平均每十年降低为原来的三分之一。每片的带宽随着延迟时间的缩短而以其两倍的速度增加。此外,DRAM接口的变化也改善了带宽,这是第5章中讨论的内容。

? 磁盘存储技术——最近,磁盘的密度以每年100%的速度增长,两年后几乎达到原

来的四倍。1990年以前,磁盘密度以每年30%的速度增长,三年内几乎达到原来的两倍。在未来的一段时间内,磁盘技术将以更快的速度提高。存取时间在过去十年内缩短为原来的三分之一。这一技术是第7章的核心内容,我们将在那一节中对这一问题做更加详尽的讨论。

? 网络技术——网络的性能依靠交换和传输系统。时延和带宽二者都可以提高,但近

7

年带宽是人们关注的焦点。以前,网络技术的发展似乎很缓慢,就像以太网那样,花了近十年的时间才从10Mb提高到100Mb。网络发展的重要性将导致它更快的发展100Mb以太网出现5年后1Gb以太网就问世了。在美国,由于光纤设备和硬件交换系统的使用,互联网的主体架构已经在以更快的速度发展(带宽每年大约增长两倍)。

依靠这些飞速发展的技术,就可以通过提高微处理器的速度和使用先进技术将微处理器的寿命延长至五年或更长。即使在单个产品的生命周期中(两年设计期、二到三年投产期),关键技术――例如DRAM技术――变化之大也使设计者必须将其考虑在内。事实上,设计者是在为未来的某种技术进行设计,因为产品批量生产时正是这一技术最经济或性能最优时。通常,成本降低的速度与器件密度提高的速度相当。 这些技术变化不是连续的,而是跳跃式的,这种阶梯式的变化可能使以前无法实现的技术变得可行。例如,八十年代初期,当MOS技术发展到在一个硅片上可以有25,000到50,000个晶体管时,制造单片的32位微处理器就成为可能的了。到八十年代末,第一级高速缓存器在硅片上出现。如果消除处理器和高速缓存的交叉,则可以提高性价比和性能/功耗比。但这种设计在这一技术未达到某一水平之前是不可能的。这一技术的突破是可能的,它对设计会有很大的影响。

集成电路中晶体管、连线和功耗的衡量

集成电路的加工过程是用特征尺寸来表示的,特征尺寸是晶体管或者连线在x,y方向上的最小尺寸。1971年到2001年,特征尺寸从10微米降到了0.18微米。因为每平方毫米硅上晶体管数目由一个晶体管的表面积决定,所以当特征尺寸线性减少的时候晶体管的密度以平方项增加。但是晶体管性能的增加是更为复杂的。当特征尺寸减少时,设备在水平方向和垂直方向上都是平方倍的减少。在垂直方向上尺寸的减少需要操作电压的减少以保证操作的正确和晶体管的可靠性。这种和尺度因素的结合导致了晶体管性能和加工的特征尺寸之间的复杂关系。近似的说,集体管性能随着特征尺寸的减小线性的增加。 晶体管数目平方倍的增加伴随着晶体管性能线性的提升,这个事实为计算机体系结构设计者提出了挑战和机会。在微处理器产生之初,晶体管密度的高速增加使得处理器从4位发展到8位、16位和32位。直到最近,密度的增加才导致64位微处理器的产生及很多关于流水线和高速缓存的改进,这些将在第3、4、5章介绍。 尽管晶体管随着特征尺寸的减少而性能增加,集成电路中的连线却不这样。特别地,连线上的信号延迟与它的电阻和电容乘积成正比。当然,当特征尺寸减小,连线变短,但是每单位长度上的电阻和电容却增加。这个关系比较复杂,因为电阻和电容依靠具体的加工方法、连线的几何形状、连线的装载甚至和其他结构的连接。有时加工方法会提高连线延迟,比如用铜作为连接介质,这将会提高一个单位时间的线延迟。通常,线延迟数值范围与晶体管性能相比很大,这为设计者提出了更多的挑战。在过去的几年里,线延迟已经成为了大规模集成电路中主要的设计障碍,而且往往比晶体管转换延迟更为关键。更多的时钟消耗在信号的线延迟上。2001年,Pentium 4将其20多级流水线分成两个阶段,目的仅是在芯片上传输信号。 当设备达到一定规模的时候,功耗同样是具有挑战的。对于现代的CMOS微处理器,主要的能量消耗在晶体管状态的转换。每个晶体管需要的能量与晶体管的装载电容、转换频率和电压的乘积成比例。从一个加工过程到下一个,晶体管转换的数量、它们转换的频率和载入电容和电压的减少都导致了整体功耗的增加。第一个微处理器消耗功耗仅几百毫瓦,而2GHz的Pentium 4处理器消耗近100瓦的功耗。2001年最快的微处理器工作站和服务器消

8

耗功耗在100瓦到150瓦之间。分散功耗,消除热量和消除热点已经成为了很困难的挑战。在不久的将来,很可能是功耗而不是晶体管的数量会成为发展的最主要的限制。

1.4 成本、价格及其发展趋势

尽管在有的计算机设计(特别是超级计算机的设计)中成本因素可以不予考虑,但注重成本的设计却越来越重要。1999年,一半以上的PC机售价在1000美元以下,一台嵌入应用的32位微处理器的平均价格是几十美元。的确,在过去15年中,计算机行业主要是靠改进技术来提高性能和降低成本的。

教科书中常常忽略性价比中的成本因素,因为成本变化如此之快使得教科书中的内容很快就会显得过时了,而且成本在工业部门中确实是一个复杂的问题。可是,设计者如果想在考虑成本因素的情况下对是否增加某一功能特性作出明智的选择,就必须对成本及其要素有所了解,否则就会象建筑师对钢筋和水泥的行情一无所知就去设计摩天大厦一样不可想象。

这一节将集中讲述成本、价格的问题,尤其是二者之间的关系:价格是你卖一件成品所得到的,而成本是你生产这个产品所花费的全部费用。同时我们还讨论影响成本的因素和成本的变化趋势。习题和例题中的具体数据可能会随时间改变,但作为成本决策的基本原则变化相对要慢一些。这一节将通过对那些在计算机设计中起主要影响的成本因素的讨论向你介绍上述这些问题。

时间、产量、商品化和包装的影响

即使计算机的底层实现技术没有实质性的改进,计算机元件的生产成本也会逐渐降低,这是由于学习曲线(单位成本会随时间而递减)在起作用。学习曲线本身最便于用产出率来衡量,产出率就是通过质量检验的产品占总产品的百分比。不论生产的产品是芯片、主板还是一个系统,产量加倍,成本就会降低一半。

深入理解学习曲线对产出率的影响是在产品生命周期中控制成本的关键。举一个受学习曲线影响的例子:自从DRAM芯片的价格开始与其成本紧密联系在一起以后,每兆字节DRAM的价格长期以来一直就以每年40%的速度下降,当然这要除去短缺的一段时期,那时DRAM的价格和成本基本相当。事实上有一段时期甚至出现了价格低于成本,如2001年初。当然,制造商是绝不希望这种情况发生。

图1.5显示了每种DRAM芯片在其寿命周期内的成本变化,从中可以更形象地看到这一点。从设计初期到产品出厂的两年间,一个新的DRAM芯片的成本将固定降低5-10美元。由于并不是所有的组件成本都以同样的速度变化,所以基于计划成本的设计导致了不同的成本性能平衡。图1.5的说明具体讨论了DRAM价格的长期趋势。

9

图1.5 六代DRAM(从16Kb到64Mb)的价格(按1977年价格水平计价)随时间变化的曲线——显示学习曲线的作用。 1977年的1美元相当于2001年的2.95美元,通货膨胀主要发生在1977—1982这五年,在此期间,价格变化了1.59美元。在1977-1995年间,DRAM的价格以令人难以置信的速度狂跌,1MB内存从1977年的5000美元降到2000年的0.35美元,2001年的令人难以置信的0.08美元(以1977年价格水平计价)。每一代DRAM产品的价格都在其生命周期内降低了10-30个百分点。从1996年开始,出现了生产厂家的利润随着价格的下跌而疯狂降低的局面,连DRAM的最终价格也包括在内。在供不应求时——例如1987—1988年和1992—1993年间——价格有短期的回升,这体现为价格降低的速度趋缓。在本世纪初又出现了大量供过于求的情况,导致了价格的急遽降低,这是让厂家不能承受的。

微处理器的价格同样在下跌,但是由于它没有DRAM芯片那么规范标准,所以它的价格与成本之间的关系就显得更加复杂。在严峻的竞争时期,尽管出售微处理器的卖主几乎陷入亏本的境地,但价格依然随成本紧密变化。图1.6显示了Pentium III的价格变化趋势。

除此而外,产量也是决定成本的重要因素。产量会以几种方式影响成本。其一,产量增加会缩短达到学习曲线最优生产效率的时间,这一时间部分地与产品或系统的产量成正比。其二,产量增加可以提高采购和生产的效率,从而降低成本。根据以往的经验,一些设计者曾经估算出产量每增加一倍,成本就会降低10%。其三,随着产量的增加,每件产品均摊的开发费用会减小,因而产品的成本和售价都可能降低。稍后,我们还会讨论影响售价的其它因素。

10

图1.6 当产出率提高和竞争的压力同时导致成本的降低时,Intel Pentium III的价格随着时间的变化以固定的频率下降。这里的数据是由2000年5月出版的微处理器报告提供。最新的介绍显示Pentium III的价格将继续下跌直到与其今天的最低成本部件接近一致(100-200美元)。这样的价格下跌呈现了一种价格与成本紧密同时下降的竞争局面。

零配件是由多家厂商大量出售的可以完全互换的产品。事实上,零售店货架上出售的所有商品都可以称为零配件。零件包括DRAM、小型磁盘、监视器、主板等。在过去十年中,计算机产业的大多数低端产品是装配IBM兼容PC机的零配件。有许多厂商生产完全可互换的产品,因而该领域内竞争激烈。当然这种激烈竞争减小了售价与成本间的价差,但它同时也降低了成本。这是因为零售市场产量大,而且产品有明确的规范,这使得多家厂商可以参与到生产零配件的竞争中来。零配件供应商之间的激烈竞争和零配件产量增加带来的高生产效率最终导致零配件的总生产成本的下降。尽管只有非常有限的利润可赚(这也是所有零部件行业的特征),但也使计算机行业在低端产品方面可以比别的部门获得更高的性价比和更大的产量。

集成电路的成本

为什么一本计算机系统结构的教科书会有一节专门来讨论集成电路的成本呢?在竞争日益激烈的计算机市场中,标准件—如磁盘、DRAM等—在计算机总成本中占的比例越来越大,集成电路的成本成了影响计算机总成本的重要因素。在产量大、对价格敏感的市场中尤其如此。因此,要想弄清楚整机的成本就必须先弄清楚集成电路的成本。

尽管集成电路的成本呈指数下降趋势,但是生产硅片的基本程序并没有改变:先对一个晶片进行测试,然后把晶片切分成电路小片,再对每个电路小片进行封装(见图1.7和1.8)。所以一片封装好的集成电路的成本为:

最终成品数目本节中,我们集中讨论电路小片的成本,并在本节末尾概略介绍影响测试和封装成本的主要因素,在习题中会有对测试和封装成本更详细的讨论。

11

集成电路的成本?电路小片的成本?测试电路小片的成本?封装成本

图1.7

含有Intel Pentium 4处理器的8英寸晶片的照片。(照片由Intel提供)

图1.8 含有NEC MIPS 4122的12英寸晶片的照片。R20K是由带有指令集扩展的

MIPS64系统结构实现的,被称作MIPS-3D,用来计算三维图像处理。这种R20K的频率从500MHz到750MHz,在每个时钟周期可以同时执行两个整数操作。通过使用MIPS-3D的指令,R20K可以每秒累计执行30亿次的浮点运算。(照片由MIPS科技公司提供)

要想知道每个晶片上有多少性能良好的电路小片,就要先知道晶片的面积和正常工作的电路小片所占的比例。由此可以推知电路小片的成本为:

电路小片的成本?晶体的成本每片晶片的电路小片数?电路小片的成品率 有趣的是,这一电路小片的成本公式表明电路小片的成本对电路小片的大小非常敏感。下面将阐述这一点: 每个晶片上电路小片的个数近似为晶片的面积除以电路小片的面积,更确切的公式如下:

每个晶片的电路小片数????晶片的直径2?电路小片的面积2???晶片的直径2?电路小片的面积 12

第一项是晶片面积与电路小片面积的比,第二项是对晶片边缘附近方形小片数目的修正。晶片的周长除以正方形电路小片的对角线长度近似为晶片边缘处电路小片的数目。例如,直径为30厘米(约12英寸)的晶片上有3.14*225-(3.14*30/1.41)=640个边长为1厘米的电路小片。 例题 直径为30厘米的晶片上有多少边长为0.7厘米的电路小片? 解: 电路小片的面积为0.49cm2所以

每个晶片的电路小片数?

???30?2?20.49???302?0.49?706.594.2??13470.490.99??但这仅给出了每个晶片上可以容纳的电路小片最大数目,还有一个关键问题是每个晶片

?单位面积内的残次品数目?电路小片的面积??电路小片的成品率?晶片的成品率??1??????上性能良好的电路小片的比例即电路小片的成品率是多少。集成电路产出率的一个经验模型

假定有缺陷的产品在晶片中随机分布且产出率与制造过程的复杂性成反比,所以有如下的公式: 其中晶片成品率除去了完全被损坏因而不必进行测试的晶片。为简便起见,我们假定晶片成品率为100%。单位面积的残次品数目用来衡量随机缺陷和制造缺陷。在2001年,因工艺成熟程度(回忆一下前面提到过的学习曲线),这一指标基本上在0.4到0.8之间。最后,α是一个衡量工艺复杂程度的参数,它是影响电路小片成品率的重要参数,它粗略与掩模的层数相对应。对于现在的多层金属CMOS生产流程而言,α取4.0较好。 例题 设残次品密度为0.6/cm2,分别求边长为1厘米和0.7厘米的电路小片的成品率。 解: 电路小片的面积分别为1平方厘米和0.49平方厘米 面积较大的电路小片的成品率为:

?0.6?1?电路小片的成品率??1??4.0??

面积较小的电路小片的成品率为:

?4?0.57?0.6?0.49?电路小片的成品率??1??4.0???4?0.75 这样,用每个晶片的电路小片的数目乘以电路小片的成品率(包括次品)就得到每个晶

片上功能良好的电路小片的数目。在上面的例子中,预计在直径为30厘米的晶片上有366个面积为1平方厘米的性能良好的电路小片或1014个面积为0.49平方厘米的性能良好的电路小片。在现代0.25u工艺下,大多数32位、64位微处理器的电路小片尺寸都在这个范围内,在缩放之前的原型制作阶段最大的面积曾达到2平方厘米。低端嵌入式32位处理器有时面积小到0.25平方厘米,用于打印机、汽车的嵌入式微处理器有时只有0.1平方厘米(习题1.8中图1.34展示了当今几种微处理器的电路小片和技术)。 假定在零部件产品(如DRAM和SRAM)的巨大价格压力之下,设计者不得不采用多生产一些产品作为提供成品率的一种手段。在几年之内,DRAM通过定期的多生产一些存储单元来消除那些残次品。在微处理器中为高速缓存使用的标准SRAM和更大的SRAM阵列中,设计者们都已经采用了类似的技术。显然,这种多余产品的出现对提供成品率是很有效的。

13

在2001年的领先科技中,以4-6层金属工艺处理一个直径为30cm的晶片需要花费5000-6000美元的成本。假设一个处理过的晶片成本是5500美元,那么一个0.49平方厘米的电路小片的成本将大约为5.42美元,而1平方厘米的电路小片的成本将大约为15.03美元,或者相当于面积是它两倍的小片的成本的三倍。 计算机设计者对芯片的成本应该注意哪些东西呢?生产流程决定了晶片的成本、晶片的成品率、和单位面积的残次品个数,所以设计者唯一能控制的就是电路小片的面积。对于今天使用的先进生产技术而言,通常α取4,所以电路小片的成本与电路小片面积的四次方(或更高)成正比。然而实际上,由于单位面积的残次品的个数是少量的,所以每个晶片上好的电路小片的数量和成本是与电路小片的面积的平方成正比的。计算机设计者电路小片的大小有影响,因此对电路小片的成本有影响。而电路小片的大小和成本都要受到电路小片所包含的功能特性和I/O管脚数的影响。 在我们决定把一个部件加入计算机前,必须对它进行测试、封装、封装后的再测试。这些步骤都会增加成本。这些过程带来的附加成本将在习题1.8中详细讨论。 以上重点在于分析生产一个功能电路小片的成本变量,这是和高产量的集成电路的发展相适应的。然而对于那些低产量(如不超过一百万的零件数)的集成电路而言,掩模组的成本是一个非常重要的固定成本。在集成电路处理过程的每一步都需要一个单独的掩模。所以,对于现代4-6层金属层的高密集度工艺制造过程来说,掩模的成本费用通常超过100万美元。显然,这个影响着制造原型和调试运行的巨大的固定成本,成为了低产量生产中生产成本的一个重要部分。由于掩模的成本价格有可能继续上涨,所以设计者们将采用组合逻辑来提高某个部件的复杂性,或者选取一些门阵列(特制掩模标准),从而降低掩模的蕴涵成本。

成本在系统中的分布:一个实例

为透视硅片的成本,图1.9显示了2001年的一台价值1000美元的PC机中各部件的近似成本。尽管图1.9中的有些部件的成本随着时间的推移必然会下降,但有些部件(如机箱和电源)的成本未来短时间内几乎不会有大的变化。此外,我们预测将来的计算机会有更大的内存和硬盘空间,这意味着价格下降的速度会远低于技术进步的速度。

处理器子系统仅占总成本的6%。尽管在中型或大型设计中这一比例会提高,但多数子系统的分类细目的比例仍是差不多。

系统 子系统 占总成本的比例 机箱 金属、塑料、 2% 电源、风扇 2% 电缆线、螺钉和螺母 1% 包装箱、手册 1% 小计 6% 主板 处理器 22% DRAM (128M) 5% 显卡 5% I/O子系统,网络系统 5% 小计 37% I/O设备 键盘和鼠标 3% 监视器 19% 硬盘(20GB) 9% DVD驱动器 6%

14

小计 37% 软件 操作系统+基本Office组件 20% 图1.9 2001年一台价值1000美元的PC机中各部件的估计成本分布。注意占总成本比例最大的单个部件是处理器,然后是监视器。(有趣的是,在1993年的时候,DRAM内存的价格占整个整机成本的近三分之一,是当时最贵的部件!但从那以后,它的价格以每MB大约15个百分点的速度下跌!)Touma[1993]详细讨论了工作站的成本和价格。

成本与价格——它们为什么不同及相差多少

元件的成本可能会限制设计者实现某些设计意愿,但它与用户购买的最终产品的价格仍然相差甚远。在一本计算机系统结构的书中为什么要包含对价格的讨论呢?成本在变为价格之前,要经历许多变化,计算机设计者应当了解他的设计决定是如何影响价格的。例如,成本提高1000美元,价格可能会提高3000到4000美元。如果设计者不清楚成本与价格的关系,他就不会了解增减或替换零件对价格的影响。

价格与产量之间的关系进一步强化了成本变化对价格的影响,特别是在低端产品的市场。通常,价格提高会使销售量下降,随之而来的产量减少会使成本提高,导致价格进一步提高。这样,成本即使发生很小的变化也会对价格产生非常显著的影响。成本与价格之间的关系非常复杂,有专著对此进行讨论。这一小节的目的只是介绍一下影响价格的重要因素及通常情况下它们影响的强弱程度。 组成价格的各个范畴既可以看作在成本的基础上的附加值也可以看成是价格的百分比,我们将从这两个方面讨论问题。成本与价格的差异还取决于公司在哪儿销售产品。为显示这些差异,图1.10列举了原料成本与标价之间的差额是由哪些部分构成的。图中,随着开销逐渐增加,价格也从左到右逐渐提高。

直接成本是指与制造一件产品直接相关的成本,包括劳动力成本、购买元件的成本、碎料(生产所剩余的废料)和保证金(在保证期内系统在用户端失效时的更换或维修费用)。直接成本通常是元件成本的10%到30%。因为用户通常支付服务或维护费用,所以这部分开支通常不计算在费用内,尽管在直接成本或下面将要提到的总利润中也可以包括一项名为保证金的费用。

另一项附加是额外费用,作为公司的额外开销,它是不能直接计入产品成本的一项经营性费用。这一项可以被看作间接成本。它包括公司的研发费用、营销费用、设备维护费用、场地租金、财务成本、税前利润和赋税。元件成本加上直接成本和额外费用后,就成了我们通常所说的平均售价——在MBA术语中被称为ASP——也就是出售产品后进入公司的全额。额外费用通常占平均售价的10%到45%,具体数值取决于产品的市场比例。低端微机制造商的额外费用通常都不高,这主要有以下几个原因:第一,它们的研发费用不高;第二,它们的销售费用相对较低,因为它们通常不采用推销员上门直接推销的方式,而采用邮购、电话定购或零售商代销的方式;第三,因为它们的产品通常不具有垄断性质,竞争比较激烈,所以总利润通常较小。

标价与平均售价是不同的。一个原因是公司通常提供因购买数量而异的折扣,降低了平均售价。另一个原因是如果产品通过零售商代销,例如个人电脑,零售商将提取标价的一定百分比作为自己的销售收入。这样,因分销系统的不同,平均售价也和标价不同。

15

标价 平均售价 17% 直接成本 83% 元件成本 25% 额外费用 12.8% 直接成本 62.2% 元件成本 25% 平均折扣 18.8% 额外费用 9.6% 直接成本 46.6% 元件成本 100% 元件成本 增加20%直接成本 增加33%额外费用增加33%平均折扣

图1.10 一台价值1000美元的PC机的价格组成。每一次价格提高都是按前一次价格的百分比计算。新价格中各部分所占的比例在每一列的左侧显示。

像我们前面提到过的一样,价格对竞争十分敏感:一个公司可能无法按包括总利润所要求的价格卖出产品。在最坏的情况下,公司必须大幅度削价甚至亏本销售。一个力图争取市场份额的公司可能会降价让利来增加其产品的吸引力。如果产量增加得足够多,成本可能会下降。这其中的关系非常复杂,要想深入阐述它们需要整本书,而不是这一小节能够讲清楚的。举个例子,如果一个公司降低价格,而产量却没有相应幅度地增加,总的效果将是利润下降。 许多工程师对大多数公司的研发费用仅占其收入的4%(PC计算机业务)到12%(高端产品业务)感到惊异,而且这笔费用包括除制造和领域工程外的所有工程研发费用。这是企业年度业务报告和全国范围内发行的杂志上公布的,这个百分比大概不会随时间而改变。事实上经验显示,一个研发费用仅占其收入的15%-20%的计算机公司是不可能长期盈利的。 上面的信息意味着公司可以在成本的基础上附加固定比例的开销作为价格,事实上大多数公司也是这么做的。换一个角度来看,如果把研发费用也看作一项投资,这样收入的4%到12%用于研发就意味着每花1美元的研发费用必须带来8到25美元的销售额。由此可以看出,产品的销售量和投资额度不同,额外费用就不同。 大型昂贵的机器通常开发费用较高——一台制造成本贵10倍的机器,研发费用通常要贵数十倍,这是因为大型昂贵的机器通常销量比较小,因此大型机器必须附加较大的额外费用才能给公司带来期望的投资回报。因此,开发大型机器会给公司带来双重风险——销量小而且开发费用高,这就是大型计算机的价格成本比率比小型计算机高的原因。 成本和成本性能比的关系是一个复杂的问题,对计算机设计者而言并没有统一的答案。一种极端的情况是为了设计高性能计算机而不考虑成本。传统的超级计算机就属于这种情况,但是这些只关系机器性能的公司在市场上只占一小部分。另一种极端的情况是牺牲某些性能来达到低成本计算机的设计目标。一些嵌入式市场,如手机里的微处理器就属于这种情况。在二者之间是成本性能比最优设计。在这种情况下,由设计者平衡性能和成本孰轻孰重,做出决策。大多数PC机、工作站和服务器(至少包括所有的低端和中端服务器)的生产厂家都属于这一范畴。在过去十年中,由于计算机的体积不断变小,最低成本设计和性能价格比最优设计都变得更加重要。在这一节简略地介绍了一些影响计算机成本的最重要的因素,下一节将讨论性能。

16

1.5 评价和报告计算机的性能

当我们说一台机器比另一台机器快时,我们到底是指什么呢?对于计算机使用者来说,当同一个程序在一台机器上运行比在其它机器上运行用的时间短时,用户就认为这台计算机比较快。但对于计算中心的管理员来说,在单位时间内完成的任务多的机器比较快。计算机使用者关心的是如何减小响应时间(也称为执行时间)— 一个事件从开始到结束所用的时间。一个大的数据处理中心的管理员关心的是如何增大吞吐量——单位时间内完成的总工作量。

在比较各设计方案时,我们经常希望比较两台机器(设为“X”和“Y”)的性能。在这里,“X比Y快”指的是对于给定的任务,X的响应时间或执行时间比Y短。特别地,“X的速度是Y的n倍”是指:

Y的执行时间?n

X的执行时间由于执行时间与性能成反比,所以下述关系成立:

1Y的执行时间Y的性能X的性能 n???1X的执行时间Y的性能X的性能“X的吞吐率是Y的1.3倍”指的是单位时间内X机器完成的任务是Y机器完成任务数量的1.3倍。 因为性能与执行时间互为倒数,所以增大性能就是减少执行时间。为了避免混淆增大和减小的含义,我们通常说“提高性能”或“缩短执行时间”来代替增大性能和减少执行时间。 不论我们是对吞吐率感兴趣还是对响应时间感兴趣,关键还是时间:相同的任务,花费的时间越少,速度越快,区别在于是单任务(响应时间)还是多任务(吞吐率)。不幸的是在比较机器性能时并不总是用时间做标准。出于便于理解和通用性的考虑,市场上一般采用几个比较流行的评价标准。结果,几个无害的术语脱离了原先明确定义的语境,被用来表达最初从未想要它们表达的含义。笔者的立场是认为性能的永久的最可靠的衡量标准是真实程序的执行时间。任何反对以时间做标准或反对用真实程序进行测试的建议都会引起误解甚至造成计算机设计的失误。在1.9节中我们将举几个流行的替代标准导致错误的例子。

评价性能

即便是执行时间也可以根据我们的需要赋予不同的含义。时间的最直接定义也称为外部时钟、响应时间或共用时间,指的是完成一项任务所需的延迟,包括磁盘访问时间、内存访问时间、输入/输出操作时间、操作系统开销——总之所有的时间都包括在内。在多道程序同时运行的计算机中,当一个程序等待I/O操作完成时CPU立即转而执行另一程序,此时计算机不必使每个程序的经过时间最短。这样,我们就需要另一个术语将这种情况考虑在内。CPU时间体现了这一区别,因为它指的是CPU计算消耗的时间,而不包括等待I/O操作完成或运行其他程序的时间。(很明显,用户感受到的响应时间是程序从开始执行到结束的全过程时间,而不是CPU时间。)CPU时间还可以进一步细分成执行程序的时间(称为用户CPU时间)和完成程序执行所需的操作系统功能调用的时间(称为系统CPU时间)。

这些区别可以从UNIX的时间命令的返回结果反映出来,下面是一个程序执行返回的四个参数:

17

90.7u 12.9s 2:39 65%

上述数字的含义是用户CPU时间是90.7秒, 系统CPU时间是12.9秒, 执行程序消耗的总时间为2分39秒(即159秒),CPU时间占总执行时间的比例为(90.7+12.9)/159,结果为65%。三分之一多的执行时间用来等待I/O操作或其他程序执行。很多衡量标准忽略系统CPU时间,因为系统CPU时间很难准确测量,此外,如果两台机器的操作系统代码不同,包括系统CPU时间在内的比较将是不公平的。一台机器的系统代码可能是另一台机器的用户代码,再说,如果没有某种操作系统在硬件上执行,就根本不能执行任何程序。所以在有些情况下使用用户CPU时间与系统CPU时间之和(即总的CPU时间)较为合适。

在现在的讨论中,基于共用时间的性能衡量标准和基于CPU时间的性能衡量标准是不同的。系统性能指的是程序在无负载系统中的共用时间,而CPU性能指的是程序在无负载系统中的用户CPU时间。在本节我们主要讨论CPU性能。

选择程序评价机器性能

本程序是对典型的Fortran程序进行大量研究的结果,它体现了典型Fortran程序中各种指令所占的比例。如果这个程序在某台机器上运行较好,可以预测其它典型的 Fortran程序在同一台机器上也会运行得较好。语句故意被安排得会弱化编译器优化的效果。

――H.J.Curnow 和B.A.Wichmann在Whetstone Benchmark上的评论(1976)

一个整天运行同一个程序的用户大概就是最适合替一台新机器评分的人选了。为测试新系统的性能,他只要比较他的工作负载――程序和用过的操作系统指令――的总执行时间就可以了。不幸的是这种情形是很少见的。大多数情况下,用户必须依靠其它方法和评价程序来评价机器的性能,并希望这些方法能够为他们预测新机器的性能。下面列出了五种评价程序,它们预测的准确程度依次递减:

1. 真实的程序――尽管购买机器的人并不知道他将花多少时间运行这些程序,但他可

以确信有一些用户用这些程序完成真实的工作。这些真实的程序包括C编译器、象Word那样的文字处理软件、象Photoshop那样的应用软件。真实的程序有输入、输出和运行时用户可以控制的选项。在使用真实的程序时存在这样一个重要的问题,即经常碰到一些由于依靠操作系统或是编译器而引起的可移植性问题。增强可移植性通常意味着修改源程序和消除一些重要的东西,如交互式图形,这将使得整个系统更加独立。

2. 修改的(或脚本)程序——在很多情况下,真实的程序通过修改或是使用脚本用来

构造基准程序的模块。一般修改程序都是为了两个主要的原因:要么是增强可移植性,要么就是为了满足某种特殊的系统性能。举个例子,为了实现一个面向CPU的基准程序,需要通过改变I/O来使它对执行时间的影响最小。用脚本语言来模拟应用程序从而重新产生交互式动作,这种方法通常用在桌面型电脑系统,或者是在服务器系统中来模拟复杂的交互式界面。

3. 核心程序――人们曾尝试从真实的程序中提取出一些小而关键的程序片段来评价

程序的性能。Livermore Loops和Linpack是最著名的例子。与真实程序不同的是,

18

Dhrystone不用浮点。典型的程序不会?? Rick Richardson

Clarification of Dhrystone(1988)

用户绝不会真的运行核心程序,运行它们只是为了评测机器的性能。核心程序最大的用途就是将机器中各项特性的性能分离出来,以解释运行真实程序时性能有差异的原因。

4. 小型基准程序——它们通常只有10到100行代码,运行结果用户在测试前已经知

道。象Erastosthenes的Sieve、Puzzle、快速排序之类的程序之所以得到如此广泛的应用就是因为它们都很小、容易输出结果而且几乎能在所有的计算机上运行。这些程序最适宜的应用场合就是作为初学编程时的课外练习。 5. 合成基准程序——与核心测试程序的想法相似,合成基准程序取大量程序的指令和

操作数出现频率的平均值。Whetstone和Dhrystone是最著名的合成基准测试程序。在1.9节中有对这些测试程序及其缺陷的介绍。不会有用户运行合成基准测试程序,因为它们不会产生任何用户需要的结果。合成基准测试程序的结果与真实情况的差距更远,因为核心程序是从真实程序中抽取出来的,而合成基准测试程序是为了模拟其它程序的平均执行情况人工拼凑出来的,它甚至不如核心程序,因为至少后者是真实程序的片段。

因为机器的性价比直接关系到计算机企业的兴衰,所以各企业都不遗余力地提高广泛使用的测试软件在其机器上运行的性能。这种压力可能会扭曲软件和硬件工程技术人员的努力,为机器增加了各种旨在提高基准合成测试程序、核心测试程序、以至个别真实程序性能的优化措施。可是,针对每个真实程序增加优化措施虽然并不是不可能的,却是不太现实的。稍后我们将会看到,这种情况带来的结果之一就是一些测试程序提供者为编译器提出了若干必须遵守的规则。

基准测试程序套件

最近,把一些基准测试软件集中在一起来评测处理器处理各种应用的性能的做法十分流行。当然,这种成套的基准测试软件的功能与单个基准测试软件差不多。不过,成套的基准测试软件一个很重要的优点就是单独某一种基准测试软件的弱点会被另一种基准测试软件掩盖。如果用运行成套的基准测试软件的时间作为机器性能的衡量标准,这一优点就更加明显了。因为这样一来,专门针对某一个基准测试软件所作的优化效果就不明显了。在本节接下来的内容中,我们将讨论各种性能评价方法的优点和缺点。

SPEC(标准性能评估公司)是最成功的研发标准成套测试软件的公司之一,它是在80年代末期为了用于评估工作站而产生的。随着计算机工业的长足发展,对用于不同目的成套测试软件的需求也是在不断增加,目前SPEC和基于它开发出来的成套测试软件基本覆盖了不同的应用领域,甚至其它基于SPEC的测试套件。

尽管在接下来的许多章节我们都将着重讨论SPEC测试软件,但目前已经有很多公司正在努力研究开发一些用来评估在Windows操作系统的PC机的测试软件,这些研究覆盖来各种不同的应用领域(如图1.11所示)。

测试软件名称 测试软件说明 商用Winstone 运行一个包含Netscape Navigator和几种成套office(Microsoft、Corel,WordPerfect)产品软件的脚本。这种脚本可以模拟使用者在不同应用程序间的切换 CC Winstone 模拟多个应用程序,主要针对内容的创建,

19

如Photoshop,Premiere,Navigator和各种音频编辑程序 Winbench 通过每个子系统上的核心程序来运行各种脚本,从而测试CPU、视频系统和磁盘的性能 图1.11 一个PC测试软件的实例。前两栏是用真实的软件写的脚本程序,最后一栏是小型基准程序和合成基准程序共同组成。目前这些都是由一个叫Ziff Davis的发行人维护的,同时Ziff Davis还提供独立的测试服务。如果要想更加详细的了解这些测试软件的有关内容,可以参考:www.etestinglabs.com/benchmarks。

桌面基准程序

桌面基准程序分为两大类:CPU密集的基准程序和图形密集的基准程序(大多数图形密集的基准程序包含CPU密集的行为)。SPEC最初针对CPU性能做出了一个基准程序(最开始叫SPEC89),现在已经发展到第四版:SPEC2000,中间版本有SPEC95,SPEC92。(1.9节中图1.30具体讨论了基准程序的发展)SPEC CPU2000,如图1.1总结,包括11个整数基准程序集(CINT2000)和14个浮点基准程序集(CFP2000)。SPEC基准程序是真正的程序,经过精简并且最小化程序的I/O,使其在总性能中不占主要作用。整数基准程序从C编译器的一部分到针对图像应用的VLSI布图布线,范围广泛。浮点基准程序包括量子色动力学,有限元模型和流体力学。SPEC CPU基准程序对桌面系统和单处理器的服务器性能的测试都是很有用处的。在本书中,我们将看到很多数据都是基于这些程序的。 在下一小节里,我们将看到SPEC2000的报告是如何描述机器、编译器和操作系统的配置的。在1.9节中,我们将描述一些出现在SPEC基准程发展中的缺陷和维持一个有用的和有前兆的测试程序所面临的挑战。 尽管SPEC CPU 2000是针对CPU性能的,但是SPEC同时也开发了两类不同的图形基准程序:SPECviewperf (参见www.spec.org)用于测试支持OpenGL图形库的系统,而SPECapc则包括一些大量使用图形的应用程序。SPECviewperf用于测量在OpenGL下使用3D模型和一些列OpenGL调用时系统中3D透视图的性能。SPECapc包括几个可运行的大规模应用程序,包括:

1. Pro/Engineer —— 一个扩展3D透视图的可靠的模型应用程序。输入脚本是一个包

括370000个三角形的影印机模型;

2. SolidWorks2001 —— 一个运行从I/O密集型到CPU密集型等5个测试程序的3D

CAD/CAM设计工具。最大输入可以在模型的流水线里包括276000个三角形。 3. Unigraphics V15 —— 基于飞机模型和单一图画光谱功能,包括装配,数字控制机,

固体模型和优化。所有的输入都是飞机设计中的组成部分。 基准类型 源代码所用编程语言 说明 测试程序 gzip integer C Lempel-Ziv压缩算法 vpr integer C FPGA电路的布局和布线 gcc integer C 包含了一个可以生成优化机器代码的GNU C编译器 mcf integer C 公共传输时序的组合优化 crafty integer C 象棋对攻程序 parser integer C 英语语法分析器 eon integer C++ 使用盖然论光线跟踪的图形显

20

perlmbk gap vortex bzip2 twolf wupwise swim mgrid apply mesa galgel art equake facerec ammp lucas fma3d sixtrack apsi integer integer integer integer integer FP FP FP FP FP FP FP FP FP FP FP FP FP FP C C C C C F77 F77 F77 F77 C F90 C C C C F90 F90 F77 F77 示 有4个输入脚本Perl(一种字符串处理解释语言) 一组原理程序包 面向对象的数据库系统 块排序压缩算法 Timberwolf:VLSI布局布线中用到的一种模拟退火算法 量子色动力学格子度量模型 利用不同的有限方程解决水影方程 三维范围内的多网格处理器 部分抛物、椭圆方程解算器 三维图形库 计算流体动力学 通过神经网络的热成像图像识别 地震波传播模拟 通过小波图像匹配来识别人脸 在水中的蛋白分子动态模拟 完成对Mersenne素数的原始测试 有限元素模型的碰撞模拟 高能量物理加速设计模拟 污染分布的气象模拟 图1.12 SPEC CPU2000基准程序中的程序。11个整数程序(除1个用C++实现,其余都用C实现)在CINT2000中。14个浮点程序(6个用Fortran-77实现,5个用C实现,3个用Fortran-90实现)在CFP2000中。关于这些基准程序,更多的见www.spec.org。

服务器基准程序

正是因为服务器有多种功能,所以存在很多种基准程序。最简单的基准程序也许是全部面向CPU的基准程序了。SPEC CPU 2000使用SPEC CPU基准程序构建了一个简单的基准程序,这个程序能够运行多份SPEC CPU测试程序并将CPU时间转换成处理器的处理比率。这种测试方法叫做SPEC比率法。 除了SPEC比率法,大部分服务器应用程序和基准程序因为有磁盘和网络访问而导致显著的I/O活动,这些基准程序针对文件服务器系统、网络服务器、和数据库系统以及事务处理系统。SPEC提供文件服务器基准程序(SPECSFS)和网络服务器基准程序(SPECWeb)。SPECSFS(参见:http://www.spec.org/osg/sfs93)是一个通过使用文件服务器请求来测量NFS(网络文件系统)性能的基准程序,它能够测量I/O系统(包括磁盘和网络I/O)性能和CPU的性能。SPECSFS是一个面向吞吐量的基准程序,但是对时间响应有严格要求(第7章将具体讨论一些文件和I/O系统基准程序)。SPECWeb是一个网络服务器基准程序,它能够模

21

仿多客户端对动态和静态网页的请求以及客户端向服务器传输的数据。 事务处理(TP)基准程序测量一个系统处理事务的能力,它包括数据库访问和升级。航线预定系统以及银行的ATM机是典型而且简单的TP系统。更复杂的TP系统包括复杂的数据库和决策机制。在80年代中期,一些相关的工程师组成了独立于提供商的事务处理委员会(TPC)来创造一组事务处理中理想和公正的基准程序。第一个TPC基准程序,TPC-A,于1985年出版并且经过了4次不同测试程序的加强。TPC-C于1992年初产生,它能够模仿一个复杂的访问环境。TPC-H模型特别的是支持了决策——与过去无关的访问不能够用来优化将来的访问,结果是执行时间非常的长。TPC-R模仿一个商业决策支持系统,在这个系统上用户可以运行一组访问查询。在TPC-R中,在查询之前应当对其有所了解,DBMS系统可以优化运行这些查询。TPC-W是一个基于网络的事务处理基准程序。它能够模拟一个面向商业的事务处理网络服务器的活动。TPC基准程序在www.tpc.org有详细的描述。 所有的TPC基准程序都是描述每秒钟事务运行的性能的。此外,它们对响应时间也有要求,所以只有当响应时间符合要求时才会测量吞吐性能。为了模仿现实世界,高的事务处理比率是和大的系统相联系的,这对用户和数据库来说都是如此。最后,基准程序系统运行的消耗也要包括进来,这样能够达到对性能的更准确的比较。

嵌入式基准程序

嵌入式系统的基准程序相对于桌面电脑和服务器环境下的测试程序来说相当的原始。事实上,很多制造商在使用一个10多年前曾用在桌面电脑系统但因被批评而淘汰的程序。就像上面所说的,嵌入式应用的多种多样和性能需求的多种多样(硬实时、软实时或是整体的性能开销)使得无论对内核还是一个完整的应用程序使用简单的基准程序集是不切实际的。 对于那些能够很好表现出内核性能的嵌入式应用程序来说,最好的标准基准程序集是一个新的基准程序集:EDN嵌入式微处理器基准程序联盟(EEMBC,读作“embassy”)。EEMBC基准程序分为5类,自动/工业、消费者、网络、办公自动化和无线通讯。图1.13列出了这5类不同的应用,一共包括34个基准程序。 尽管很多嵌入式应用对小内核的性能很敏感,但是请记住往往整个应用程序(通常都是上千行)的性能更为关键。因此,对于大部分嵌入式系统来说,EMBCC基准程序仅能用来评估一部分的性能。 基准程序类型 基准程序个数 举例 16 自动/工业 6种微测试程序(算法操作,指针,记忆性能,矩阵算法,查表法,字节操作),5个自动控制基准程序,5个滤波或FFT基准程序 5 消费者 5个多媒体基准程序(JPEG压缩/解压缩,滤波,RGB变换) 3 网络 最短路计算,IP路由选择,封装流操作 4 办公自动化 图形和文本基准程序(Bezier曲线计算,抖动,图像旋转,文本处理) 6 无线电讯 滤波和DSP基准程序(自动校正,FFT,解码器,译码器) 图1.13 EEMBC基准程序,包括5类不同的应用的34个基准程序。更多信息见www.eembc.org

22

性能评价报告

书写性能评价报告的指导原则是可重现性——列出另一个试验人员若想得到同一试验结果所需的所有资料。一份SPEC基准测试报告需要对机器、编译标志作相当详尽的说明,而且应当公布优化结果和基准性能结果。举例来说,图1.14列出了Dell Precision Workstation 410 的SPECCINT2000测试报告的一部分。除硬件、软件、基本调试参数的设置外,一份SPEC还应当以表格和图示的方式给出实际性能时间。一个TPC的基准测试报告更加复杂,因为它必须包括市场审计和费用信息。

一个系统的软件构造对它的基准测试报告的性能有着非常重要的影响。就比如说在服务器的基准测试软件中,其操作系统的性能和支持尤其重要。出于这个原因,通常把这些基准测试软件放在单用户模式下运行,从而降低费用。另外,在TPC测试软件中,通常通过升级操作系统来提高软件自身的性能。同样,编译器技术在面向计算机的基准测试软件的性能方面也有着举足轻重的作用,尤其是当机器的源代码允许修改或测试软件对优化很敏感的情况下,它的作用就显得更为突出。综上原因可以看出,精确的描述一个软件系统和是否做过某种非标准的修改都同等重要。

另一个增强基准测试程序性能的方法是增加了许多基准测试程序专用的标志。这些标志在其他许多程序中可能是非法的或降低程序的性能。为限制这种行为并提高SPEC评价结果的权威性,SPEC组织在优化性能的基础上增加了基准性能评价标准。基准性能限制厂商在一种编程语言(C或FORTRAN)中只能使用同一种编译器和同一套标志。图1.14显示了在基准性能评价中使用的参数。在1.9节中,我们将看到在同一机型上优化性能可以使用哪些参数。

硬件 软件 Precision Windows 型号 操作系统及其版本 WorkStation410 NT4.0 CPU CPU的个数 一级高速缓存 二级高速缓存 其它高速缓存 700MHz, PentiumIII 编译器及其版本 IntelC/C++ Compiler 4.5 其它软件 如下所示 1 NTFS 文件系统 16KBI+16KBD芯片上 系统状态 默认 256KB(I+D)芯片上 无 256MB ECC 主存 PC100SDRAM SCSI 磁盘子系统 其它硬件 无 SPEC CINT2000 调试参数/说明/变化总结: +FDO:PASS1=-Qprof_gen PASS2=-Qprof_use 调试参数:-QxK –Qipo_wp sh1W32M.lib +FDO sh1W32M.lib是从MicroQuill www.icroquill.com 得来的SmartHeap库5.0版本。 标志位: 176.gcc: -Dalloca=_alloca/F10000000 Op 186.crafy: DNT_i386 253.perlbmk: -DSPEC_CPU2000_NTOS –DPERLDLL /MT 254.gap: -DSYS_HAS_CALLOC_PROTO –DSYS_HAS_MALLOC_PROTO

23

图1.14 在Dell Precision WorkStation 410 上运行SPEC CINT2000 测试程序的机型、软件和参数设置。上面这些是CINT2000的测试报告数据。更详细的内容在www.spec.org/osg/cpu2000/results/cpu2000.html

除了标志优化的问题外,还有一个重要的问题就是机器的源代码是否允许修改或者能否手动生成汇编语言。下面有四种不同的方法解释这个问题:

1. 不允许对源代码进行修改。SPEC基准测试软件就属于这一类,正如大多数标

准PC基准测试软件那样。

2. 允许对源代码进行修改,但事实本质上很难或几乎不可能。如基于Oracle或

Microsoft SQL服务器等数据库的TPC-C等基准测试程序。尽管这些第三方销售商对他们重要的工业标准基准测试程序系统的性能非常感兴趣,但是他们绝对不可能为某个特别的用户提高性能而改变他们的销售策略。TPC-C也非常依赖于操作系统,这一点可以改变。

3. 允许对源代码进行修改。部分超级计算机基准测试软件允许修改源代码。比如

说,NAS超级计算机基准测试软件致力于输入输出,提供一个源码的版本,但是销售商可以重写这些源码,包括修改它的算法,只要修改后的版本有同样的输出。EEMBC也允许对它的基准测试软件进行源码级的改变。

4. 允许手写代码。EEMBC基准测试软件允许使用汇编语言代码。尽管实际中除

非小的循环可以被使用,而那些大的嵌入式应用程序几乎不可能被使用,但是基准测试软件核心的小规模性仍然使得这种方法非常吸引人。

基准程序的设计者在决定是否允许修改源代码时遇到的最大的问题就是,这种修改能否反映真实的性能并给用户提供有用的信息,还是像性能预测家那样简单的降低了测试程序的准确性。

性能的比较和总结

比较计算机的性能几乎从来就不是一件枯燥无味的事,特别是当计算机的设计者也被包括在内时。指控和反驳在Internet上随处可见。有人以战术狡诈为由被指控,对方则因使用误导的言辞而被起诉。由于这种性能比较常常关系到一个人事业的成败,所以只能偶尔描述一下真实情况。但在更多的情况下,异议通常源于人们作了不同的假定或缺乏彼此间信息的沟通。

我们可能会认为如果我们对测试用的程序、实验环境以及“快”的含义有了统一的认识,那么误解就会消除。不幸的是,事实并非如此。当我们对上述基本问题取得一致意见后,又会在怎样根据一组程序的运行结果综合评价计算机的性能才算公平的问题上产生分歧。例如,同一本杂志上的两篇文章对如何综合评价计算机的性能提出了相反的观点。从其中一篇文章上摘下来的图1.15就是一个可造成混淆的例子。 计算机A 计算机B 计算机C 1 10 20 程序P1(秒) 1000 100 20 程序P2(秒) 1001 110 40 总 计(秒) 图1.15 两个程序在三台机器上的执行时间。数据来源于Smith[1988]的图1。

如果按我们定义的“快”的含义,那么下列判定是成立的:

24

运行程序P1时,A的速度是B的10倍; 运行程序P2时,B的速度是A的10倍; 运行程序P1时,A的速度是C的20倍; 运行程序P2时,C的速度是A的50倍; 运行程序P1时,B的速度是C的2倍; 运行程序P2时,C的速度是B的5倍; 单个看来,以上每一个判断都是有意义的。但综合起来看,结果就有些自相矛盾――计算机A、B、C的相对性能好坏很难判断。

总的执行时间:一致的综合度量标准

最简单的综合评价相对性能的方法就是使用两个程序的总执行时间。这样就有:

对程序P1和P2而言,B的速度是A的9.1倍; 对程序P1和P2而言,C的速度是A的25倍; 对程序P1和P2而言,C的速度是B的2.75倍。 这一综合评价方法相当于对执行时间进行了跟踪,这就是我们最终的性能评价。如果每台机器的工作负载由相同执行次数的程序P1和P2组成,那么上述综合评价就是对机器相对性能的真实反映。

对能够跟踪的总和的执行时间取算术平均值,就得到算术平均值:

1nTimei ?ni?1其中Timei是第i个程序的执行时间,总的工作负载由n个程序组成

加权平均执行时间

现在的问题是工作负载的实际程序是怎样组合的。程序P1和P2真的象上述算法中假

定的那样在整个工作负载中所占的比例相同吗?如果它们所占的比例不同,那么可以尝试用以下两种算法近似估算机器的综合性能。第一种方法是当两个程序所占比例不同时,对每一个程序赋予一个权值Wi以指明这一程序在总工作量中所占的比例。例如,如果总工作量的80%是程序P1,其余20%是程序P2,那么程序P1和P2的权值分别是0.8和0.2(权值相加的和为1)。将各程序的权值与执行时间的乘积再加总,就可以得到一副清晰的工作负载的性能。这种评价指标被称为加权的算术平均值:

?Weight?Time

iii?1n

其中Weighti是第i个程序在整个工作负载中的频度,而Timei则是第i个程序的执行时间。图1.16是图1.15在三种不同的权值下得到的加权平均执行时间,其中每个程序的权值与该程序在总工作负载中的执行时间成正比。

程序 权重

A B C W(1) W(2) W(3)

25

程序P1(秒) 程序P2(秒) 平均执行时间:W(1) 平均执行时间:W(2) 平均执行时间:W(3)

1.00

1000.00 500.50 91.91 2.00

10.00 20.00 100.00 20.00 55.50 20.00 18.19 20.00 10.09 20.00

0.50 0.50 0.909 0.091

0.999 0.001

图1.16 在三种不同权重下的加权算术平均执行时间。W(1)给出的两个程序的权重相同,其加权算术平均值显示在第三行,与不加权时结果相同。W(2)给出的权重与两个程序在机器B上的执行时间成反比,其加权算术平均值显示在第四行。W(3)给出的权重与两个程序在机器A上的执行时间成反比, 其加权平均值显示在第五行。第2种和第3种加权的净效果是“正交化”在某台机器上运行的程序的执行时间,使每个程序在该机器上的总执行时间相同。假定有几个程序每一个程序在同一台机器上的执行时间是Ti,那么该机器的等时(equal-time)加权为:

1?1Timei????j?1?Timejn????

正交化执行时间和几何平均值的优劣

负载中各种程序所占比例不同时,第二种方法是将执行时间对一台参考机器正交化,然后取正交化执行时间的平均值。这就是SPEC基准测试程序所用的方法,它以在SPARC station上的基准运行时间作为参考时间。这种评价方法很容易给人混乱的感觉,因为它意味着只要把这个数乘以在参考机器上的性能参数就可以预测出新机器的性能。

平均正交化执行时间既可以表示成算术平均值,也可以表示成几何平均值。几何平均值的定义为:

nimeRatio ?ExecutionTii?1n

其中ExecutionTimeRatioi是工作负载n个程序中的第i个程序对参考机器规格化后的执行时间。两组样本的几何平均值有一个很好的性质:

Xi的几何平均值?Xi??Yi的几何平均值??Yi??的几何平均值 ??

其意义为,不管是取平均的比率,或者是取比率的平均,其结果都一样。与算术平均值不同的是正交化执行时间的几何平均值与参考机器无关。所以,求正交化时间的平均值时不应当用算术平均值,而应当用几何平均值。图1.17显示了正交化时间的几何平均值和算术平均值。

与A正交 与B正交 与C正交

A B C A B C A B C

0.1 1.0 2.0 0.05 0.5 1.0 程序P1 1.0 10.0 20.0

26

程序P2 算术平均值 几何平均值

总时间

1.0 1.0 1.0 1.0 0.1 5.05 1.0 0.11 0.02 10.01 0.63 0.04 10.0 5.05 1.0 9.1 1.0 1.0 1.0 1.0 0.2 1.1 0.63 0.36 50.0 25.03 1.58 25.03 100.0 2.75 1.58 2.75 1.0 1.0 1.0 1.0

图1.17 将图1.15中的执行时间对各机器进行正交化。算术平均值因参考机器不同而异——在第二列中,B的执行时间是A的5倍;而在第四列中,A的执行时间是B的5倍。在第三列中,C是最慢的;而在第九列中,C是最快的。几何平均值就不随着参考机器的变化而变化——A和B的性能相同,C的执行时间是A或B的0.63倍(1/1.58等于0.63)。不幸的是,A的总执行时间几乎是B的10倍,而B的总执行时间几乎是C的3倍。有趣的是,同一组数的平均值之间总有下列关系成立:调和平均值<=几何平均值<=算术平均值。

因为算术平均值的权重与特定程序在特定机器上的执行时间成正比,所以权重不仅与该程序在整个工作负载中的执行频度有关,而且与运行程序的机器的特性以及程序输入数据的多少有关,这一点在图1.16中可以看得出来。正交化执行时间的几何平均值与单个程序的运行时间以及正交化的参考机器无关。如果在比较性能中,出现了程序固定但输入却不定的情况,竞争者可能会把自己机器上运行最快的程序的输入量增到最大,以提高该程序在求算术平均值时的权重,从而得到对自己有利的结果。几何平均值就比算术平均值不易误导了。 正交化执行时间的几何平均值的一个最大缺陷是它违反了有关性能的基本规则——它不能反映预测的执行时间。图1.17中的数据显示对于程序P1和P2,机器A和B的性能相同,但这只在每运行一次P2就运行一百次P1的情况下才成立(参见图1.16)。在这种负载情况下,总的执行时间会使人以为机器A和B比机器C快50%,而不是像几何平均值显示的那样C比A和B还快!总的来说,当机器的数量在三台或三台以上时,没有一种工作负载能够符合正交化的执行时间的几何平均值所预测的性能。我们引入几何平均值是为了避免对工作负载中的程序给予相同的权重,但这种解决方法能不能算得上是一种真正的改进呢? 用一组基准测试软件评价机器的综合性能时,使用几何平均值的另一个缺点是它使软件和硬件设计者倾向于集中精力提高最易提高速度的软件的性能,而不是提高速度最慢的软件的性能。例如,从对几何平均值的影响来看,设计者把一个程序的执行时间从2秒提高到1秒,与把另一个程序的执行时间从10,000秒提高到5,000秒的效果是相同的。而对于使用第二个程序的用户而言,第一个程序性能的提高没有一点用处。小程序更容易被“攻破”,设计者们可以使小程序的性能得到很大改进,但这种改进却不具有代表性。所以,使用几何平均值并不能反映机器的总运行时间,而且使那些只注意提高小程序性能的设计者得到了更多的回报。 理想的解决方案是测量一组真正负载的执行时间,并按程序在负载中出现的频度计算权重。如果无法做到这一点,那么对某台机器取正交化执行时间使每个程序在这台机器上的执行时间相同,这样至少可以使相关权重变得明显,从而可以预测出在这种混合比率负载下机器的性能。对于上面提到过的输入不确定的问题,最好的解决办法是在比较机器性能时使用相同的输入。如果结果必须正交,那么就按正确的权重计算测试结果,再进行正交化处理。 最后,我们必须记住:任何一种测试方法必然都要缺少一些信息,尤其是当这种方法涉及的面很广。所以,确保各个独立的测试程序的结果的正确性和汇总量都是非常重要和必要的。另外,用汇总量要非常慎重,因为它并不一定能最好的反映应用程序性能。

1.6 计算机设计的定量准则

到现在为止,我们已经讨论了如何定义、测试、评价计算机的性能,接下来我们探讨一

27

下设计计算机或分析计算机性能时的指导性原则。尤为重要的是,在本节中包含了一些有关计算机设计对性能和性能价格比有影响的重要的观察结果,此外还包括供我们对各种设计选择做出评价时使用的两个等式。

加快经常性事件的速度

在计算机设计中最重要且应用最广泛的准则就是提高经常发生事件的执行速度,也就是说,在设计上必须有所妥协时,一定更有利于较常发生的一方。这条原则对于如何分配资源同样适用,因为机器在经常出现情况下的性能对机器的整体性能影响更大。提高经常发生事情的执行速度,会更加显著地提高机器的性能。另外,经常出现的情况一般比不经常出现的情况要简单一些,提高性能相对容易。例如,CPU执行两个数相加的操作时,溢出可以认为是比较少见的情况,不溢出才是比较常见的情况。所以我们可以通过优化不溢出相加的操作来提高机器的性能。尽管这样做可能在溢出时减慢了机器的速度,但由于溢出是较少出现的情况,所以总的效果是机器的性能改进了。

在本书中会出现很多应用该原则的实例。应用这条原则时,我们必须首先弄清楚什么是经常出现的情况以及提高这种情况下机器的运行速度对计算机的整体性能提高有多大贡献。一个基本的定律,也就是阿姆达尔(Amdahl)定律,可以将此原则定量化。

Amdahl定律

通过改进计算机的某一部分,而使性能提高多少可以用Amdahl定律计算出来。Amdahl定律说:通过使用某种较快的执行方式所获得的性能提高受可使用这种较快执行方式的部分所占的比例的限制。

Amdahl定律定义了采用特定部件所取得的加速比。那么什么是加速比呢?假定如果我们使用某种增强部件,计算机的性能就会得到提高,那么加速比就是下式所定义的比率:

加速比?使用增强部件时完成整个任务的性能

不使用增强部件时完成整个任务的性能

也可以定义为:

加速比?不使用增强部件时完成整个任务的时间

使用增强部件时完成整个任务的时间

加速比反映了使用增强部件后完成一个任务比不使用增强部件完成同一任务加快了多少。 Amdahl定律为计算某些情况下的加速比提供了一种便捷的方法。加速比主要取决于两个因素:

1.在原有的计算机上,能被改进并增强的部分在总执行时间中所占的比例。例如,如果一个任务在原来机器上的执行时间为60秒,其中20秒的执行时间可以使用增强功能,那么比率就是20/60。这个值我们称之为增强比例,它永远小于等于1。

2.通过增强的执行方式所取得的改进,即如果整个程序使用了增强的执行方式,那么这个任务的执行速度会有多少提高——这个值是在原来条件下程序的执行时间与使用增强

28

功能后程序的执行时间之比。如果在原来的条件下程序的某一部分执行时间为5秒,而改进后这一部分只需要2秒,那么改进就是5/2。这个值我们称之为增强加速比,它总是大于1的。

原来的机器使用了增强功能后,执行时间等于未改进部分的执行时间加上改进部分的执行时间:

增强比例????新的执行时间?原来的执行时间??1?增强比例???? 增强加速比??

总的加速比等于两种执行时间的比:

总加速比?原来的执行时间1?

新的执行时间?增强比例???1?增强比例???增强加速比??例题

解:

我们分析一个用于网页服务器系统的处理器的性能。假定采用以下的增强方式,新的CPU在计算性能上的运行速度是原来处理器中的10倍,同时假定此CPU有40%的时间用于计算,另外60%的时间用于I/O操作。那么增强性能后总的加速比是多少?

增强比例=0.4 增强加速比=10

总加速比?10.6?0.410?1?1.56 0.64

Amdahl定律反映的是报酬减少的效果:在只对计算中的一部分性能作改进时,其加速随着改进越多而效果越小。Amdahl定律的一个重要推论是如果某一增强仅对某一任务的某一部分有作用,那么该任务总的加速比不会超过1减去此比例之后所得数的倒数。

在应用Amdahl定律时,一个常犯的错误是把“未改进前要改进部分时间所占的比例”和“改进后改进部分时间所占的比例”混淆。如果我们在计算中使用的是改进后改进部分时间所占的比例,而不是改进前要改进部分时间所占的比例,结果是错误的。(试一下习题1.3,看错误是怎样产生的。)

Amdahl定律提供了计算一种增强可以改进多少性能的指标,以及如何分配资源才能改进性能/价格的指南。很明显地,其目标是要使资源花费与时间花费成比例。如下面一个例子所示,我们也可以利用Amdahl定律比较两种设计方案。 例题 求浮点数(FP)平方根的不同实现方法在性能上可能有很大差异。假定求浮点数

平方根(FPSQR)的操作在某台机器上的一个标准测试程序中占总执行时间的20%。一种方法是增加专门的FPSQR硬件,可以将FPSQR的操作速度提高为原来的10倍。另一种方法是提高所有的FP运算指令的执行速度;FP运算指令在总执行时间中占50%。设计小组认为可以把所有的FP指令的执行速度提高为原来的1.6倍从而达到提高求浮点数平方根操作的速度。试比较这两种方法。

解: 我们可以通过计算两种方法的加速比来比较其效果: 提高所有浮点指令性能的总体效果要好一些,因为浮点操作所占的比重比较大。

29

加速比FPSQR?11(1?0.2)?0.210?1?1.220.82加速比FP1???1.230.50.8125(1?0.5)?1.6

在上面的例子中,我们需要知道新的改进后的FP操作所耗费的时间;通常直接测量这些时间是很困难的。在下一节中我们可以用另一种方法进行比较,它是把CPU时间分成独立的三部分。如果我们能够知道一种方案如何影响这三个分量,我们就能确定这种方案的总的性能影响。我们还可以在硬件设计出来前用模拟器来测量这些分量。

CPU性能公式

大多数计算机都建构于一个定速的时钟上,这些在时间上离散事件被称为时钟数、时钟周期、时钟、周期等。计算机设计者通常用时间的长度(例如1纳秒)或时钟的频率(例如1GHz)来描述一个时钟周期的时间。一个程序的CPU时间可以用以下两种方式来描述:

CPU时间=一个程序的CPU时钟周期数?时钟周期长度

或者:

一个程序的CPU时钟周期数 CPU时间=时钟频率除了执行程序所需的时钟周期数,我们还需要计算程序执行的指令数,即指令数(IC)。如果我们知道了一个程序执行的指令数和执行所需的时钟周期数,我们就可以计算出执行一条指令所需的平均时钟周期数(CPI)。由于它比较好计算,所以在这一章里将处理一些简单的处理器。有时候设计者们也用每个时钟周期内所用的指令数(ICP):

CPI=一个程序的时钟周期数

IC这一CPU性能指标不论是对不同的指令集或是对不同的实现都提供了直观的看法。在接下来的三章中我们会频繁地使用它。

将上式中的指令数转换之后,时钟周期数可定义为IC×CPI,这使我们能够在执行时间公式中使用CPI:

CPU时间=IC×CPI×时钟周期的长度

或者:

CPU时间?IC?CPI

时钟频率将第一个公式展开成度量单位后,可看出各项的组合方式:

指令时钟周期秒秒????CPU时间 程序指令时钟周期程序

正象上面公式显示的那样,CPU时间与三个因素有关:时钟周期的长度、每条指令执行所需的时钟周期数和程序的指令数。此外,这三个因素对CPU时间的影响是相同的,这

30

三个因素中的任何一个改进10%,CPU时间就会改进10%。

不幸的是,孤立地改变一个参数是很困难的,因为改变各因素的技术是相互关联的: ? 时钟周期的长度――由硬件技术和计算机组成决定; ? CPI――由计算机组成和指令集的系统结构决定; ? 指令数――由指令集的系统结构和编译器决定;

幸运的是,许多很有潜力的会带来计算机性能提高的技术主要影响CPU性能三个因素中的一个,而对另外两个因素影响较小或是可预测的。

CPU时钟周期数??CPI?ICii?1ni

对设计CPU而言,有时也用下面的方式计算CPU时钟周期数: 其中ICi代表指令i在一个程序中的执行次数,CPIi代表执行指令i所需的平均时钟周期。这一形式也可以用来表示CPU时间:

?n?CPU时间???CPIi?ICi??时钟周期长度

?i?1?总的CPI也可以表示成:

?CPI?ICiniCPI?i?1总的指令数??ICi??CPIi???

总的指令数??i?1n

最后一个求CPI的公式是用每条指令的CPI乘以该指令在全部指令中所占的比例。CPIi

需要通过测量得到而不是根据参考手册后面的附表中查得的值来推算,因为必须要考虑高速缓存不命中以及其它内存低效率的情况。

下面是我们前面提到过的例子,现在我们改用指令的执行频度和更易得到的指令CPI来分析,这个在实践中可以通过模拟或是硬件指令来获得。

例题 假设我们有如下的测量值: FP指令的执行频度=25% FP指令的平均CPI=4.0 其它指令的CPI=1.33 FPSQR指令的执行频度=2% FPSQR指令的CPI=20

假定有两种备选的设计方案,一种是把FPSQR的CPI减至2,另一种是把所有FP的CPI减至2.5。请用CPU性能公式比较这两种方案。

解: 首先,我们观察到只有CPI发生了变化,时钟频率和指令数保持不变。我们

先计算没有任何改进时的CPI:

CPI原来??ICi??CPIi??%)+(1.33?75%)?2.0 ? ?(4?25总的指令数??i?1n

我们在CPI原来的基础上减去由于增强了FPSQR功能而节省的时钟周期就可以

31

计算出增强FPSQR方案的CPI:

CPI新的FPSQR=CPI原来-2%?(CPI老的FPSQR-CPI新的FPSQR) =2.0-2%?(20-2)=1.64我

们可以用同样方法计算增强全部FP方案的CPI, 或通过把FP的CPI值和非FP的CPI值加起来得到。利用后一种方法的计算如下:

CPI新的FP=?75%?1.33???25%?2.5??1.625

因为 增强全部FP方案的CPI较小,所以这种方案的性能更好。特别地,增强全部

FP的加速比为: 加速比新的FP=CPU时间原来CPU时间新的FP=IC?时钟周期长度?CPI原来IC?时钟周期长度?CPI新的FP =CPI原来CPI新的FP=2.00?1.231.625

我们可以看到这一结果与我们在前面用Amdahl定律计算出的结果是相同的。在CPU性能公式中,我们经常可以测量其中的某个分量。这是利用CPU性能公式比利用Amdahl定律优越的地方。特别是我们一般很难直接测量某种指令的执行时间在总执行时间中所占的比例。通常这是通过计算指令的执行次数与指令的执行时间的乘积间接得到的。既然计算的出发点是指令的执行次数和CPI,计算CPU性能就更方便了。

CPU性能方程的建模和测量

为了能够用CPU性能方程作为设计工具,我们必须能够测量多种因素。对于一个已经存在的处理器,获得执行时间是很容易的,同时始终频率也是已知的。问题主要在找出指令条数或者CPI。大部分较新的处理器包括已执行指令和始终频率的计数器。通过周期性对这些计数器的访问,并把执行时间和指令条数与代码片断联系在一起,能够帮助程序员更清楚的理解和修改应用程序的性能。往往,设计者或者程序员希望了解比所提供的硬件计数器更为深入的粒度上理解性能。例如,他们想知道CPI是所说的那些值。这种情况下,象用于处理器的那些仿真技术被设计和使用了。 目前使用的仿真技术可分为三类。通常,最成熟的技术产生更为精确的结果,特别是对最近产生的一些需要更长执行时间的体系结构。第一个也是最简单的技术,也是开销最小的,是基于描述的(profile)的静态模型。在这个模型里,程序动态执行,并记录下每条指令执行的频率,并产生如下三种模型之一:

1. 通过使用处理器上的硬件计数器,它们是周期被保存的。这个技术通常能够提供一

个大概的描述信息,但是也能达到精确程度的一定百分比。

2. 通过测量执行,即将测量代码编译到程序内部。这些代码用做计数器,并产生一个

精确的描述信息。(这个技术也用来为存储器的寻址和访问创建跟踪信息,同时在其他的模拟技术里也是非常有用的。)

3. 通过在指令级上中断程序,在处理过程中计算数目。

一旦得到描述信息,就可以利用它来静态的分析程序代码。显然,利用描述信息,整个程序数目是很容易得到的。同时,获得详细的动态指令信息并辨别指令类型和执行频率也是很容易的。最后,对于简单的处理器,很可能计算出CPI的近似值。这个近似值是通过分析每一个基本块(直代码片断)的执行并且计算CPI的整体评估或者整个执行的的周期数(整个执行的周期数目是用每个基本块的评估时间乘以该基本块执行的次数)计算出来的。尽管这个简单的模型没有考虑存储器的行为并且对复杂的流水线模型有很多限制,但是对于短的

32

整数流水线并且不考虑存储器系统行为的性能来说,它还是一个合理的和快速的评价方法。

路径驱动仿真对于建模性能来说是一个更为成熟的技术,同时对于存储器系统性能也是十分有用的。在路径驱动的仿真里,通常使用仿真或者测量执行技术来建立执行过的存储器访问的路径文件。路径文件包括执行了什么样的指令(通过指令地址给出)和所访问的数据的地址。

路径驱动模拟可以用于多种情况。这其中最常见的是使用地址跟踪的方法对内存系统(包括Cache和其他内存管理部件)的模拟,用来对内存系统性能的建模。内存系统的路径驱动模拟可以和流水线性能静态分析得到一个简单流水线处理器的合理准确的性能模型。对于更复杂的流水线,通过对处理器流水线的模拟,路径数据可以对流水线性能进行更详细地分析。既然路径数据是指令顺序的准确模拟,它比静态模拟的准确性好。路径驱动的模拟通常将任何流水线行为和内存系统相隔离。特别的,它假定路径和内存系统的行为完全无关。我们将在第三章和第五章看到,这不适用于多数的高级处理器,因此需要第三种技巧。

第三种技巧,也是最准确和花费最大的,是执行驱动的模拟。在执行驱动的模拟中,同时对处理器流水线和内存系统进行详细的模拟。这可以对两者之间的相互作用进行准确的建模,这是很关键的,我们将在第三章和第五章看出这一点。

这三种基本技巧有许多变形。我们将在以后的章节中看到这些工具的例子并在练习中使用它们不同的版本。

局部性原理

尽管Amdahl法则可以应用于任何系统,其他的重要的基本观察来源于程序的属性。我们经常发现的最重要的程序属性是局部性原理:程序经常会重复使用它最近使用的指令和数据。被广泛适用的原则是程序90%的执行时间执行的是10%的代码。局部性原理暗示我们可以用最近使用的指令和数据合理的预测将要用到的指令和数据。 局部性原理也应用于数据存取,尽管不像指令存取那么明显。我们观测到两种类型的局部性原理。瞬时局部性说明最近使用时项目可能在最近的将来被使用。空间局部性是说地址相近的项目可能在时间上被连续的使用。我们会在第五章讨论这些原理的应用。

利用并行性

利用并行性是提升性能的最重要的方法之一。我们给出三个简单的例子,它们将在今后的章节中被展开说明。我们的第一个例子是在系统级使用并行性。为了在一个典型的服务器测试程序(如SPECWeb或TPC)上提高系统的吞吐量性能,可以使用多个处理器和多个磁盘。处理请求的负载可以在多个处理器和磁盘中分配,导致吞吐量的提高。这是可扩展性作为服务器应用的宝贵资产的原因。

在单个的处理器上,利用指令间的并行性是达到高性能的关键。最简单的方法之一是通过流水线。流水线背后的基本思想是将指令的执行重叠,用来减少一个指令序列的执行时间。我们将在后面的附录A和第三章中详细讨论。从CPU性能的表达式角度来看,我们可以认为流水线技术是通过指令的多步重叠,减少了CPI。流水线能工作的一个关键是不是每条指令的执行都依赖于它的直接先导,这样指令的执行可以达到完全或部分并行。

并行性还可以在具体的数字设计级别观察到。例如,组相连的Cache使用了多块内存,这些通常是通过并行查找得到一个需要的项。现代的ALU使用先行进位,这是通过并行加速和的计算,从原来的先行复杂度提升到了对数复杂度。

利用并行性有许多不同的方法。最常见的是计算出两个或多个可能的结果,然后进行选择。这种技巧用在进位选择加法器、组相连的Cache和流水线中的分支处理。几乎本书中所有章节中都有通过探求并行性提升系统性能的例子。

33

1.7 综述:性能和性价比

在每一章的最后部分,我们都有一节“综述”,用实际的例子来说明这一章的原理。这一节,我们看看性能和性价比的度量,首先用SPEC CPU benchmarks测试桌面计算机系统,然后用TPC-C测试服务器的性能,最后用EEMBC测试嵌入式系统。

桌面计算机系统的性能和性价比

虽然有许多测试程序适合桌面计算机系统,但这其中大多数是操作系统或体系结构相关的。在这一部分,我们将用SPEC CPU2000 整数和浮点组件检测一系列桌面计算机系统CPU的性能和性价比。正如前面提到的,SPEC CPU2000将CPU性能用几何平均值规范成Sun系统,得分越高性能越好。

每一个系统都配有一个CPU,512MB SDRAM(带ECC校验如果可能),大约20GB的硬盘,一个快速的图形系统和一个10/100兆以太网联接。我们测试的七个系统和它们的处理器、价格如图1.18所示。价格的很大差异是由下面几个因素造成的。尽管有这么过相同点,价格的很大差异是由下面几个因素造成的。首先,系统提供了不同的可扩展性、使用较便宜的硬盘(ATA相对于SCSI来说)、较便宜的内存(PC的内存相对于定制的DIMM内存来说),软件的差异(Linux或Microsoft OS相对于经销商特定的OS)、CPU的花费和商品化效应。图1.18对这进行了更详细的说明。

供应商 型号 处理器 时钟频率 价格 Compaq Presario 7000 AMD Athlon 1,400 $2,091 Dell Presario 420 Intel Pentium III 1,000 $3,834 Dell Precision 530 Intel Pentium 4 1,700 $4,175 HP Workstation PA 8600 552 $12,631 c3600 IBM RS6000 44P/170 IBM III-2 450 $13,889 Sun Sunblade 100 UltraSPARC II-e 500 $2,950 Sun Sunblade 1000 UltraSPARC III 750 $9,950 图1.18 5个销售商的7个使用不同CPU的桌面系统的处理器、时钟频率和销售价格。所有系统都配有512MB ECC SDRAM,一个高端的图形系统(通常高性能系统不具备的),大约20GB的硬盘。首先,系统提供了不同级别的可扩展性(Presario系统可扩展性最差,Dell系统和Sunblade100可扩展性适中,HP,IBM和Sunblade1000具有非常好的灵活性和可扩展性)。第二,使用便宜的磁盘和价格相对低廉的内存系统有很大影响。第三,CPU的花费至少相差两倍。2001年Athlon的售价大约是200美元,Pentium III大约240美元,Pentium 4大约500美元。第四,软件差异(Linux或Microsoft OS相对于经销商特定的OS)可能会影响到最后的价格。第五,低端系统在其他方面也使用PC商品化部件(如风扇、电源、支持芯片组等),这些相对价格较低。最后是我们在1.4节中讨论过的商品化效应的影响,特别是Compaq和Dell的系统。这些价格是2001年7月的数据。

图1.19展示了用SPEC CINT2000作为度量标准的七个系统的性能和性价比。使用AMD Athlon CPU的Compaq系统具有最高的性能和最贵的价格。接下来是Dell的两个系统,这两个系统都提供了可观的性价比,其中处理器是Pentium 4的系统更快些。Sunblade 100 具有最低的性能,但可能比其他的UNIX工作站系统具有更好的性价比。

34

图1.19 用SPEC CINT2000作为度量标准的的七个系统的系统性能和性价比。除了Sunblade100(Sun的低端入门产品)性价比基本和性能平行,和通常认为的不同,至少在桌面端是这样,高性能的系统仅需不成比例的价格增加。性价比是用1000美元的CINT2000性能描点的。这些性能数据和价格是2001年6月的数据。比较结果可以在www.spec.org/osg/cpu2000上找到。

图1.20展示了用SPEC浮点测试程序作为度量标准的系统性能和性价比。Pentium 4 的浮点指令集给了系统一个很大的性能提升。基于Athlon的Compaq系统还是具有超级的性价比。IBM, HP 和Sunblade1000 的性能都超过了装配Pentium III的Dell 420,但Dell 420 的性价比仍超过了IBM,Sun或HP 的工作站。

事务处理服务器的性能和价格

正如我们提到的,最大的服务器市场之一是在线事务处理(OLTP)。OLTP的标准工业基准程序是TPC-C,它依靠数据库系统来实现请求和升级。五个要素使得TPC-C的性能有特别的趣味。首先,TPC-C是对实际的OLTP应用的一个很合理的近似估计;尽管这使得测试程序的安装很复杂也很费时,但是它的结果对实际的OLTP系统有指导作用。第二,TPC-C测量整体系统性能,包括硬件、操作系统、I/O系统和数据库系统,这使得基准程序能够为实际性能提供更多的预见性。第三,运行基准程序和报告执行时间的规则非常复杂,结果是一些可比较的数字。第四,因为基准程序的重要性,计算机系统销售商对TPC-C运行的结果十分看重。第五,销售商需要同时知道性能和价格,一边能够考察它们。

35

图1.20 用SPEC CFP2000作为度量标准的系统性能和性价比。性价比是用1000美元的CFP2000性能描述的。Pentium 4对Pentium III浮点性能提升在图中很清楚。性价比和性能部分是平行的,但不像整数部分明显。这些性能数据和价格是2001年6月的数据。比较结果可以在www.spec.org/osg/cpu2000上找到。

因为OLTP市场很大也很广泛,所以有许多的计算机系统用于此种应用,这些范围从小的单处理器服务器到中范围的多处理器系统到大规模的包括上百个处理器的机群系统。为了对这些密度和范围的性能和价格有一个正确的评价,我们将考察按性能排序的前六个结果(与价格相对)和按价格排序的前六个结果(与性能相对)。对于TPC-C,性能是用每分钟的事务数(TPM)来测量的,而价格是用每一美元的TPM来衡量的。图1.21列出了12个价格和性能排在前面的系统的特性。 图1.22表示了图1.21中六个最高性能的OLTP系统的性能和价格。包括280个 Pentium III处理器的IBM的机群系统提供了最高的整体性能,它的因子数是3,而其他最好的仅为1.5。其他系统都是中规模的多处理器系统,能够提供可比的性能和与其他组类似的价格。第6和8章将讨论机群和多处理器系统的设计。 图1.23表示了图1.21中六个最高价格的OLTP系统的性能和价格。这些系统都似乎多处理器系统,除了HP的系统之外,都是基于 Pentium III处理器的。尽管最小的系统(三处理器的Dell系统)有最高的价格,但是其他系统中的几个只有0.65因数的系统也提供了很好的性能。注意,图1.23中最高价格的系统平均是图1.22中高性能系统价格的四倍(TPM/$=99比27)。 CPU 供应商/系统 数据库 操作系统 价格 IBM xSeries 280 Pentium III Microsoft SQL Microsoft $15,543,346 370c/s @900 MHz Server 2000 Windows Advanced Server Compaq 32 Alpha 21264 Oracle 9i Compaq Tru64 $10,286,029

36

AlphaServer GS320 Fujitsu PRIMEPOWER 20000 IBM pSeries 680 7017-S85 HP 9000 Enterprise Server IBM iSeries 400 840-2420 @1GHz 48 PARC64GP @563MHz 24 IBM S64-IV @600 MHz 48 HP PA-RISC 8600 @ 450MHz 24 iSeries400 Model 840 @ 450MHz 2 Pentium III @700MHz SymfoWAREServer Enterprise Oracle 8v8.1.7.1 Oracle 8v8.1.7.1 UNIX Sun Solaris 8 IBM AIX 4.3.3 HP UX 11.i64-bit $9,671,742 $7,546,837 $8,522,104 $8,448,137 $131,275 IBM DB2 for IBM OS/400 V4 AS/400 V4 Microsoft Windows 2000 Dell Microsoft SQL PowerEdge Server 2000 6400 IBM xSeries 4 Pentium III Microsoft SQL 250c/s @700MHz Server 2000 Microsoft $297,277 Windows Advanced Server Compaq 4 Pentium III Microsoft SQL Microsoft $375,016 Proliant ML570 @700MHz Server 2000 Windows 6/700 2 Advanced Server HP NetServer 6 Pentium III Microsoft SQL Microsoft $372,805 LH 6000 @550MHz Server 2000 Windows NT Enterprise NEC Express 8 Pentium III Microsoft SQL Microsoft $682,724 5800/180 @900MHz Server 2000 Windows Advanced Server HP 9000/L2000 4 PA-RISC Sybase HP UX 11.0 64 bit $368,367 8500 Adaptive Server @440MHz 图1.21 具有高性能(表的前半部分)或者高价格(表的下半部分)的12个OLTP系统。 由280个 Pentium III处理器组成的IBM exSeries是一个机群系统,其他的系统都是紧耦合的多处理器系统。令人惊讶的是,以上待考察的高性能的系统没有一个是由单处理器构成的。系统描述和具体的基准程序报告见www.tpc.org/。

图1.22 用TPC-C作为基准程序测量的六个高性能系统的性能(用每分钟千条事务来衡量)和价格(用每1000美元每分钟处理的事务数来衡量)。有趣的是,IBM占了3个位

37

置,且用的是不同的硬件平台( Pentium III的机群、基于Power III的多处理器和一个基于AS400的多处理器)

图1.23 价格(用每1000美元每分钟处理的事务数来衡量)和整体性能(用每分钟千条事务来衡量)。

嵌入式处理器的性能和价格

因为特点的多样性,比较嵌入式处理器的性能和价格比桌面电脑和服务器环境下的比较要困难的多。首先,嵌入式的基准程序是相对原始的。正如前面谈到的,尽管EEMBC基准程序能够表现一些基准程序的实质,但是这些基准程序有很明显的缺点。同样重要的是,在嵌入式空间里,处理器经常是为特定的一些应用集而设计的;这样的处理器往往不会脱离他们的应用空间而测试,如果进行了这样的测试,效果也是不好的。最后,就像前面说到的,价格和功耗往往是嵌入式应用中的重要因素。尽管我们可以通过观察处理器的价格部分的估计其价格,而其他也可能是决定系统价格的关键。例如,是否将存储器控制器和I/O控制器集成到芯片内部会影响功耗和系统的价格。如前面谈到的,功耗往往是嵌入式系统的关键性约束,我们将在下节中关注性能和功耗的关系。 图1.24列出了我们所考察的5个处理器的价格和性能。这些处理器的价格、功耗和性能区别很大,因此也用在了不同的应用中。高端处理器,如PowerPC650和AMD Elan用在网络应用中,如网络交换机和可能的高端膝上型电脑。NEC的VR5432系列是VR5400系列的新版本,这是目前在彩色激光打印机中最常用的处理器。相反,NEC VR 4122是一个主要用于PDA的低端低功耗的处理器,除了计算功能,4122提供了很多系统功能,减少了整体系统的价格。 处理器 指令集 时钟频率Cache指令处理器结构 功率价格(MHz) /数据,二(mW) ($) 阶Cache x86 133 16K/16K 1600 $38 ADM Elan 流水线:单发射 SC520 x86 500 32K/32K 9600 $78 AMD 流水线:3发射+/周128K K6-2E+ 期 IBM PowerPC 500 32K/32K 流水线:6000 $94 4发射/周期

38

PowerPC 128K 750CX NEC VR MPIS-64 167 32K/32K 流水线:2088 $25 2发射/周期 5432 NEC VR MPIS-64 180 32K/16K 700 $33 流水线:单发射 4122 图1.24 五种不同的嵌入式处理器在性能(我们将会看到,超过因数10)和价格(粗略的因数为4,如果整体系统价格考虑进去的话会高出50%)上有很大的范围。价格不包括接口和芯片的支持,这将会显著增加配置系统的开销。同样地,功耗栏仅包括典型地处理器功耗损失(毫瓦为单位)。这些处理器在执行能力上也有显著区别,从最大每周期四条指令到一条。所有处理器除了NEC VR 4122都包括一个硬件浮点运算单元。

图1.25列出了这五个处理器运行EEMBC基准程序集中与性能相关的3个后的相应结果。每一个基准程序的综合数值是和每个程序单个的测量值(用每秒钟的周期数来衡量)的几何平均值成比例的。时钟频率的不同是性能在33%到75%中变化的一个解释。对于类似组成的机器(如AMD Elan SC520和NEC VR 4122),时钟频率是决定性能的主要因素。因为机器在高速缓存结构中的广泛不同(如有或者没有二级缓存)以及流水线的不同,时钟频率仅是性能差异的一部分原因所在。

图1.25 这五个处理器运行EEMBC中3个与性能相关的基准程序后的结果。性能以AMD Elan SC520为刻度,所以相关结果地分数分布在一个比较窄的范围内。

图1.26列出了这些处理器系统的价格,这些价格仅是用处理器的价格来衡量的。这里,价格的范围不同限制了性能的不同,使得速度较慢的处理器在价格上很有优势。如果我们的价格分析同样包括系统所支持的芯片,区别将会更加明显,可能使VR 5432变成价格最高的而至少使VR4122变成与高端IBM和AMD芯片在价格上具有竞争力。

39

图1.26 这五个处理器运行EEMBC基准程序集中与价格相关的3个后的相应结果,仅是处理器的价格。

1.8其他观点:功耗和效率的衡量

纵览这本书的各章,你会看到很多标题为“其他观点”的小节。这些小节着重于计算机市场中不同部分解决问题的不同方法。例如,如果“汇总”部分强调桌面电脑处理器的存储系统的话,那么“其他观点”部分则着重于嵌入式系统或者服务器中存储系统。在这第一个“其他观点”小节中将讨论嵌入式处理器的功耗问题。 本章中已经多次提到,价格和功耗在嵌入式市场至少和性能一样使很重要的。除了处理器模块(包括任何需要的接口芯片)的价格,存储器通常是嵌入式系统中第二昂贵的部分。不像桌面电脑或者服务器系统,大多数嵌入式系统没有二级存储器;取而代之,整个应用程序都放在FLASH或者DRAM(将在第5章介绍)中。因为很多嵌入式系统,如PDA和手机,都是受价格和物理尺寸的限制,所以引用程序所需存储器的大小就十分关键。同样,功耗也是选择存储器的一个决定因素,尤其是对于电池供电的系统。 在图1.24中我们能够看到,测试的五个嵌入式处理器区别因数大于10。很清楚,高性能的AMD ,一个功耗9.3瓦的处理器,不能用在能量和热量不能扩散的环境。图1.27表示每毫瓦处理器的性能。这个图象与表示粗略性能的图1.25相比,并且注意它们结果之间的不同。NEC VR 4122每毫瓦的性能有很清楚的优势,但是却是性能上倒数第二差的。从功耗的角度看,为基于电池系统设计的NEC VR4122处理器是一个优胜者。IBM的PowerPC有效的利用他的功耗达到了很高的性能,尽管只有6瓦,但是它仍然不适合大多数基于电池的系统。

40

本文来源:https://www.bwwdw.com/article/n2t7.html

Top