第二章-计算机系统量化分析基础
计算机系统量化分析基础
计算机体系结构
计算机体系结构经典定义
定义:计算机体系结构是程序员所看到的计算机的属性,即:概念性结构与功能属性。
解释:所谓程序员看到的计算机的属性,是程序(机器语言,汇编语言,编译程序生成系统)设计者为使其所设计(或生成)的程序能在机器上正确运行,必须掌握和遵循的计算机属性。这些属性包含概念性结构与这些概念性结构的属性。
实质:计算机系统中软硬件界面的确定,也就是指令系统的设计。
体系结构界面以上,更多的是软件研究领域关注的功能和内容;体系结构界面以下,更多的是硬件和固件等市县方面研究的功能和内容。
所关注的计算机属性主要是指:
- 数据表示:硬件能直接辨认和处理的数据类型
- 寻址规则:最小寻址单元、寻址方式及其表示
- 寄存器定义:寄存器的定义、数量和使用方式
- 指令系统:机器指令的操作类型和格式、指令间的排序和控制机构等
- 中断系统:中断的类型和中断响应硬件的功能等
- 机器工作状态的定义和切换:如管态和目态等
- 存储系统:程序员可用的最大存储容量
- 信息保护:信息保护方式和硬件的支持
- I/O结构:I/O寻址方式、数据传送的方式等
计算机体系结构的现代定义
定义:计算机体系结构包含计算机系统设计的三个方面:
- 计算机指令体系(Instruction Set Architecture, ISA)。程序员可见的实际指令系统,是计算机硬件和软件的一个分界面。
- 计算机组成(computer Organization or uarch)或者为微体系结构(Microarchitecture)。是计算机各个功能部件及其连接的设计。
- 计算机硬件:是指实现计算机的各个功能部件的具体的实现技术。
在某种程度上而言,计算机体系结构的现代定义较经典定义扩大了体系结构涵盖的范围。
系列机与兼容
系列机
系列机(family machine)是具有相同体系结构(这里应该所指为指令集ISA),但组成和实现不同的一系列不同型号的计算机系统。
现代计算机不但系统系列化,其构成部件和软件也系列化。
软件兼容
同一个软件可以不加修改地运行于体系结构相同的各档机器,而且它们所获得的结果一样,差别只在于有不同的运行时间,则称这些机器是软件兼容的。
关于向前向后兼容
这是《计算机体系结构(第二版)》中所述的兼容。
向上(下)兼容指的是:按某档机器编制的程序,不加修改的就能运行于比它高(低)档的机器。
向前(后)兼容指的是:按某个时期投入市场的某种型号机器编制的程序,不加修改地就能运行于在它之前(后)投入市场的机器。
个人感觉这个叙述不是非常清晰明了,为什么会使用这样的定义,实在有点误导人。
下面是维基百科的定义
Backward compatibility (sometimes known as backwards compatibility) is a property of a system, product, or technology that allows for interoperability with an older legacy system, or with input designed for such a system, especially in telecommunications and computing. Backward compatibility is sometimes also called downward compatibility.
Forward compatibility or upward compatibility is a design characteristic that allows a system to accept input intended for a later version of itself.
这里好像并没有进行区分向后兼容和向后兼容,以及向前兼容和向上兼容。
个人为人知乎中叶剑飞的回答更加一语中的。
软件开发行业的「前后」是按照英语习惯来的,不是按照汉语习惯来的。按照英语习惯,「向前进」(forward)指未来,「向后退」(backward)指过去。注意要把「前」「后」分别理解成「前进」和「后退」,不可以理解成「从前」和「以后」。
backward compatibility (向后兼容, 回溯兼容) = downward compatibility (向下兼容) = 向过去兼容,即现在设计的软件要考虑旧版本的数据还能不能用,比如在开发Office 2007的时候,要考虑如何打开Office 2003的doc/xls/ppt文件,而不能仅仅只能打开docx/xlsx/pptx文件。
forward compatibility (向前兼容, 前瞻兼容) = upward compatibility (向上兼容) = 向未来兼容,即现在设计的软件要考虑未来还能不能用。比如保留几个字段,留给未来新填写新数据。
优劣处分析
-
解决了软件要求环境稳定和硬件,器件技术迅速发展之间的矛盾。长期以来,程序员希望有一个稳定的软件环境,使他们编制出来的程序能够在该计算机类型的不断迭代中得到长期的应用,而机器设计人员则希望根据硬件技术与器件技术的发展,不断推出新的机器,这就产生了矛盾。
-
构建的较好的利益生态,便于计算机行业的发展。大公司确定架构,小公司可以依据架构与大公司形成竞争,构建起良好的生态。
-
推动了计算机各种部件标准的规范化,标准化形成了工业的专业化。
-
系列机为了保证软件兼容,要求体系结构不能改变,这种约束又妨碍了计算机体系结构的发展。
计算机体系结构的发展
计算机的分代
计算机的分代主要以器件,体系结构技术,软件技术进行区别。

