蒙珣的博客

活好当下,做好今天该做的事情。

0%

CH1 计算机概要与技术

在读完本书后,我们能够理解以下问题:

  • 用C或Java等高级语言编写的程序如何翻译成硬件之间的语言?硬件如何执行程序?

    领会这些概念是理解软硬件两者如何影响程序性能的基础

  • 什么是软硬件之间的接口,以及软件如何指导硬件完成其功能?

    这些概念对于许多软件的编写十分重要

  • 哪些因素决定了程序的性能?程序员如何才能改进程序性能?

    从本书中我们将知道,程序性能取决于原始程序、将该程序转换为计算机语言的软件以及执行该程序的硬件的有效性

  • 什么技术可供硬件设计者用于改进性能?

    本书将介绍现代计算机设计的基本概念。有感兴趣的读者可深入阅读另一本进阶教材《Computer Architecture: A Quantitative Approach》

  • 硬件设计者可使用那些技术提高能效?什么技术可供程序员提高或降低能效?

  • 为什么串行处理近来发展为并行处理?这种发展带来的结果是什么?

    本书给出了解释,并介绍了当今支持并行处理的硬件机制,全面评述了新一代的多核微处理器(multicore microprocessor)

  • 自1951年的第一台商用计算机开始,计算机架构师们提出的哪些伟大思想构成了计算机的基础?

点击下载 CH1 计算机概要与设计.xmind

第一部分 计算机的分类

计算机的分类

