《深入浅出计算机组成原理》学习笔记 Day1
文章目录
- 1. 学习计算机组成原理的意义
- 2. 性能的概念
- 3. 性能的提升途径
- 3.1 “堆硬件”
- 3.2 加速大概率事件
- 3.3 通过流水线提升性能
- 3.4 通过预测提升性能
1. 学习计算机组成原理的意义
理解计算机是怎么运作的,以及为什么要这么运作。
一方面,整个组成乃至体系结构,都是基于冯·诺依曼架构组成的软硬件一体的解决方案。另一方面,这里方方面面的设计和考虑,除了体系结构层面的抽象和通用性之外,“为什么”所要解决的事情,很多时候就是提升“性能”。
2. 性能的概念
衡量性能的公式:
T
c
p
u
=
n
×
C
P
I
×
C
l
o
c
k
C
y
c
l
e
T
i
m
e
T_{cpu} = n \times CPI \times Clock Cycle Time
Tcpu=n×CPI×ClockCycleTime
其中,
T
c
p
u
T_{cpu}
Tcpu:程序的CPU执行时间;
n
n
n :指令数;
C
P
I
CPI
CPI :每条指令的平均周期数(Cycles Per Instruction)。
这也就指出了提升性能的三种方式:
- 提升主频
- 优化CPU设计使得在单个时钟周期内可以执行更多指令
- 通过编译器来减少需要的指令数
3. 性能的提升途径
3.1 “堆硬件”
无论是简单地提升主频,还是增加更多的CPU核心数量,通过并行来提升性能,都会遇到相应的瓶颈。仅仅简单地通过这样“堆硬件”的方式,在今天已经不能很好地满足我们对于程序性能的期望了。
3.2 加速大概率事件
一个很好的例子。在深度学习流行的今天,整个计算过程中,99%都是向量和矩阵的计算。于是,工程师通过用GPU来替代CPU,大幅提升了深度学习的模型训练过程。本来一个CPU需要跑几小时甚至几天的程序,GPU只需要几分钟就好了。
3.3 通过流水线提升性能
我们把CPU指令执行的过程进行拆分,细化运行,这也是现代CPU在主频没有办法提升那么多的情况下,性能仍然可以提升的重要原因之一。
3.4 通过预测提升性能
通过预测下一步该干什么,而不是等上一步运行的结果,提前进行运算,也是让程序跑得更快一点的办法。一个典型的例子:当要循环访问数组的时候,凭经验,你也会猜到下一步我们会访问数组的下一项,也就是利用“程序的局部性原理”。