CSAPP 2020-11-20
此文章的 撰写时间 可能有误
又到了开心的周末!
CSAPP Today:
Amdahl’s law
定律: 设一个操作原来需要 的时间执行, 现在我们对其 的部分(即 这部分进行 的优化(原来这部分 时间可以执行完, 现在加速到了 ), 则- 没有加速的部分所需时间:
- 加速的部分所需时间:
- 没有加速的部分所需时间:
所以总体加速后的时间为
所以加速比 就是常见的表示方法是用算出的加速比后加上一个”
“,我们对 的部分进行优化, 这部分执行时间到了原来的 , 则 ,带入公式得出 , 则加速比就是 , 读做”1.67倍”.- 当
趋向于 时, 这部分时间可以忽略不计, 于是就有 即使 的系统可以加速到可以忽略时间的程度, 总体加速比也只有 , 这体现了amdahl定律的一个重要思想: > 只有提升了系统的大部分, 才能更好的提升整个系统
待更新, 先吃个饭
并行/并发
- 并发是指同时处理多个活动
- 并行是指通过并发来加速系统
- 线程级并发
- 最初的系统并不是完全意义上的同时操作, 而是反复切换上下文(
反 复 横 跳上一篇有说上下文, 主要是指当前进程的主存/寄存器文件), 后来多核和超线程出现才有了真正的并发 - 多核是指把多个CPU搞到一个集成电路板上,
每个CPU叫一个核心(core) 比如我的dell-inspiron 5590是4核心,
就是四个倒霉鬼被焊在电路板上了 (逃, 据工厂主
资本家说未来他们可以焊接几百的核心到一块板子上 - 超线程指的是一个核心执行多个线程, 主要也是线程切换实现的, 但是比普通的CPU横跳地更科学, 所以速度也更快, 比如如果这个线程需要一些时间加载一个数据, 那我就切走了 你自己玩, 我去干别的
- 这就很好解释了为什么我的PC叫”四核心八线程”, 表示有四个核心,
每个核心是一个可以同时执行两个线程(
跳板)的超线程核心 - 现代CPU大多数都是多核多线程核心,
一般他们的结构都是每个核心分别有一个寄存器,
两个L1高速缓存(详见上一篇)和两个L1共用的L2高速缓存,
然后总体上有一个所有核心共用的高速缓存L3, 然后接到总线和主存,
其中每个核心中的两个L1高速缓存分别是数据和指令缓存.
所以4核心8线程的CPU一般来讲有
个高速缓存和 个寄存器
- 最初的系统并不是完全意义上的同时操作, 而是反复切换上下文(
- 指令级并发
- 指同时执行多个指令, 这是个比较nb的概念, 之前可能一个指令执行很多个(3~10)时钟周期, 现在通过一个叫”流水线”的东西实现指令级并发, 可以一个时钟周期内执行上百个指令
- 像上面那样,
一个时钟周期可以处理不止一个指令叫超标量,
大多数PC的CPU都支持这个
不会吧不会吧不会都0202年了还有人的电脑不支持超标量吧
- 单指令多数据
- 比如处理单精度浮点数(float)加法是一个指令, 这叫单指令
- 同时处理8对float加法, 这叫多数据
- 这是同时执行的, 也叫SIMD, 不知道具体叫什么, 我猜
- 有时候cpu会对一些程序自动处理SIMD, 但更好的办法是编译器来解决这些, 比如GCC就支持向量变量
- 线程级并发
为什么我用中文输入法打出来cpu
第一个是川普
啊