传统上,按照应用,计算机可分为:

  • 个人计算机(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个伟大思想

8大伟大思想

2个设计原则

1、摩尔定律

单芯片上的集成度(单位面积硅片能容纳的晶体管数量)每18个月翻一番

提出于1965年

芯片设计要依据设计 完成 时的工艺水平

2、抽象简化设计

省略低层次的细节,提供简化的模型

4个提高性能的方法

3、加速大概率事件

一台计算机绝大部分时间用来打游戏,改进游戏新能还是其他性能更能提高整体性能?

定量分析:Amdahl定律

改进后的执行时间 = 改进影响的执行时间 / 改进量 + 改进不影响的执行时间
t改进 = t相关/S + t无关

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的两大部件:运算器(数据通路)、控制器


存储器层次结构

存储器层次结构


指令集体系结构

指令集体系结构


集成电路制造

集成电路制造.png


复习题

复习题是用来碎碎念回忆复习的,不是用来写的!

打*的问题在考试中不太重要或者比较复杂,请酌情跳过

  1. 传统上计算机分为哪三类?后PC时代有哪两类计算机?
  2. KB、MB、GB之上有哪些存储容量单位?
  3. *计算机设计的八大伟大思想是什么?
  4. Amdahl定律公式是什么?
  5. 高级语言经过什么过程变成汇编语言?汇编语言又经过什么变成机器语言?
  6. 冯·诺依曼结构由哪五大基本部件组成?CPU主要有哪两大部件?还有少量的哪个部件?
  7. 存储器层次中,最快贵小的、其次的、最廉价的是什么?分别采用什么技术?
  8. Intel和苹果的处理器架构不同,是什么东西不同?
  9. 成品率、芯片面积、产量如何影响集成电路(IC)的自造成本?
  • 传统意义上计算机分为PC、服务器、嵌入式计算机。后PC时代分为个人移动设备(PMD)、仓储规模计算机(WSC)
  • TB、PB、EB、ZB、YB
  • 摩尔定律、抽象简化、加速大概率事件、并行提高、流水线提高性能、预测提高性能、存储器层次、冗余提高可靠性
  • 改进后的执行时间 = 改进影响的执行时间 / 改进量 + 改进不影响的执行时间
  • 高级语言经过编译变成汇编语言,汇编语言经过汇编转换为机器语言
  • 控制器、存储器、运算器、输入\输出设备。CPU主要两大部件为控制器和运算器,还有少量的存储器
  • 最快最贵最小的是高速缓存cache采用SRAM,其次是内存采用DRAM,辅存采用磁盘或闪存
  • Intel和苹果的处理器架构不同,是因为指令集体系结构不同即架构不同
  • 成品率越高、产量越高、芯片面积越小,芯片的制造成本越低

第四部分 性能与功耗

性能与功耗.png

评价性能的指标

个人计算机更看重响应时间(又称执行时间):任务从开始到完成的时间

服务器更看重吞吐率:单位时间内完成的人物数量

课程主要讨论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倍时钟周期数。那么计算机设计者应该将时钟频率提高到多少?

CPU频率题.png

  • CPI:每条指令的时钟周期数,表示执行某个程序或程序片断时每条指令所需的时钟周期平均数。

CPU时钟周期数 = 程序的指令数 x 每条指令的平均时钟周期数

cycles = IC x CPI

指令性能公式题.png

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
2
3
因为:CPI=cycles/IC
P1 CPI = (1*10E6*0.1+2*10E6*0.2+3*10E6*0.5+3*10E6*0.2)/1*10E6 = 2.6
P2 CPI = (2*10E6*0.1+2*10E6*0.2+2*10E6*0.5+2*10E6*0.2)/1*10E6 = 2
1
2
3
4
CPU时钟周期数 = 程序的指令数 x 每条指令的平均时钟周期数
即:cycles = IC x CPI
P1 cycles = 1x10E6 * 2.6
P2 cycles = 1x10E6 * 2

1.7 性能公式与加速比

对同一个程序,编译器A产生1x10E9条指令,执行时间为1.1s;编译器B产生1.2x10E9条指令,执行时间为1.5s

(1)若处理器时钟周期长度为1ns,求两个编译器产生程序的CPI

1
2
3
4
5
6
CPU time = IC * CPI * T

1.1s = 1*10E9 * A CPI * 1*10^-9
即 A CPI = 1.1
1.5s = 1*10E9 * B CPI * 1*10^-9
即 B CPI = 1.25

(2)假设两个程序在不同处理器上运行,且执行时间相同,求:运行编译器A的处理器比运行B的快多少?

1
2
3
4
5
6
7
CPUtime = IC * CPI / fs

(ICa * CPIa)/fa = (ICb * CPIb)/fb

fb/fa = (ICb * CPIb) / (ICa * CPIa) = (1.25 * 1.2*10E9)/(1.1 * 1*10E9s) = 1.37

即运行编译器B比A快1.37

(3)有种新的编译器,只产生6x10E8条指令,CPI平均为1.1,求:这种新编译器相对于编译器A、B的加速比各多少?

1
2
3
4
5
6
7
8
9
10
11
12
ICnew = 6*10E8
CPInew = 1.1
cycles new = 6.6*10E8

S spead up = t 改进前/t 改进后
Ta = ICa*CPIa / ICnew*CPInew
= 1*10E9*1.1 / 6.6*10E8
= 1.67

Tb = ICb*CPIb / ICnew*CPInew
= 1.2*10E9*1.25 / 6.6*10E8
= 2.27

1.11.4 1.11.11 性能公式的思想方式

一台计算机运行SPEC基准测试程序用时750秒

(1)如果SPEC指令数增加10%,CPI增加5%,则执行时间变为原来的多少倍?

1
2
3
CPU time = IC * CPI * T
= 1.1 IC * 1.05 CPI * T
= 1.115

(2)指令数不变,如果要在CPI降低15%的情况下,让CPU时间减少20%,时钟频率应该降为原来的多少倍?

1
2
3
CPU time = IC * CPI * T
0.8 CPU time = IC * 0.85 CPI * T
T = 0.8/0.85 = 16/17

1.14 Amdahl定律

一个程序有50x10E6条浮点指令、110x10E6条整数指令、80x10E6条L/S指令和16x10E6条分支指令,4种指令的CPI分别是1、1、4、2,CPU时钟频率变为2GHz

(1)要让程序运行速度提高2倍,浮点指令的CPI应该变为多少

1
2
3
4
CPU time = cycles * T
即 50x10E6*1 + 110x10E6*1 + 80x10E6*4 + 16x10E6*2 = 512*10E6
1/2 cycles = 256*10E6,只改变浮点指令CPI,其他指令cycles=462*10E6
所以,不能通过改变浮点指令CPI,使程序运行速度提高2倍

(2)要让程序运行速度提高2倍,L/S指令的CPI应该变为多少

1
2
3
4
5
6
CPU time = cycles * T
即 50x10E6*1 + 110x10E6*1 + 80x10E6*4 + 16x10E6*2 = 512*10E6
1/2 cycles = 256*10E6,只改变L/S指令的CPI,其他指令cycles=320*10E6
320*10E6 - 1/2(512*10E6) = 64*10E6
(80*10E6 * 4) / (64*10E6) = 5
5/4 = 0.8

(3)如果整数、浮点指令的CPI降低40%,L/S指令和分支指令的CPI减少30%,程序的执行时间改进多少?

1
2
3
4
CPUtime 改进前 = cycles/f = 50x10E6*1 + 110x10E6*1 + 80x10E6*4 + 16x10E6*2 = 512*10E6 / 2*10E9 = 0.256s
CPUtime 改进后 = cycles/f = 50x10E6*0.6 + 110x10E6*0.6 + 80x10E6*2.8 + 16x10E6*1.4 = 342.4*10E6 / 2*10E9 = 0.171s
0.256 - 0.171 = 0.085s
程序改进0.085秒

1.8 功耗

奔腾4主频为3.6GHz,工作电压为1.25V,平均静态功耗为10W,动态功耗90W;酷睿i5主频为3.4GHz,工作电压为0.9V,平均静态功耗为30W,动态功耗40W。

两个处理器的平均负载电容分别是?

1
2
3
4
5
6
7
P = 1/2*CU^2 * f

90w = 1/2 * C * 1.25^2 * 3.6*10E9
即奔腾4的负载电容为:3.2*10^-8(F)

40w = 1/2 * C * 0.9^2 * 3.4*10E9
即酷睿i5的负载电容为:2.9*10^-8(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
2
3
CPI = 总cycles / 总IC 
= (120\*5+60\*10+20*2) / (120+60+20)
= 6.2

7、编译程序对一个应用在给定的处理器上的性能有极深的影响。假定一个程序,如果采用编译程序A,则动态指令数为1.0x10^9,执行时间为1.5s;如果采用编译程序B,则动态指令数为1.5x10^9,执行时间为2.1s。若该处理器的时钟周期为1ns,请分别求出每种编译程序下的平均CPI

1
2
3
4
5
6
7
CPUtime = IC * CPI * T
CPI A = CPUtime / IC * T
= 1.5 / 1*10^9 * 1*10^-9
= 1.5
CPI B = CPUtime / IC * T
= 2.1 / 1.5*10^9 * 1*10^-9
= 1.4

转自:B站翼云