算是读书笔记吧
极客时间--深入浅出计算机组成原理
冯·诺依曼体系结构(存储程序计算机)
任何一台计算机的任何一个部件都可以归到运算器、控制器、存储器、输入设备和输出设备中,而所有的现代计算机也都是基于这个基础架构来设计开发的。
存储程序计算机
无论是“不可编程”还是“不可存储”,都会让使用计算机的效率大大下降。而这个对于效率的追求,也就是“存储程序计算机”的由来。
“可编程”计算机
程序在计算机硬件层面是“写死”的。
最常见的就是老式计算器,电路板设好了加减乘除,做不了任何计算逻辑固定之外的事情。“存储”计算机
典型的就是早年的“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 执行时间 = 指令数×每条指令的平均时钟周期数×时钟周期时间
如何提升性能(摩尔定律)
- 时钟周期时间
计算机主频,这个取决于计算机硬件。 - 每条指令的平均时钟周期数 CPI
一条指令到底需要多少 CPU Cycle。比如流水线技术、分支预测、数据冒险 - 指令数
代表执行我们的程序到底需要多少条指令、用哪些指令。
性能提升的5个基本途径
摩尔定律(主频)
响应时间并行计算(多核)
吞吐率
Amdahl定律流水线法
并发编程、异步编程、音视频播放器边播放边缓冲加速大概率事件
各种缓存(内存缓存、CDN缓存)预测法
小说的下一页预加载
电商大促的CDN预热