Patterson & Hennessy
计算机概要与技术
计算机应用包括:个人计算机PC,服务器,嵌入式计算机。后PC时代出现了个人移动设备PMD(手机),云计算(在网络上提供服务的大服务器集群,供应商按需出租其中的部分服务器)。
学习计算机组成设计,最根本的目的就是两个字——性能。想让网页加载快一些,游戏延迟低一些,存储大一些……现在的计算机系统想要提高性能主要是往“并行处理”和内存的层次性方向发展。后续章节会分别从数据,指令,存储等方面的优化展开。
计算机系统结构中的8大伟大思想
摩尔定律
芯片上的集成度18个月翻一番。近年来有些不适用了,想要优化
不能只等着存储空间的上升了,ISA可以从“专注于特定领域”入手比如专于机器学习。
抽象
高层次看不到低层次的具体实现,以此简化设计。
加速大概率事件
大概率事件往往也因为简单所以容易发生,因此也易于提高效率,而且提高其效率的收益也大。
通过并行提高性能
本书中会多次提到~
通过流水线提高性能
典型的那个阶梯状流水线模型。不是每个任务cpu都先取指解码执行取指解码执行一遍遍单独执行的,而是可以在解码时取下一个,执行时解码下一个……
通过预测提高性能
提前开始某些预测的操作。
存储器层次
速度快,容量大,价格便宜这些是存储器的互斥属性,但是我们又全都想要。解决办法就是类似那个金字塔模型的存储器层次,用于处理不同的数据。
通过冗余提高可靠性
类似汽车后面的备胎,多余物理部件用于确保意外发生时可以取代并检测错误。
软件 硬件
软件主要是系统软件,应用软件,系统软件作为应用和底层硬件的桥梁,这也是一种抽象。
系统软件中 os 和编译程序是必需的。编译程序主要用于把高级语言翻译为底层机器语言,os 负责处理 io,分配存储空间,管理共享资源。
机器语言,汇编语言,高级语言这些也不再过多介绍了。硬件主要包括冯诺依曼的五大结构。
而最伟大的抽象就是指令集体系架构,也就是硬件和底层软件之间的接口。他封装了一些底层 IO,存储器分配等系统细节,为程序员提供基本指令集或 OS 的接口。这些接口合称为 ABI Application Binary Interface。
存储设备按照数据安全性来讲主要分为易失性 volatile 和非易失性 non-volatile 两种。主存储器是易失的(内存包括主存和主存中取出来的告诉缓存。DRAM 是一种主存),二级存储器(比如硬盘)是非易失的。flash 闪存是一种非易失的内存,存取速度和价格都介于两者之间。
通信
联网计算机的3大特点:
- 通信,数据交流。发个文件啥的。
- 资源共享:比如 IO 设备可以共享,远程打印,显示之类。
- 远距离访问:远程控制,不用必须在计算机前。
按距离划分主要分为广域网(如以太网)和局域网。现在还在不断发展比如诞生了新的无线通信技术(IEEE 802.11 标准)。
处理器和存储器制造技术
芯片是由集成晶体管组成,由硅制造而来。上图介绍了整体流程步骤。
在 RISCV Reader 里有提到类似的原理,如果缩小了芯片体积,晶圆上的瑕疵会影响更少的芯核,晶圆的利用率也会更高,产率数量也多了。而且生产芯片的掩膜很贵,产量高了平均每个芯片掩膜成本就低了。
性能
几个重要度量参数:响应时间(收到任务到完成任务的时间,PC 用户较关注),吞吐率(单位时间完成的任务数量,数据中心通常关注)。
两者是相互影响的,比如响应时间低了吞吐率也低,任务太多排队响应时间也会低,提高吞吐率在这种情况下也会提高响应时间。
本书前几章性能主要取决于响应时间,也就是成反比。比如运行程序需要10s和10s的两台计算机,前者比后者快1.5倍。
CPU执行时间=用户CPU时间(执行程序)+系统CPU时间(操作系统为了执行程序花费的时间)
CPU时钟周期=计算机一个时钟周期的时间,这是计算机底层的一种度量方式。
一个程序执行时间=所需CPU周期数*CPU时钟周期。因此提高CPU时钟频率也可以加快程序执行速度。
CPI 执行每条指令所需的时钟周期数,标识了指令的性能。
因此CPU执行程序时间=指令条数 * CPI * 时钟周期
不过三者是有关联的,尽量不要取其中一部分去预测确定的性能结果。
比如 MIPS:指令数/执行时间 * 10^-6 或者 时钟频率/CPI * 10^-6,代表每秒执行几百万条指令。但是这个参数没法直接拿去衡量性能,比如不同计算机指令集条数不一样,同一计算机不同程序 MIPS 值不一样……
下例A的 MIPS 更高,但是B更快。
能耗和功耗
功耗:单位时间消耗多少能量。
能耗:能效比,比如完成某个任务消耗的能量。
单纯功耗低不一定能耗低,因此能耗比功耗更有价值。
目前占统治地位的集成电路技术是 CMOS,能耗主要取决于晶体管开关的动态能耗。一次翻转的能耗=负载电容 * 电压^2. 晶体管功耗=动态能耗 * 开关频率。
随着时钟频率增长功耗也逐渐增加,近年来功耗达到了临界的“功耗墙”,即功耗增加造成的升温快到承受极限了。当然我们也可以采取冷却办法,但是成本很高,因此不能再一味提高时钟频率了,要寻找新方法。也就是单处理器向多处理器的转变(2000年前后开始的)。
多处理器
虽然处理器核心数量增加了,但是因此程序也需要重新编写来适配多核。我们要让大家的分配平衡,同时不要有太多通信和同步的开销。
本章示例:SPEC CPU基准测试程序
SPEC 是诸多计算机销售商资助的,用于建立基准测试集的合作组织。比如 SPEC CPU 2006 包括12个整数基准程序集,17个浮点基准程序集,其中包含C编译、仿真量子计算机、分子动力学质点法等程序。除此之外还有能耗功耗测试集。
结果被称为 SPECratio,值越大表示性能越快(执行时间的倒数)。综合几何平均值是所有 SPECratio 相乘,开n次方根。