第1章计算机概要与技术·15 多年以来,每隔3年DRAM的容量就增长到4倍,累积增长已超过16000倍。这就是集成电路领 域中著名的摩尔定律:芯片中的晶体管容量每隔18~24个月将翻一倍。它由Intel公司创办人之 一Gordon Moore于20世纪60年代提出。 1000000 100000 28M256M 512M 16M 64M 10000 4M 馆 IM 1000 256K 64K 100 16K 10+ 19761978198019821984198619881990199219941996199820002002200420062008 引入的年份 图1-12单片DRAM容量随时间的增长 纵轴单位为K,其中K为1024(20)。在近二十多年中,平均每隔三年DRAM容量扩大至4倍,即每年增 长约60%。在最近几年中,增长速度有所下降,接近每2~3年翻一番的水平。 这一增长速率几乎维持了40年,在制造技术方面需要大量难以置信的创新才能实现。1.7 节将讨论如何制造集成电路。 1.4性能 对计算机的性能评价是富有挑战性的。现代软件系统的规模及其复杂性,加上硬件设计者 采用大量先进的性能改进方法,使性能评价极为困难。 在不同的计算机中挑选合适的产品,性能是极其重要的一个因素。精确地测量和比较不同 计算机之间的性能对于购买者和设计者都很重要。销售计算机的人也需要知道这些。通常销售 人员希望你看到他们的计算机表现最好的一面,无论这一面是否能准确地反映购买者的应用需 求。因此,理解怎样才能更合理地测量性能以及测定所选择的计算机的性能限制相当重要。 本节将首先介绍性能评价的不同方法;然后分别从计算机用户和设计者的角度描述性能测 量的度量标准;最后还要分析这些度量标准之间有什么联系,并提出经典的处理器性能方程式, 我们在全书中都要使用它进行性能分析。 1.4.1性能的定义 当我们说一台计算机比另一台计算机具有更好的性能时,意味着什么?虽然这个问题看起 来很简单,但实际上却内藏玄机。我们可以先用客机问题模拟来看一下。图1-13表示若干典型 客机的型号、载客量、航程、航速等参数。如果我们要指出表中哪个客机的性能最好,那么我们 首先要对性能进行定义。如果考虑不同的性能度量,那么性能最佳的客机是不同的。我们可以看 到,巡航速度最高的是Concorde,航程最远的是DC-8-50,载客量最大的是747。 飞机型号 旅客容量 航程 巡航速度 旅客吞吐率 1英用1 :英甲/小时 (旅客数巡航速疫) 波音777 375 4630 610 228750 波音747 470 4150 610 286700 BAC/Sud Concorde 132 4000 1350 178200 PDG 道格拉斯DC-8-50 146 8720 544 79424 图1-13若干商用飞机的载客量、航程和航速 最后一列展示的是飞机运载乘客的速度、 它是容量乘以航行速度(忽略距离、起飞和降落次数)
16·第1章计算机概要与技术 即使假定用速度来定义性能,这里仍然有两种可能的定义。如果你关心点对点的到达时间, 那么可以将只搭载一名旅客的巡航速度最快的客机认为是性能最好,即Concorde。如果你关心的 是旅客吞吐率,那么747的性能是最好的。与此类似,我们可以用若干不同的方法来定义计算机 性能。 如果你在两台不同的桌面计算机上运行同一个程序,那么你可以说首先完成作业的那台计 算机更快。如果你运行的是一个数据中心,它有好几台服务器供很多用户投放作业,那你应该 说,在一天之内完成作业最多的那台计算机更快。作为个人计算机的用户,对降低响应时间感 兴趣。而数据中心感兴趣的常常是吞吐率。因此,在很多情形下,和关注吞吐率的服务器相 比,我们需要对嵌入式以及台式计算机采用不同的应用程序作为测试基准和不同的性能度量 标准。 举例吞吐率和响应时间 下面两种改进计算机系统的方式,能否增加其吞吐率或减少其响应时间? 1.将计算机中的处理器更换为更高速的型号。 2.增加多个处理器来分别处理独立的任务,如搜索万维网。 答案 一般来说,降低响应时间几乎都可以增加吞吐率。因此,方式1同时改进了响应时间和吞 吐率。 方式2不会使任务完成的更快,只会增加其吞吐率。但是,当需要处理更多的任务时,系统 可能需要令后续请求排队。在这种情况下,随着吞吐率的增加,可同时改进响应时间,因为这缩 小了排队等待时间。所以,在实际的计算机系统中,响应时间和吞吐率往往相互影响。 在讨论计算机性能时,本书前几章将主要考虑响应时间方面。为了使性能最大化,我们希望 任务的响应时间或执行时间最小化。对于某个计算机X,我们可以表达为: 性能x=1/执行时间x 如果有两台计算机X和Y,X比Y性能更好,则 性能x>性能v 1/执行时间x>1/执行时间Y 执行时间y>执行时间x 也就是说Y的执行时间比X长。 在讨论计算机设计时,经常要定量地比较两台不同计算机的性能。我们将使用“X是Y的n 倍快”的表态方式,即: 性能x/性能v=n 举例相对性能 如果计算机A运行一个程序只需要10秒,而计算机B运行同样的程序需要15秒,那么计算 机A比计算机B快多少? 答案 我们知道,A是B的n倍快,则 性能AV性能B=执行时间B/执行时间A=n 故性能比为 15/10=1.5 PDG 曰响应时间(response time):也叫执行时间(execution time),计算机完成某任务所需的总时间,包括硬盘访问、 内存访问、V0活动、操作系统开销和CPU执行时间等。 S吞吐率(throughput):也叫带宽(bandwidth),性能的另一种度量参数,表示单位时间内完成的任务数量
第1章计算机概要与技术·17 因此A是B的1.5倍快。 在以上的例子中,我们可以说,计算机B比计算机A慢1.5倍,因为 性能/性能g=1.5 意味着 性能/1.5=性能。 简单地说,当我们试图将计算机的比较结果量化时,我们通常使用术语“比什么快”。因为 性能和执行时间是个倒数关系,提高性能就需要减少执行时间。为了避免对术语“增加”和 “降低”潜在的误解,当我们想说“改善性能”和“改善执行时间”的时候,我们通常说“增 加性能”或者“降低执行时间”。 1.4.2性能的测量 如果计算机的性能用时间来度量,那么完成同样的计算任务,需要时间最少的计算机是最 快的。程序的执行时间一般以秒为单位。然而,时间可以用不同的方法来表示。对时间最直接的 定义是墙上时钟时间(wall clock time),也叫响应时间(response time)、消逝时间(elapsed time)等。这些术语均表示完成任务所需的总时间,包括了硬盘访问、内存访问、/O操作和操 作系统开销等一切时间。 多用户经常共享同一计算机,一个处理器需要同时运行几个程序。在这种情况下,系统可能 更侧重于优化吞吐率,而不是最小化一个程序的响应时间。因此,我们往往要把运行我们自己的 任务的时间与一般的响应时间区别开来。我们可以使用CPU执行时间,简称CPU时间,它只 表示在CPU上花费的时间,而不包括等待VO或运行其他程序的时间。(需要注意的是,用户所 感受到的是程序的响应时间,而不是CPU时间。)CPU时间还可进一步分为用于用户程序的时间 和操作系统为用户服务花去的CPU时间。前者称为用户CPU时间,后者称为系统CPU时间°。 要精确区分这两种CPU时间是困难的,因为通常难以分清哪些操作系统的活动是属于哪个用户 程序的,而且不同操作系统的功能也千差万别。 为了一致性,我们保持基于响应时间和基于CPU执行时间的性能差异。我们使用术语“系 统性能”(system performance)表示空载系统的响应时间,并用术语“CPU性能”(CPU perform- ance)表示用户CPU时间。本章我们概括介绍了计算机性能,既适用于响应时间的测量,也适 用于CPU时间的测量,但本章的重点将放在CPU性能上。 理解程序性能 不同的应用关注计算机系统的不同方面。许多应用,特别是那些运行在服务器上的应用,主 要关注V0性能,所以此类应用既依赖硬件又依赖软件,对墙上时钟时间最感兴趣。而在其他一 些应用中,用户可能对吞吐率、响应时间或两者的复杂组合更为关注(例如最差响应时间情况 下的最大吞吐率)。要改进一个程序的性能,必须明确性能的定义,然后通过测量程序执行时间 来寻找性能瓶颈。在后面的章节中,我们将介绍如何在系统的各个部分寻找瓶颈,以改进性能。 虽然作为计算机用户我们关心的是时间,但当我们深人研究计算机的细节时,使用其他的度量 可能会更为方便。对计算机设计者来说,他们需要考虑如何度量计算机硬件完成基本功能的速度。 几乎所有计算机都用时钟来驱动硬件中发生的各种事件。时钟间隔的时间称为时钟周期⑧。也可 曰CPU执行时间(CPU execution time):简称CPU时间(CPU time),执行某一任务在CPU上所花费的时间。 ⊙用户CPU时间(user CPU time):在程序本身所花费的CPU时间。 PDG 自 系统CPU时间(system CPU time):为执行程序而花费在操作系统上的时间。 时钟周期(clock eyele):也叫ick、elock tick、clock period、clock或cycle等,为计算机一个时钟周期的时间, 通常是处理器时钟,一般为常数
18·第1章计算机概要与技术 用它的倒数来描述,称为时钟频率(clock rate)。例如,时钟周期为250ps,对应的时钟频率为 4GHz。在下一节,我们将形式化地定义硬件设计者的时钟周期和计算机使用者所指的秒之间的 关系。 小测验 1)假设某个使用桌面客户端和远程服务器的应用受网络性能限制。那么对于下列3种方法,哪种只改进了 吞吐率?哪种同时改进了响应时间和吞吐率?哪种都没有改进? A.在客户端和服务器之间增加一条额外的网络信道,从而增加总的网络吞吐率,并减少获得网络访问 的延迟(现在已经存在2条网络信道)。 B.改进网络软件,从而减少网络通信延迟,但并不增加吞吐率。 C.增加计算机的内存。 2)计算机B运行给定的应用需要28秒,而计算机C的性能是计算机B的4倍。请问计算机C运行同样的 应用需要多少时间? 1.4.3CPU性能及其因素 用户和设计者往往以不同的尺度看待性能。如果我们能掌握这些不同尺度之间的关系,就 能确定一个设计的变化对性能的影响。由于我们都关注CPU性能,因而性能测量实际上针对的 是CPU执行时间。下面一个简单的公式把最基本的尺度(时钟周期数和时钟周期时间)和CPU 时间联系起来: 一个程序的CPU执行时间=一个程序的CPU时钟周期数×时钟周期时间 这个公式清楚地表示,硬件设计者减少一个程序的CPU时钟周期数,或减少时钟周期时间, 就能改进性能。 由于时钟频率和时钟周期时间互为倒数,故 一个程序的CPU执行时间=一个程序的CPU时钟周期数/时钟频率 由此可见,提高时钟频率也能改进性能。在后面几章中我们将看到,设计者经常要面对这些 因素之间的权衡。许多技术在减少时钟周期数的同时也会引起时钟周期时间的增加。 举例性能的改进 某程序在一台时钟频率为2GHz的计算机A上运行需要10秒。现在将设计一台计算机B, 希望将运行时间缩短为6秒。计算机的设计者采用的方法是提高时钟频率,但这会影响CPU其 余部分的设计,使计算机B运行该程序时需要相当于计算机A1.2倍的时钟周期数。那么计算机 设计者应该将时钟频率提高到多少? 答案 我们首先要知道在A上运行该程序需要多少时钟周期数: CPU时间A=CPU时钟周期数,/时钟频率A 10秒=CPU时钟周期数,/2×10°周期数/秒 CPU时钟周期数,=10秒×2×10°周期数/秒=20×10周期数 B的CPU时间公式为: CPU时间。=1.2×CPU时钟周期数/时钟频率g 6秒=1.2×20×10°时钟周期数/时钟频率g 时钟频率.=1.2×20×10°时钟周期数/6秒=0.2×20×10°时钟周期数/秒 PDG =4×10°时钟周期数/秒=4GHz 因此,要在6秒内运行完该程序,B的时钟频率必须提高为A的2倍
第1章计算机概要与技术·19 1.4.4指令的性能 上述的性能公式没有涉及程序所儒的指令数。(在第2章中,我们将看到指令是如何组成程 序的。)然而,由于计算机是通过执行指令来运行程序的,因此执行时间一定依赖于程序中的指 令数。一种考虑执行时间的方法是,执行时间等于执行的指令数乘以每条指令的平均时间。所 以,一个程序需要的时钟周期数可写为: CPU时钟周期数=程序的指令数×每条指令的平均时钟周期数 术语CPI表示执行每条指令所需的时钟周期数的平均值。不同的指令需要的时间可能不 同,CPI是一个程序全部指令所用时钟周期数的平均值。CPI提供了比较相同指令集的不同实现 方式的方法,因为一个程序执行的指令数是一样的。 举例性能公式的使用 假设我们有相同指令集的两种不同实现方式。计算机A的时钟周期为250Ps,对某程序的 CPI为2.0;计算机B的时钟周期为500ps,对同样程序的CPI为1.2。对于该程序,请问哪台计 算机执行的速度更快?快多少? 答案 我们知道,对于固定的程序,每台计算机执行的总指令数是相同的,我们用I来表示。首 先,求每台计算机的CPU时钟周期数: CPU时钟周期数A=I×2.0 CPU时钟周期数g=I×1.2 现在,可以计算每台计算机的CPU时间: CPU时间,=CPU时钟周期数A×时钟周期时间 =/×2.0×250ps=500×Ips 同理, CPU时间g=I×1.2×500ps=600×Ips 显然,计算机A更快。快多少由执行时间之比来计算 CPU性能A_执行时间e=600×Ips=1.2 CPU性能a执行时间A500×Ips 因此,对于该程序计算机A是计算机B的1.2倍快。 1.4.5经典的CPU性能公式 现在我们可以用指令数、CPI和时钟周期时间来写出基本的性能公式: CPU时间=指令数×CPI×时钟周期时间 或 CPU时间=指令数×CPI/时钟频率 这些公式特别有用,因为它们把性能分解为三个关键因素。我们可用这些公式来比较不同 的实现方案或评估某个设计的替代方案。 举例代码段的比较 一个编译器设计者试图在两个代码序列之间进行选择。硬件设计者给出了如下数据: PDG ⊙CPI(clock cycles per instruction):每条指令的时钟周期数,表示执行某个程序或者程序片段时每条指令所需的 时钟周期平均数。 日指令数(instruction count):执行某程序所需的总指令数量