深入浅出计算机组成原理--概述

算是读书笔记吧

极客时间--深入浅出计算机组成原理


冯·诺依曼体系结构(存储程序计算机)

任何一台计算机的任何一个部件都可以归到运算器、控制器、存储器、输入设备和输出设备中,而所有的现代计算机也都是基于这个基础架构来设计开发的。

存储程序计算机

无论是“不可编程”还是“不可存储”,都会让使用计算机的效率大大下降。而这个对于效率的追求,也就是“存储程序计算机”的由来。

  • “可编程”计算机
    程序在计算机硬件层面是“写死”的。
    最常见的就是老式计算器,电路板设好了加减乘除,做不了任何计算逻辑固定之外的事情。

  • “存储”计算机
    典型的就是早年的“Plugboard”这样的插线板式的计算机。整个计算机就是一个巨大的插线板,通过在板子上不同的插头或者接口的位置插入线路,来实现不同的功能。

五大组成部分

  • 运算器

完成各种算术和逻辑运算

包含算术逻辑单元(Arithmetic Logic Unit,ALU)和处理器寄存器(Processor Register)的处理器单元(Processing Unit)。因为它能够完成各种数据的处理或者计算工作,因此也有人把这个叫作数据通路(Datapath)或者运算器。

  • 控制器

用来控制程序的流程,通常就是不同条件下的分支和跳转

包含指令寄存器(Instruction Register)和程序计数器(Program Counter)的控制器单元(Control Unit/CU)。

在现在的计算机里,上面的算术逻辑单元和这里的控制器单元,共同组成了我们说的 CPU。

  • 存储器

存储数据(Data)和指令(Instruction)

主要是内存,以及更大容量的外部存储。
在过去,可能是磁带、磁鼓这样的设备,现在通常就是硬盘。

  • 输入设备和输出设备

个人电脑的鼠标键盘是输入设备,显示器是输出设备。我们用的智能手机,触摸屏既是输入设备,又是输出设备。而跑在各种云上的服务器,则是通过网络来进行输入和输出。这个时候,网卡既是输入设备又是输出设备。

所有的计算机程序,也都可以抽象为从输入设备读取输入信息,通过运算器和控制器来执行存储在存储器里的程序,最终把结果输出到输出设备中。


计算机的性能

  • 响应时间(Response time)

也叫执行时间(Execution time)。指的就是,我们执行一个程序,到底需要花多少时间。
花的时间越少,自然性能就越好。

  • 吞吐率

也叫带宽(Bandwidth)。指我们在一定的时间范围内,到底能处理多少事情。
这里的“事情”,在计算机里就是处理的数据或者执行的程序指令。

  • 性能
    我们一般把性能,定义成响应时间的倒数,也就是:性能 = 1/ 响应时间

  • 跑分软件

而在业界,各大 CPU 和服务器厂商组织了一个叫作 SPEC(Standard Performance Evaluation Corporation)的第三方机构,专门用来指定各种“跑分”的规则。

SPEC 提供的 CPU 基准测试程序,就好像 CPU 届的“高考”,通过数十个不同的计算程序,对于 CPU 的性能给出一个最终评分。这些程序丰富多彩,有编译器、解释器、视频压缩、人工智能国际象棋等等,涵盖了方方面面的应用场景。


主频

print出来的时间差,不能代表真实的性能

这个时间叫Wall Clock Time 或者 Elapsed Time。就是在运行程序期间,挂在墙上的钟走掉的时间。

他受到很多条件的影响:程序之间进行切换、IO读取数据、降频运行等等。

主频

我们 CPU 的一个“钟表”能够识别出来的最小的时间间隔

以2.8GHz的主频为例:CPU 在 1 秒时间内,晶振2.8G次,可以执行的简单指令的数量就是 2.8G 条。

  • 晶体振荡器(Oscillator Crystal)
    CPU 内部,和我们平时戴的电子石英表类似,简称为晶振。
    我们的 CPU,是按照这个“时钟”提示的时间来进行自己的操作。
    主频就是一秒钟内晶振滴答的次数。
  • 超频

调高CPU的主频,以获得更高的性能

程序的 CPU 执行时间

一个程序,真正在CPU中运行的标准化时间。

程序的 CPU 执行时间 =CPU 时钟周期数×CPU 时钟周期时间

  • CPU 时钟周期时间

等于每次晶振的时间也就是1/主频。

  • CPU 时钟周期数

测试程序需要执行多少个CPU 执行时间。

比如需要执行10条简单指令的测试程序,他的时钟周期数就是10。
但是可能有的复杂指令一个时钟周期数搞不定。

所以我们可以进一步拆分
把CPU 时钟周期数进一步量化成:

指令数×每条指令的平均时钟周期数(Cycles Per Instruction,简称 CPI)

于是:

程序的 CPU 执行时间 = CPU 时钟周期数×时钟周期时间 就变为
程序的 CPU 执行时间 = 指令数×每条指令的平均时钟周期数×时钟周期时间

如何提升性能(摩尔定律)

  1. 时钟周期时间
    计算机主频,这个取决于计算机硬件。
  2. 每条指令的平均时钟周期数 CPI
    一条指令到底需要多少 CPU Cycle。比如流水线技术、分支预测、数据冒险
  3. 指令数
    代表执行我们的程序到底需要多少条指令、用哪些指令。

性能提升的5个基本途径

  1. 摩尔定律(主频)
    响应时间

  2. 并行计算(多核)
    吞吐率
    Amdahl定律

  3. 流水线法
    并发编程、异步编程、音视频播放器边播放边缓冲

  4. 加速大概率事件
    各种缓存(内存缓存、CDN缓存)

  5. 预测法
    小说的下一页预加载
    电商大促的CDN预热