在读完本书后,我们能够理解以下问题:
用C或Java等高级语言编写的程序如何翻译成硬件之间的语言?硬件如何执行程序?
领会这些概念是理解软硬件两者如何影响程序性能的基础
什么是软硬件之间的接口,以及软件如何指导硬件完成其功能?
这些概念对于许多软件的编写十分重要
哪些因素决定了程序的性能?程序员如何才能改进程序性能?
从本书中我们将知道,程序性能取决于原始程序、将该程序转换为计算机语言的软件以及执行该程序的硬件的有效性
什么技术可供硬件设计者用于改进性能?
本书将介绍现代计算机设计的基本概念。有感兴趣的读者可深入阅读另一本进阶教材《Computer Architecture: A Quantitative Approach》
硬件设计者可使用那些技术提高能效?什么技术可供程序员提高或降低能效?
为什么串行处理近来发展为并行处理?这种发展带来的结果是什么?
本书给出了解释,并介绍了当今支持并行处理的硬件机制,全面评述了新一代的多核微处理器(multicore microprocessor)
自1951年的第一台商用计算机开始,计算机架构师们提出的哪些伟大思想构成了计算机的基础?
第一部分 计算机的分类
计算机的分类
传统上,按照应用,计算机可分为:
个人计算机(PC)
服务器
适用于执行大负载任务,多用户通过网络并行访问。
高端服务器被称为超级计算机
嵌入式计算机
进入后PC时代:
往小的方向发展为:个人移动设备(PMD)
往大的方向发展为:仓储规模计算机(Warehouse-Scale Computer,WSC),大型数据中心的云计算服务器
存储容量
字节常用于存储容量,位常用于传输速度。1字节=8位
十进制术语 | 缩写 | 数值 | 二进制术语 | 缩写 | 数值 | 数值差别 |
---|---|---|---|---|---|---|
kilobyte | KB | 10^3 | kibibyte | KiB | 2^10 | 2% |
megabyte | MB | 10^6 | mebibyte | MiB | 2^20 | 5% |
gigabyte | GB | 10^9 | gibibyte | GiB | 2^30 | 7% |
terabyte | TB | 10^12 | tebibyte | TiB | 2^40 | 10% |
petabyte | PB | 10^15 | pebibyte | PiB | 2^50 | 13% |
exabyte | EB | 10^18 | exbibyte | EiB | 2^60 | 15% |
zettabyte | ZB | 10^21 | zebibyte | ZiB | 2^70 | 18% |
yottabyte | YB | 10^24 | yobibyte | YiB | 2^80 | 21% |
测验:
i5 + GTX3060 + 8G + 512G (GiB)
生活中,100兆(100Mbps)的带宽。传输速度是100MB/s / 8 = 12.5MiB/s
理解程序性能
一个程序的性能取决于以下各因素的组合:程序所用的算法的有效性,用来建立程序并将其翻译成机器指令的软件系统,计算机执行机器指令(可能包括I/O操作)的有效性
软件或硬件组成元素 | 该软件如何影响性能 | 该论题出现的位置 |
---|---|---|
算法 | 决定了源码级语句的数量和I/O操作的数量 | 其他书 |
编程语言、编译器和体系结构 | 决定了每条源码级语句对应的计算机指令数量 | 第2、3章 |
处理器和存储系统 | 决定了指令的执行速度 | 第4、5、6章 |
I/O系统(硬件和操作系统) | 决定了I/O操作可能的执行速度 | 第4、5、6章 |
第二部分 计算机系统结构中的8个伟大思想
2个设计原则
1、摩尔定律
单芯片上的集成度(单位面积硅片能容纳的晶体管数量)每18个月翻一番
提出于1965年
芯片设计要依据设计 完成 时的工艺水平
2、抽象简化设计
省略低层次的细节,提供简化的模型
4个提高性能的方法
3、加速大概率事件
一台计算机绝大部分时间用来打游戏,改进游戏新能还是其他性能更能提高整体性能?
定量分析:Amdahl定律
4、通过并行提高性能
同时发生,典型例子是多核处理器
5、通过流水线提高性能
类比工业中的流水线
6、通过预测提高性能
- 预测失误后恢复的代价不高
- 预测有相当的准确率则可以猜测哪些操作会发生,并提前开始执行
存储器层次与冗余
7、存储器层次
(见第三部分 软硬件接口)
8、冗余提高可靠性
计算机不仅需要速度快,还需要工作可靠。由于任何一个物理器件都可能失效,因此可以通过使用冗余部件的方式提高系统的可靠性(dependable),冗余部件可以代替失效部件并可以帮助检测错误。
物理器件的“备胎”,失效了就换上
第三部分 软硬件基础
编程语言分类
机器指令
000000111100100100101100111111110010
汇编语言和由它汇编出的机器语言一一对应
汇编语言
指令助记符、寄存器标号
addi $s1, $s1, 1
一条高级语言语句可以编译出好几条汇编语言
高级语言
语句接近自然语言,提高了程序的可移植性
cnt = cnt + 1
机器语言依赖于机器,所以被称作低级语言
汇编语言呢?高级语言呢?
冯 · 诺依曼结构
冯 · 诺依曼结构的五大经典部件:
1、外围的:输入设备、输出设备,合称I**/O设备**
输入设备:键盘鼠标、扫描仪
输出设备:显示器、打印机
混合I/O设备:触摸屏、网卡
2、存放程序和数据的:存储器
缓存cache ~ SRAM 快但是贵,容量很小(3MB)
主存/内存 ~ DRAM 比较快也比较贵,容量中等(8 ~ 16GB)
辅存/外存/二级存储器 慢但便宜,容量大(基本都是512GB起步)
*只有放入内存的程序才会被CPU执行
3、组成CPU的两大部件:运算器(数据通路)、控制器
存储器层次结构
指令集体系结构
集成电路制造
复习题
复习题是用来碎碎念回忆复习的,不是用来写的!
打*的问题在考试中不太重要或者比较复杂,请酌情跳过
- 传统上计算机分为哪三类?后PC时代有哪两类计算机?
- KB、MB、GB之上有哪些存储容量单位?
- *计算机设计的八大伟大思想是什么?
- Amdahl定律公式是什么?
- 高级语言经过什么过程变成汇编语言?汇编语言又经过什么变成机器语言?
- 冯·诺依曼结构由哪五大基本部件组成?CPU主要有哪两大部件?还有少量的哪个部件?
- 存储器层次中,最快贵小的、其次的、最廉价的是什么?分别采用什么技术?
- Intel和苹果的处理器架构不同,是什么东西不同?
- 成品率、芯片面积、产量如何影响集成电路(IC)的自造成本?
- 传统意义上计算机分为PC、服务器、嵌入式计算机。后PC时代分为个人移动设备(PMD)、仓储规模计算机(WSC)
- TB、PB、EB、ZB、YB
- 摩尔定律、抽象简化、加速大概率事件、并行提高、流水线提高性能、预测提高性能、存储器层次、冗余提高可靠性
- 改进后的执行时间 = 改进影响的执行时间 / 改进量 + 改进不影响的执行时间
- 高级语言经过编译变成汇编语言,汇编语言经过汇编转换为机器语言
- 控制器、存储器、运算器、输入\输出设备。CPU主要两大部件为控制器和运算器,还有少量的存储器
- 最快最贵最小的是高速缓存cache采用SRAM,其次是内存采用DRAM,辅存采用磁盘或闪存
- Intel和苹果的处理器架构不同,是因为指令集体系结构不同即架构不同
- 成品率越高、产量越高、芯片面积越小,芯片的制造成本越低
第四部分 性能与功耗
评价性能的指标
个人计算机更看重响应时间(又称执行时间):任务从开始到完成的时间
服务器更看重吞吐率:单位时间内完成的人物数量
课程主要讨论CPU执行时间
性能 = 1 / 执行时间
计算机A的性能是计算机B的几倍?-> 计算机Ade执行时间是B的几分之一?
e.g. 运行同一个程序,计算机A用15秒,计算机B用10秒,谁的性能更高?它的性能比另外一台高多少?
计算机B的性能更高,B的性能比A高了15/10=1.5
性能的度量
- CPU执行时间:即CPU时间。它只表示在CPU上花费的时间,而不包括等待I/O或运行其他程序的时间。(包括用户CPU时间和系统CPU时间)
- 用户CPU时间:用于用户程序为用户花费的CPU时间
- 系统CPU时间:操作系统为用户花费的CPU时间
- 时钟周期:也叫tick、clock tick、clock period、clock 或 cycle,为计算机一个时钟周期的时间,通常是处理器时钟,一般为常数
- 时钟长度:每个时钟周期维持的时间长度
- CPU的时钟频率f(主频):一秒钟有多少个时钟周期。即:T = 1 / f
CPU经典性能公式
一个程序的CPU执行时间 = 一个程序的CPU时钟周期数 x 时钟周期时间 CPUtime = cycles * T
一个程序的CPU执行时间 = 一个程序的CPU时钟周期数 / 时钟评率
e.g. 某程序在一台时钟频率为2GHz的计算机上运行需要10秒。现在将设计一台计算机B,希望将运行时间缩短为6秒。计算机的设计者采用的方法是提高时钟频率,但这会影响CPU其余部分的设计,使计算机B运行该程序时需要相当于计算机A的1.2倍时钟周期数。那么计算机设计者应该将时钟频率提高到多少?
- CPI:每条指令的时钟周期数,表示执行某个程序或程序片断时每条指令所需的时钟周期平均数。
CPU时钟周期数 = 程序的指令数 x 每条指令的平均时钟周期数
cycles = IC x CPI
CPU 时间 = 指令数 x CPI x 时钟周期时间 CPUtime = IC * CPI * T
或
CPU 时间 = 指令数 x CPI / 时钟频率 CPUtime = IC * CPI / f
e.g. 主频为4GHz的CPU,每个时钟周期的长度是多少秒?某程序共有3亿条指令,其中1亿条的CPI为3,2亿条的CPI为6,整个程序的CPI是多少?该CPU执行这个程序需要多长时间?
CPU经典性能公式为什么靠谱
经典性能公式考虑了指令数IC、平均每条指令需要周期数CPI、时钟周期长度T(也就是主频 f 的倒数)全部三个因素
使用CPU执行时间这个靠谱的指标来衡量性能
使用什么编程语言和编译程序、采取什么算法,影响指令数和CPI两个因素
采用什么指令体系结构,影响指令数、CPI、主频全部三个因素
他们都会影响CPU性能
还有一个衡量性能的指标MIPS(million instruction per second,百万指令每秒)
MIPS = IC / (CPUtime x 10^6) = f / (CPI x 10^6)
因为只考虑了主频(周期长)和CPI两个指标,很受作者唾弃
功耗
CMOS(互补型金属氧化半导体)是当前占统治地位的集成电路技术。
其中,晶体管的能耗主要来自动态能耗,即晶体管打开/关闭的短暂动态过程。
即 0 -> 1 或 1 -> 0 的过程
晶体管经历一次 0 -> 1 -> 0 或 1 -> 0 -> 1 的开关过程
能耗 = 负载电容 x 电压^2
开关频率与CPU主频相关
所以,功耗公式为
教材习题
1.6 同一个指令集体系结构由两种不同实现。根据CPI不同,将指令分为A、B、C、D四类,P1的时钟频率是2.5GHz,CPI分别为1、2、3、3;P2的时钟评率是3GHz,CPI分别为2、2、2、2
一个程序有1x10E6条指令,四类指令比例分别为10%,20%,50%,20%
(1)每种实现的总CPI分别是?
(2)每种实现的时钟周期数为?
1 | 因为:CPI=cycles/IC |
1 | CPU时钟周期数 = 程序的指令数 x 每条指令的平均时钟周期数 |
1.7 性能公式与加速比
对同一个程序,编译器A产生1x10E9条指令,执行时间为1.1s;编译器B产生1.2x10E9条指令,执行时间为1.5s
(1)若处理器时钟周期长度为1ns,求两个编译器产生程序的CPI
1 | CPU time = IC * CPI * T |
(2)假设两个程序在不同处理器上运行,且执行时间相同,求:运行编译器A的处理器比运行B的快多少?
1 | CPUtime = IC * CPI / fs |
(3)有种新的编译器,只产生6x10E8条指令,CPI平均为1.1,求:这种新编译器相对于编译器A、B的加速比各多少?
1 | ICnew = 6*10E8 |
1.11.4 1.11.11 性能公式的思想方式
一台计算机运行SPEC基准测试程序用时750秒
(1)如果SPEC指令数增加10%,CPI增加5%,则执行时间变为原来的多少倍?
1 | CPU time = IC * CPI * T |
(2)指令数不变,如果要在CPI降低15%的情况下,让CPU时间减少20%,时钟频率应该降为原来的多少倍?
1 | CPU time = IC * CPI * T |
1.14 Amdahl定律
一个程序有50x10E6条浮点指令、110x10E6条整数指令、80x10E6条L/S指令和16x10E6条分支指令,4种指令的CPI分别是1、1、4、2,CPU时钟频率变为2GHz
(1)要让程序运行速度提高2倍,浮点指令的CPI应该变为多少
1 | CPU time = cycles * T |
(2)要让程序运行速度提高2倍,L/S指令的CPI应该变为多少
1 | CPU time = cycles * T |
(3)如果整数、浮点指令的CPI降低40%,L/S指令和分支指令的CPI减少30%,程序的执行时间改进多少?
1 | CPUtime 改进前 = cycles/f = 50x10E6*1 + 110x10E6*1 + 80x10E6*4 + 16x10E6*2 = 512*10E6 / 2*10E9 = 0.256s |
1.8 功耗
奔腾4主频为3.6GHz,工作电压为1.25V,平均静态功耗为10W,动态功耗90W;酷睿i5主频为3.4GHz,工作电压为0.9V,平均静态功耗为30W,动态功耗40W。
两个处理器的平均负载电容分别是?
1 | P = 1/2*CU^2 * f |
四川大学期末习题
1、下面哪种处理器不是采用RISC指令系统(D)
A. 华为麒麟处理器
B. 高通845 处理器
C. MIPS 处理器
D. Intel 处理器
2、下面关于CPI的说法,错误的是(A)
A. 多周期CPU比单周期CPU的CPI大,因此单周期CPU更快
B. 同一台机器中运行不同的程序CPI不一定相同
C. MIPS单周期CPU各种指令的CPI是相同的
D. MIPS多周期CPU访存指令CPI比R-type型指令CPI大
3、下列哪一项和CPU的运算速度关系不大(D)
A. CPU主频 B. MIPS C. CPI D. 主存频率
4、将指令从符号码翻译成二进制码的程序(A)
A. 汇编器 B. 编译器 C. 链接器 D. 加载器
5、同一个程序,在同一台计算机的CPU超频前和超频后运行,假设内存的访问速度不变,超频前和超频后CPI对比应该是(B)
注:CPU超频是指增大CPU的时钟频率
A. 超频前的CPI大
B. 超频后的CPI大
C. 一样大
D. 不确定
1 | 超频后,内存的访问速度不变,等待内存的时间长度相同,但是把时钟周期分的更小了,所以有了更多浪费掉的周期,所以引起了整个的CPI增大 |
6、某处理器执行某一段程序,该程序包含三类指令,其中运算指令120条,访存指令60条,分支指令20条,各类指令的CPI分别为5、10和2。请计算执行这段程序的平均CPI
1 | CPI = 总cycles / 总IC |
7、编译程序对一个应用在给定的处理器上的性能有极深的影响。假定一个程序,如果采用编译程序A,则动态指令数为1.0x10^9,执行时间为1.5s;如果采用编译程序B,则动态指令数为1.5x10^9,执行时间为2.1s。若该处理器的时钟周期为1ns,请分别求出每种编译程序下的平均CPI
1 | CPUtime = IC * CPI * T |
转自:B站翼云