全文内容主要来自对课程《深入浅出计算机组成原理》的学习笔记。
01 | 冯·诺依曼体系结构
计算机的基本硬件组成
三大件:CPU、内存和主板。
CPU
:最重要的核心配件,中央处理器(Central Processing Unit).内存
(Memory):存放程序和数据要被 CPU 读取和计算完之后,写回到内存.主板
(Motherboard):主板的芯片组(Chipset)和总线(Bus)解决了 CPU 和内存之间如何通信的问题。
总线速度(Bus Speed)决定了数据能传输得多快。
输入/输出(I/O)设备
:键盘、鼠标,显示器等;硬盘
:让各种数据才能持久地保存下来。显卡(Graphics Card)
:是另一个“处理器”,也就是 GPU(Graphics Processing Unit,图形处理器)。
冯·诺依曼体系结构
手机制造商们选择把 CPU、内存、网络通信,乃至摄像头芯片,都封装到一个芯片,然后再嵌入到手机主板上。这种方式叫 SoC
,也就是 System on a Chip
(系统芯片)。
实际上都遵从冯·诺依曼体系结构(Von Neumann architecture),也叫存储程序计算机
。两个概念: 一个是“可编程”计算机,一个是“存储”计算机。
基于当时在秘密开发的 EDVAC 写了一篇报告《First Draft of a Report on the EDVAC》,描述了他心目中的一台计算机应该长什么样。这篇报告在历史上有个很特殊的简称,叫 First Draft
,翻译成中文,其实就是《第一份草案》。现代计算机的发展就从这开始了。
- 包含算术逻辑单元(Arithmetic Logic Unit,ALU)和处理器寄存器(Processor Register)的处理器单元(Processing Unit),
- 包含指令寄存器(Instruction Register)和程序计数器(Program Counter)的控制器单元(Control Unit/CU),用来控制程序的流程,通常就是不同条件下的分支和跳转。
- 大容量的外部存储,磁带、硬盘。
- 各种输入和输出设备,
任何一台计算机的任何一个部件都可以归到运算器、控制器、存储器、输入设备和输出设备中。
图灵机与冯诺依曼机的概念区别:
- 图灵机是一种思想模型(计算机的基本理论基础),是一种有穷的、构造性的问题的问题求解思路,图灵认为凡是能用算法解决的问题也一定能用图灵机解决;
- 冯诺依曼提出了“存储程序”的计算机设计思想,并“参照”图灵模型设计了历史上第一台电子计算机,即冯诺依曼机。
02 | 计算机组成原理学习路线
如下图所示,整个计算机组成原理,就是围绕着计算机是如何组织运作展开的。
计算机组成原理知识地图
计算机的基本组成-五大组件
- 运算器
- 控制器
- 存储器
- 输入设备
- 输出设备
2个核心指标
- 性能
- 功耗
计算机的指令和计算
- 指令执行的控制过程就是
控制器
来控制的。 - 实现加法、乘法这些运算功能的
ALU
(Arithmetic Logic Unit/ALU),也就是算术逻辑单元,就是运算器
。 - 最后需要了解
存储器
的原理,例如 CPU 高速缓存、内存、SSD 硬盘和机械硬盘的工作原理。
入门书籍
03 | CPU主频和“性能”
性能=时间的倒数
性能的衡量标准(2个):
响应时间
(Response time)或者叫执行时间(Execution time)吞吐率
(Throughput)或者带宽(Bandwidth)
一般定义:性能 = 1/响应时间
计算机的计时单位:CPU 时钟
要想准确统计某个程序运行时间来对比实际性能,我们得把cpu在程序间切换和磁盘取数等时间刨除掉。
Linux的time
命令为例,有3种time:
real time
:程序整个运行花掉的自然时间;user time
:用户态运行指令的 cpu 时间;sys time
: 操作系统内核里运行指令的 cpu 时间。
程序实际花费的 CPU 执行时间(CPU Time),就是 user time 加上 sys time。
如下面case,实际上只有0.031+0.016=0.047s是真正用来运行程序的。
注意:如果在多个cpu上测试,user time 和 sys time 是它们的和,大概率会 realtime < user time + sys time。1
2
3
4
5
6time seq 1000000 | wc -l
1000000
real 0m0.101s
user 0m0.031s
sys 0m0.016s
程序的 CPU 执行时间 =CPU 时钟周期数×时钟周期时间
时钟周期时间(Clock Cycle)
:CPU内部有晶体振荡器(Oscillator Crystal),简称为晶振,其每一次“滴答”就是时钟周期时间。
电脑的主频(Frequency/Clock Rate),例如2.8GHz就是在1s内执行的简单指令的数量是 2.8G 条。那么该cpu的始终周期时间就是 1/2.8G 。(1G=10亿)
cpu 的超频就是时钟周期时间调快了,但功耗大散热压力大,容易崩溃。
程序的 CPU 执行时间 =CPU 时钟周期数×时钟周期时间
提升cpu性能的最简单方案就是提升主频,从而使得时钟周期时间变小。
CPU 时钟周期数=指令数×每条指令的平均时钟周期数(Cycles Per Instruction,简称 CPI)。
程序的 CPU 执行时间 = 指令数×CPI×Clock Cycle Time
所以优化性能主要有:
- 降低时钟周期时间,就是计算机主频;
- 减少每条指令的平均时钟周期数 CPI;
- 减少指令数;
04 | 提升“性能”
程序的 CPU 执行时间 = 指令数×CPI×Clock Cycle Time
简单看就3条路:指令数、CPI 以及 CPU 主频。
功耗:CPU 的极限
CPU的主频变化,在奔腾4时代进入瓶颈期。高频的cpu实际性能很低。原因就是功耗。
为了性能,CPU 里,要么增加晶体管密度,要么提升主频(晶体管开关更快),但这2项操作都会增加功耗。
功耗 ~= 1/2 ×负载电容×电压的平方×开关频率×晶体管数量
根据公式,为了降低功耗,降低电压是一个办法。
从 5MHz 主频的 8086 到 5GHz 主频的 Intel i9,CPU 的电压已经从 5V 左右下降到了 1V 左右。
阿姆达尔定律
- 从奔腾 4 开始,通过提升主频比较“难”去实现性能提升。
- 多核 CPU,通过提升“吞吐率”也可以提升性能。
多核CPU,即并行提高性能,但不是所有计算任务都可以,需要满足:
- 计算本身可以拆分成独立并行的任务;
- 计算可分解,结果可以合并;
- 汇总的时候无法完全并行。
阿姆达尔定律(Amdahl’s Law): 优化后的执行时间 = 受优化影响的执行时间 / 加速倍数 + 不受影响的执行时间
在“摩尔定律”和“并行计算”之外,几个原则性的性能提升方法:
加速大概率事件
例如:缓存机制;矩阵运算使用 GPU 替换 CPU。通过流水线提高性能
例如:串行改并行;大 sql 拆分为多个小 sql。通过预测提高性能
例如:预计算。