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