计算机类别个人计算机通用，各种软件受成本/性能权衡的影响服务器基于网络高容量、性能、可靠性从小型服务器到建筑规模的范围超级计算机高端科学和工程计算能力最高，但只占整个计算机市场的一小部分嵌入式计算机：嵌入到其他设备中的计算机，一般运行预定义的一个或者一组应用程序作为系统的组成部分隐藏起来严格的功率/性能/成本限制例如汽车、电视中的微处理器等程序概念计算机中的硬件只能执行极为简单的低级指令。从复杂的应用程序到简单的指令需要经过几个软件层次来将复杂的高层次操作逐步解释或翻译成简单的计算机指令。下图给出了软件的层次的结构：应用软件用高级语言编写系统软件编译程序：将HLL代码翻译成机器代码操作系统：服务代码处理输入/输出管理内存和存储调度任务和共享资源硬件处理器、内存、I/O控制器程序代码的级别性能一个程序的性能取决于以下各因素的组合：软件或硬件组成元素如何影响算法决定了源码级语句的数量和I/O操作的数量编程语言、编译器和体系结构决定了每条源码级语句对应的计算机指令数量处理器和存储系统决定了指令的执行速度I/O系统（硬件和操作系统）决定了I/O操作可能的执行速度[collapse status="true" title="Q：哪架飞机的性能最好？"]对于这个问题首先要定义性能，通过图片可以看到，巡航速度最高的是Concorde，航程最远的是DC-8-50，载客量最大的是747。假设用速度来定义性能，仍然有两种可能的定义。如果你关心点对点的到达时间，那么可以将只搭载一名旅客的巡航速度最快的客机认为是最好的。如果你关心的是运输450名旅客，那么747性能是最好的。[/collapse]在计算机中这样的两个概念：响应时间：完成一项任务需要多长时间吞吐率：每单位时间内完成的总工作。例如，每小时的任务/交易/... [collapse status="true" title="Q：下面两种改进计算机系统的方式能否增加其吞吐率或减少其响应的时间，或既增加其吞吐率又减少其响应时间？"]将计算机中的处理器更换为更高速的型号增加多个处理器来分别处理独立的任务一般来说，降低响应时间几乎都可以增加吞吐率。因此，方式1同时改进了响应时间和吞吐率。方式2不会使任务完成得更快，只会增加吞吐率。但是，当需要处理更多任务的时候，系统可能需要令后续请求排队。在这种情况下，随着吞吐率的增加，可同时改进响应时间，因为这缩小了排队等待时间。[/collapse]为了使性能最大化，我们希望任务的响应时间或执行时间最小化。对于某个计算机X，可以表达为：性能X =1 / 执行时间X如果有两台计算机X和Y，X比Y性能更好，则性能X >性能Y1/执行时间X > 1/执行时间Y执行时间Y > 执行时间x在讨论计算机设计时，经常要定量地比较两台不同计算机的性能。我们将使用“X是Y的n倍快”的表态方式。即性能X/性能Y=n如果X比Y快n倍，那么在Y上的执行时间是在X上执行时间的n倍，即性能X/性能Y=执行时间Y/执行时间X=n例：如果计算机A运行一个程序只需要10秒，而计算机B运行同样的程序需要15秒，那么计算机A比计算机B快多少15/10=1.5倍性能的度量消逝时间 （响应时间）表示完成任务所需的总时间，包括了硬盘访问、内存访问、I/O操作和操作系统开销决定了系统性能CPU时间 （CPU执行时间）处理某项工作的时间，它只表示在CPU上花费的时间，而不包括等待I/O或运行其他程序的时间（用户所感受的是程序的响应时间，而不是CPU执行时间）CPU时钟几乎所有计算机都用时钟来驱动硬件中发生的各种事件。时钟周期：一个时钟周期的持续时间。时钟间隔的时间。例如：250ps=0.25ns=250x10-12s时钟频率（速率）：每秒的周期例如：4.0GHz=4000MHz=4.0x109HzCPU性能用户和设计者往往以不同的尺度看待性能，我们需要确定一个设计的变化对性能的影响。一个程序的CPU执行时间 = 一个程序的CPU时钟周期数 × 时钟周期时间由于时钟频率和时钟周期时间互为倒数，故一个程序的CPU执行时间=一个程序的CPU时钟周期数/时钟频率硬件设计者必须经常在时钟速率和周期数之间进行权衡，通过以下方式提高性能减少时钟周期的数量提高时钟频率[collapse status="true" title="Q:某程序在一台时钟频率为2GHz的计算机A上运行需要10秒。现在将设计一台计算机B，希望将运行时间缩短为6秒。计算机的设计者采用的方法是提高时钟频率，但这会影响CPU其余部分的设计，使计算机B运行该程序时需要相当于计算机A的1.2倍的时钟周期数。那么计算机设计者应该将时钟频率提高到多少？"]我们首先要知道在A上运行该程序需要多少时钟周期数：CPU时间A=CPU时钟周期数A/时钟频率A 10秒=CPU时钟周期数A / 2GHz CPU时钟周期数A=10秒 × 2GHz=20x10的九次方周期数B的CPU时间公式为：CPU时间B=1.2 × CPU时钟周期数A / 时钟频率B 6秒=1.2 x 20 x10的九次方 / 时钟频率B 时钟频率B=1.2 × 20 x10的九次方 /6秒=0.2 x20 x10的九次方=4x10的九次方=4GHz因此，要在6秒内运行完该程序，B的时钟频率必须提高为A的两倍。[/collapse]指令的性能由于计算机是通过执行指令来运行程序的，因此执行时间一定依赖于程序中的指令数。一种考虑执行时间的方法是，执行时间等于执行的指令数乘以每条指令的平均时间。所以，一个程序需要的时钟周期数可写为：CPU时钟周期数=程序的指令数 × CPI(每条指令的平均时钟周期数)用CPI来表示执行每条指令所需的时钟周期数的平均值。不同的指令需要的时间可能不同，CPI是一个程序全部指令所用时钟周期数的平均值。CPI：每条指令的时钟周期数，表示执行某个程序或者程序片段时每条指令所需的时钟周期平均数。 [collapse status="true" title="Q：假设我们有相同指令集的两种不同实现方式。计算机A的时钟周期为250ps，对某程序的CPI为2.0；计算机B的时钟周期为500ps，对同样程序的CPI为1.2对于该程序，请问哪台计算机执行的速度更快，快多少？"]对于固定的程序而言，每台计算机执行的总指令数是相同的，我们用I来表示。首先，求每台计算机的CPU时钟周期数：CPU时钟周期数A=I × 2.0 CPU时钟周期数B=I ×1.2然后计算每台计算机的CPU时间:CPU时间A=CPU时钟周期数A × 时钟周期时间= I × 2.0×250ps=500 × I CPU时间B=I ×1.2×500ps=600 × I[/collapse]CPU性能公式CPU时间 = 指令数 × 时钟周期时间或CPU时间 = 指令数 × CPI / 时钟频率指令数：执行某程序所需的总指令数量[collapse status="true" title="Q：一个编译器设计者试图在两个代码序列之间进行选择。哪个代码序列执行的指令数更多？哪个执行速度更快？每个代码序列的CPI是多少？"]类别ABC每类指令的CPI123代码序列 1212代码序列 2411代码序列1共执行 2 + 1 + 2 =5条指令代码序列2共执行 4 + 1 + 1 =6条指令所以代码序列1执行的指令数更少用指令数和CPI可以算出CPU时钟周期数（CPU时钟周期数=程序的指令数 × CPI）CPU时钟周期数1 = （2 × 1）+（1 × 2）+ （2 × 3）=10周期CPU时钟周期数2 = （4 × 1）+ （1 × 2）+（1 × 3）=9周期所以代码序列2更快，尽管序列2多执行了一条指令，由于时钟周期数较少，指令数较多，因此它一定具有较小的CPI（CPI的计算公式为：CPI = CPU时钟周期数 / 指令数）CPI1 = 10 / 5[/collapse]影响CPU性能公式中的各种因素硬件或软件指标影响什么算法指令数，可能的CPI编程语言指令数，CPI编译程序指令数，CPI指令集体系结构指令数，CPI时钟频率功耗墙下图是30年间intel八代微处理器的时钟频率和功耗的增长趋势动态能耗取决于每个晶体管的负载电容和工作电压：