Fork me on GitHub

深入浅出计算机组成原理——入门篇(01-04)

全文内容主要来自对课程《深入浅出计算机组成原理》的学习笔记。

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,翻译成中文,其实就是《第一份草案》。现代计算机的发展就从这开始了。

  1. 包含算术逻辑单元(Arithmetic Logic Unit,ALU)和处理器寄存器(Processor Register)的处理器单元(Processing Unit),
  2. 包含指令寄存器(Instruction Register)和程序计数器(Program Counter)的控制器单元(Control Unit/CU),用来控制程序的流程,通常就是不同条件下的分支和跳转。
  3. 大容量的外部存储,磁带、硬盘。
  4. 各种输入和输出设备,

任何一台计算机的任何一个部件都可以归到运算器、控制器、存储器、输入设备和输出设备中。

图灵机与冯诺依曼机的概念区别

  • 图灵机是一种思想模型(计算机的基本理论基础),是一种有穷的、构造性的问题的问题求解思路,图灵认为凡是能用算法解决的问题也一定能用图灵机解决;
  • 冯诺依曼提出了“存储程序”的计算机设计思想,并“参照”图灵模型设计了历史上第一台电子计算机,即冯诺依曼机。

02 | 计算机组成原理学习路线

如下图所示,整个计算机组成原理,就是围绕着计算机是如何组织运作展开的。

计算机组成原理知识地图

计算机的基本组成-五大组件

  • 运算器
  • 控制器
  • 存储器
  • 输入设备
  • 输出设备

2个核心指标

  • 性能
  • 功耗

计算机的指令和计算

  • 指令执行的控制过程就是控制器来控制的。
  • 实现加法、乘法这些运算功能的 ALU (Arithmetic Logic Unit/ALU),也就是算术逻辑单元,就是运算器
  • 最后需要了解存储器的原理,例如 CPU 高速缓存、内存、SSD 硬盘和机械硬盘的工作原理。

入门书籍

  1. 《计算机是怎样跑起来的》
  2. 《程序是怎样跑起来的》
  3. Coursera 上的北京大学免费公开课《Computer Organization》
  4. 《计算机组成与设计:硬件 / 软件接口》,配套视频
  5. 《深入理解计算机系统》,配套视频
  6. 操作系统大神塔能鲍姆(Andrew S. Tanenbaum)的《计算机组成:结构化方法》
  7. 《计算机体系结构:量化研究方法》。

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
6
$ time 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

所以优化性能主要有:

  1. 降低时钟周期时间,就是计算机主频;
  2. 减少每条指令的平均时钟周期数 CPI;
  3. 减少指令数;

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,即并行提高性能,但不是所有计算任务都可以,需要满足:

  1. 计算本身可以拆分成独立并行的任务;
  2. 计算可分解,结果可以合并;
  3. 汇总的时候无法完全并行。

阿姆达尔定律(Amdahl’s Law): 优化后的执行时间 = 受优化影响的执行时间 / 加速倍数 + 不受影响的执行时间

在“摩尔定律”和“并行计算”之外,几个原则性的性能提升方法:

  1. 加速大概率事件
    例如:缓存机制;矩阵运算使用 GPU 替换 CPU。

  2. 通过流水线提高性能
    例如:串行改并行;大 sql 拆分为多个小 sql。

  3. 通过预测提高性能
    例如:预计算。


-------------本文结束感谢您的阅读-------------

本文标题:深入浅出计算机组成原理——入门篇(01-04)

文章作者:

原始链接:https://www.xiemingzhao.com/posts/computerOrgArc01to04.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。