计算机体系结构的分型

- 这里划分机器类型的标准是价格。
- 能够代表当前计算机性能的一般是巨型机和大型机。
- 计算机的技术和性能在不断的“下移”,即应用于巨型机,大型机的技术不断应用于小型机,微型机,以提升性能。
- 新型体系结构的设计一方面是合理地增加计算机系统中硬件的功能比例。另一方面则是通过多种途径提高计算机体系结构中的并行性。
软件的发展
- 计算机语言与编译技术:
- 计算机语言是由低级向高级发展的,高级语言的语句较低级语言更强,但是以低级语言为基础。
- 编译器与计算机语言联系愈发紧密,效率不断提升。
- 操作系统,更多的操作系统可以兼容不同体系结构的计算机。
- 软件工具与中间件
应用的发展
计算机的应用领域广泛,可以将之划分为多个领域,不同的利于对于计算的应用有不同的需求。
- 嵌入式计算机。主要关注成本,功耗,应用特性等因素。
- 掌上计算机。主要是智能手机,主要关注成本,功耗,多媒体处理等因素。
- 台式计算机。对性价比要求最高,图形,功耗。
- 服务器市场。可用性、高流量密度和可扩展性。可扩展性一般指服务容量和有效服务能力的扩展性。
- 数据中心。数据中心计算机一般为成百上千甚至上万太服务器或台式机构成的集群计算机系统。电能和散热系统很重要,看重RAS(Reliable/Serviceable/Available)。
- 巨型机。面向浮点运算的数据中心计算机,内部网络需要更高的带宽和更低的延迟
相关核心技术的发展
- 逻辑电路,以晶体管为基本单元的平面集成电路。晶体管密度基本上在按照摩尔定律增长,而晶体管的密度依据缩放定律会直接影响效能。
缩放定律:如果将MOS管的尺寸和电压减半,MOS管的切换速度将提高两倍,耗电量降至1/4。
- 半导体DRAM,单个DRAM模块的容量每年增加25-40%,增速逐年下降。
- 闪存(快擦型存储器) ,近几年,每年约50-60%的速度增长,大约每两年翻一番,大量用于便携式设备。
- 磁盘,从04年开始,大约每年增长40%,约每3年翻一番。SSD的成本的迅速下降。
- 网络,延迟由于光速的限制,很难进一步缩小。但是带宽在不断增大。
计算机体系结构的发展
分布的I/O处理能力
问题:存储程序计算机以运算器为中心,所有操作都由控制器进行控制,产生了慢速输入输出操作占用快速运算器的矛盾。
解决办法:
- 采用程序中断的概念,当外部设备准备好传送数据时,向CPU发出中断请求,进行数据的传送。
- 以存储器为中心,使得外部设备可以直接通过DMA(直接存储器访问)与存储器进行数据交流。
- 使用I/O处理机的方式,使得I/O处理机负责CPU原本承担的大部分任务,将CPU从管理,控制I/O系统的沉重负担中解放出来。
保护的存储空间
虽然程序与数据以同等地位存储带来了许多好处,但是也带来一些问题:
- 自我修改程序是难以编制,调试,使用的。
- 如果程序发生错误,进行程序诊断也是不易的。
- 程序的修改不利有实现程序的可再入性以及递归调用(也许可再入性是递归调用同一函数的唯一性??)。
- 程序的可修改性也不利于重叠和流水方式的操作。
现在大多数计算机都规定,在执行过程中,不允许修改程序。
存储器组织结构的发展
使用多级cache降低访问存储器的次数以及提高存储系统的速度。
指令集的发展
软件危机是指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。
-
20世纪50年代,指令数目自然逐渐增长,而且因为“软件危机”的出现,人们也认为指令集中指令数目的增长,有利于缓解软件危机,而且还可以提高计算机性能。
-
但是过则不及,大量的指令给译码工作带来了巨大的负担,反而降低了计算机的性能。因而,1979年,D.A.Patterson等人提出了RISC思想,精简指令系统。
-
2000年左右,专用指令更多的回归指令系统,出现了媒体类,数字信号类,计算类等等多种专用指令子集。使得CISC和RISC在指令数量方面的区别变得不清晰。
-
对于寻址方式,最开始直接址除操作数的地址(直接寻址)。但是,计算机存储容量不断扩大,指令中的地址码已经不能满足整个主存空间的寻址要求。因而,产生了多种寻址方式,现代指令给地址码部件一般给出形式地址,之后由各种寻址方式,按照规定的算法把形式地址变换成访问主存的有效地址。
-
但多种寻址方式也带来了设计,生产,使用的复杂性,因而,RISC一般只使用常用的几种寻址方式。
并行技术
并行性:计算机系统在同一时刻或者同一时间间隔内进行多种运算或操作。
同时性:两个或两个以上的事件在同一时刻发生。
并发性:两个或两个以上的事件在同一时间间隔内发生。一般来讲,同时性很难完成,一般的并行性指并发性。
计算机系统中并行性的等级
从执行程序的角度来看,并行性等级从低到高可分为:
- 指令内部并行:单条指令中各微操作之间的并行,实现技术一般为硬件。
- 指令级并行(Instruction Level Parallel):并行执行两条或两条以上的指令,以基本块中的指令为调度单位,实现需要硬件,同时需要得到编译的支持。
- 线程级并行(Thread Level Parallel):并发执行两个或两个以上的线程。通常是以一个进程内派生的多个线程为调度单位,实现难点在于编译技术,而简洁,高效的硬件支持必不可少,否则严重影响执行效率。
- 任务级或过程级并行:并行执行两个或两个以上的过程或任务(程序段),以子程序或进程为调度单元,实现难点在于并行算法,程序设计和硬件高效支持。
- 作业或程序级并行:并行执行两个或两个以上的作业或程序。
单处理机系统中,这种并行性上升到某一级别时,需要通过软件实现,多处理机系统中,一般其并行性由硬件实现。
从处理数据的角度来看,并行性的等级低到高可分为:
- 字串位串:每次只对一个字的一位进行处理。最基本的串行处理方式,不存在并行性。
- 字串位并:同时对一个字的全部位进行处理,不同字之间是串行的。开始出现并行性。
- 字并位串:同时对许多字的同一位(称为位片)进行处理。具有较高的并行性。
- 全并行:同时对许多字的全部位或部分位进行处理。最高一级的并行。
Flynn分类法按照指令和数据的关系,把计算机系统的结构分为4类:
单指令流单数据流SISD(Single Instruction stream Single Data stream)
单指令流多数据流SIMD(Single Instruction stream Multiple Data stream)
多指令流单数据流MISD(Multiple Instruction stream Single Data stream)
多指令流多数据流MIMD(Multiple Instruction stream Multiple Data stream
提高并行性的技术途径
- 时间交错(Time-Interleaving)。引入时间因素,让多个处理过程在时间上相互错开,轮流重叠地使用同一套硬件设备的各个部分,以加快硬件周转而赢得速度。eg:流水线。
- 资源重复(Resource-Replication)。引入空间因素,以数量取胜。通过重复设置硬件资源,大幅度地提高计算机系统的性能。eg:多处理机本身就是资源重复。
- 资源共享(Resource-Sharing)。这是一种软件方法,它使多个任务按一定时间顺序轮流使用同一套硬件设备。
单机系统的并行性
在发展高性能单处理机过程中,起主导作用的是时间重叠原理。其中,实现时间重叠的基础:部件功能专用化
- 把一件工作按功能分割为若干相互联系的部分;
- 把每一部分指定给专门的部件完成;
- 然后按时间重叠原理把各部分的执行过程在时间上重叠起来,使所有部件依次分工完成一组同样的工作。
eg:
在单处理机中,资源重复原理的运用也已经十分普遍。
-
多体存储器
-
多操作部件
- 通用部件被分解成若干个专用部件,如加法部件、乘法部件、除法部件、逻辑运算部件等,而且同一种部件也可以重复设置多个。只要指令所需的操作部件空闲,就可以开始执行这条指令(如果操作数已准备好的话)。这是指令级并行。
-
阵列处理机(并行处理机)
- 更进一步,设置许多相同的处理单元,让它们在同一个控制器的指挥下,按照同一条指令的要求,对向量或数组的各元素同时进行同一操作,就形成了阵列处理机 。
在单处理机中,资源共享的概念实质上是用单处理机,模拟多处理机的功能,形成所谓虚拟机的概念。比如多时系统,在多终端的情况下,每个终端上的用户感到好像在都站这台处理机。
多机系统的并行性
耦合度:反映多机系统中各机器之间物理连接的紧密程度和交 互作用能力的强弱。
-
最低耦合(Least Coupled System):耦合度最低,除通过某种中间存储介质之外,各计算机之间没有物理连接,也无共享的联机硬件资源。
-
松散耦合系统(Loosely Coupled System)或者间接耦合系统(Indirectly Coupled System):一般是通过通道或通信线路实现计算机之间的互连,可以共享外围设备(磁盘、磁带等)。机器之间的相互作用是在文件或数据集一级上进行。
-
紧密耦合系统(Tightly Coupled System)或者直接耦合系统(Directly Coupled System):在这种系统中,计算机之间的物理连接的频带较高,一般是通过总线或高速开关互连,可以共享主存。
松散耦合系统常表现为两种形式:
- 多台计算机和共享的外围设备连接,不同机器之间实现功能上的分工,机器处理的结构以文件或数据集的形式送到共享的外围设备,供其他机器进行处理。
- 计算机网络进行共享,实现大范围的资源共享。
多机系统遵循时间重叠、资源重复、资源共享原理,发展为3种不同的多处理机:同构型多处理机、异构型多处理机、分布式系统
| 项目 | 同构性多处理机 | 异构型多处理机 | 分布处理系统 |
|---|---|---|---|
| 目的 | 性能,可靠性 | 使用效率 | 效率,性能 |
| 技术 | 资源重复 | 时间重叠 | 资源共享 |
| 途径 | 机间互联 | 功能专用化 | 网络化 |
| 组成 | 同类型 | 不同类型 | 不限制 |
| 分工方式 | 任务分布 | 功能分布 | 硬件,软件,数据等各种资源分布 |
| 工作方式 | 一个作业由多机协同并行完成 | 一个作业由多机协同串行完成 | 一个作业由一台处理机完成,必要时请求它机协作完成 |
| 控制形式 | 浮动控制 | 专用控制 | 分布控制 |
| 耦合度 | 紧密耦合 | 紧密松散耦合 | 紧密松散耦合 |
计算机系统设计和分析
成本与价格
价格直接由成本决定
商品的标价(价格)由这样一些因素构成:
- 原料成本,一件产品中所有部件的采购成本的总和。
- 直接成本,是指与一件产品生产直接相关的成本,包括劳务成本,采购成本(如运输包装费用等等),零头,产品质量成本(人员培训,生产过程管理)
- 毛利,公司的研发费用,市场建立费用,销售费用,生产设备维护费用,房租,贷款利息,税后利润及所得税等等。这一部分开支是无法由一件产品直接支付的,它必须均摊到每一件产品中。
- 折扣,公司一般会提供批发价格折扣,产品通过零售店进行销售,零售商获得利润。
下面是一个类比图,其中占比可能因情况不同而变化,但大致遵循以下比例。

一般来讲,成本和价格是计算机系统设计的重要参考指标,这也与计算机的性价比直接相关。但在某些情况下,一般不考虑性价比这一因素:
- 但在巨型机的市场中,一般不会考虑性价比这方面的情况,其为了运算速度不惜一切代价。
- 在低端的PC中,往往也会牺牲性能来达到计算机的价格降低。
价格的其他影响因素
由以下几个因素决定:
-
对成本产生最直接影响的是时间。即使实现技术没有变动,计算机系统的制造成本也会不断下降。随着时间的推移,生产工艺会日渐稳定,产品的成品率会不断提高。产品的成本与成品率成反比。
-
产量增加会加速工艺的稳定,产量的增加会降低每台机必须承担的开发费用,这都会造成价格的降低。
基准测试程序
测试程序
-
实际应用程序。但是实际应用程序会受到多方面因素的限制(比如:一些软件依赖于特定的硬件系统),可能并不能准确地反映结果。
-
修正的(或者脚本化)应用程序。很多情况下,通过修正实际应用程序的部分代码或者通过脚本描述来模拟实际应用,再用它们来构成测试程序。可以解决:
- 程序的迁移性问题。
- 可以回避程序的一些次要特性。
- 简化一些程序的复杂性,降低测试的复杂程度,减少测试开销。
-
核心测试程序。从该计算机所要解决问题的代码中抽取核心部分进行测试,评价该计算机的性能。
-
小程序测试。较短的代码具有一定特殊功能的程序。例如屏幕测试小程序等等。
-
合成程序测试。是核心测试程序的升级版。会根据实际应用情况,进行模拟实际的操作。
测试程序包(组件, benchmark suites)
- 选择一组各个方面有代表性的测试程序组成
- 避免了独立测试程序的片面性,尽可能全面地测试了一个计算机系统的性能
还有许多较大的提供测试软件的第三方组织:SPEC,TP,LINPACK...
量化设计的基本原则
大概率时间优先原则
基本思想是:对于大概率事件(最常见的时间),赋予它优先的处理权和资源使用权,以获得全局的最优结果。
Eg:CPU在进行加法运算时,运算结果无溢出为大概率事件,而运算结果溢出是小概率事件。假设某个CPU执行64位加法运算,可以通过某个结构进行并行计算,但是,该数构将无法处理溢出问题。本着该原则,则该数据结构是可行的,只需要单独处理溢出即可。
Amdahl定律
定义
Amdahl's law can be formulated in the following way:
where
- Slatency is the theoretical speedup of the execution of the whole task;(系统加速比)
- s is the speedup of the part of the task that benefits from improved system resources;(部件加速比)
- p is the proportion of execution time that the part benefiting from improved resources originally occupied.(可改进比例)
系统加速比 = 系统性能改进前 / 系统性能改进后
系统加速比 = 总执行时间改进前 / 总执行时间改进后
特点
- 如果只针对整个任务的一部分进行优化。那么所获得的加速比不大于1 / (1-p),至多为1 / (1-p)。因为将受限于不能被优化的部分。
- 具有较高性价比的计算机系统是一个带宽平衡的系统,而不是看它使用的某些部件的性能。
- 加速某部件执行速度所获得的性能加速比,受限于该部件在系统中所占的重要性。
推导过程
A task executed by a system whose resources are improved compared to an initial similar system can be split up into two parts:
- a part that does not benefit from the improvement of the resources of the system;
- a part that benefits from the improvement of the resources of the system.
An example is a computer program that processes files from disk. A part of that program may scan the directory of the disk and create a list of files internally in memory. After that, another part of the program passes each file to a separate thread for processing. The part that scans the directory and creates the file list cannot be sped up on a parallel computer, but the part that processes the files can.
The execution time of the whole task before the improvement of the resources of the system is denoted as T. It includes the execution time of the part that would not benefit from the improvement of the resources and the execution time of the one that would benefit from it. The fraction of the execution time of the task that would benefit from the improvement of the resources is denoted by p. The one concerning the part that would not benefit from it is therefore 1-p. Then,
It is the execution of the part that benefits from the improvement of the resources that is accelerated by the factor s after the improvement of the resources. Consequently, the execution time of the part that does not benefit from it remains the same, while the part that benefits from it becomes:
The theoretical execution time T(s) of the whole task after the improvement of the resources is then:

Amdahl's law gives the theoretical speedup in latency of the execution of the whole task at fixed workload W, which yields

程序局部性原理
程序总是趋向于使用最近使用过的数据和指令。也就是说:程序访问地址的分布不是随机的,而是相对地簇聚。
- 程序的时间局部性:程序即将用到的信息很可能就是目前正在使用的信息。
- 程序的空间局部性:程序即将用到的信息很可能与目前正在使用的信息在空间上相邻或者临近。
CPU的性能分析
一般而言,可以使用
CPU时间 = 执行程序所需的时钟周期数 × 时钟周期时间
但是这个公式的两个参数并不能直接反应程序本身的特性,因而引入中“IC”和“CPI”的概念。
IC(instruction counter) = 程序执行过程中所处理的指令数目
CPI(Cycles Per Instrction,) = 执行某个程序的指令平均时钟周期数
指令时钟数(Cycles Per Instrction, CPI) = 总时钟周期数 / IC
那么可以改写公式为:
CPU时间 = CPI * IC * 时钟周期数 = CPI * IC / 时钟频率
这就是CPU性能公式,其三个参数反应了与体系结构相关的三种技术:
- 时钟频率:取决于硬件实现技术和计算机组成
- CPI:取决于计算机组成和指令系统的结构
- IC:取决于指令系统的结构和编译技术
可以对CPU性能公式进行拓展:
假设计算机系统有n 种指令,其中第 i 种指令的处理时间为CPIi ,在程序中第 i 种指令出现的次数为ICi
![]()
![]()
Eg:




浙公网安备 33010602011771号