《深入浅出计算机组成原理》笔记三

流水线停顿

如果后面执行的指令,会对前面执行的指令有数据层面的依赖关系,那最简单的办法就是等待前面的命令执行完。

动态分支预测

当遇到条件跳转的情况时,要等令执行完成,我们才能知道,是否执行下一条指令,还是跳转到另外一个内存地址,去取别的指令。可以提前猜测下一步会执行哪一条命令,然后预处理。

超标量

可以让 CPU 不仅在指令执行阶段是并行的,在取指令和指令译码的时候,也是并行的。通过超标量技术,可以使得你所使用的 CPU 的 IPC 超过 1。

多发射

同一个时间,可能会同时把多条指令发射到不同的译码器或者后续处理的流水线中去。

超线程技术

超线程的 CPU,其实是把一个物理层面 CPU 核心,“伪装”成两个逻辑层面的 CPU 核心。这个 CPU,会在硬件层面增加很多电路,使得我们可以在一个 CPU 核心内部,维护两个不同线程的指令的状态信息。比如,在一个物理 CPU 核心内部,会有双份的 PC 寄存器、指令寄存器乃至条件码寄存器。这样,这个 CPU 核心就可以维护两条并行的指令的状态。超线程的目的,是在一个线程 A 的指令,在流水线里停顿的时候,让另外一个线程去执行指令。因为这个时候,CPU 的译码器和 ALU 就空出来了,那么另外一个线程 B,就可以拿来干自己需要的事情。

复杂指令集(CISC)和精简指令集(RISC)

我们 80% 的时间都在用 20% 的简单指令,在 RISC 架构里面,CPU 选择把指令“精简”到 20% 的简单指令。而原先的复杂指令,则通过用简单指令组合起来来实现,让软件来实现硬件的功能。

GPU

芯片瘦身

没有分支条件,或者复杂的依赖关系,只留下取指令、指令译码、ALU 以及执行这些计算需要的寄存器和缓存。


多核并行和 SIMT

要执行的指令是一样的,只是同一个指令的数据有所不同而已,也就是在取指令和指令译码的阶段,取出的指令可以给到后面多个不同的 ALU 并行进行运算。这样,我们的一个 GPU 的核里,就可以放下更多的 ALU,同时进行更多的并行运算了。


GPU 里的“超线程”

一个 Core 里面更多的执行上下文的数量。


你可能感兴趣的:(《深入浅出计算机组成原理》笔记三)