第3章 硬件极其行为

3.1 Overview

3.1.1 CPU流水线

在20世纪80年代,典型的微处理器完整处理一条指令要经过,获取指令,解码指令,最后执行指令,需要花费至少三个时钟周期完成一条指令。到二十世纪90年代时,通过引入深度流水线技术控制CPU内部的指令流,CPU可以同时执行多条指令。流水线技术可以极大的提升CPU性能。
为了获取CPU的高性能,流水线技术需要具有强大的控制流的预测能力。例如,矩阵和向量计算这种计算就可以用循环实现,CPU就可以正确的预测出每次迭代循环计算中所需要的带宽,这样就可以保证流水线和CPU能够无停顿的全速运行。
然而带宽预测并不是那么容易。例如,如果有多个循环结构,每个循环都随机执行较少的次数;在比如在面向对象编程中,一个基类对象可以引用不同的其他子类对象,这些子类对象实现不同的成员函数。在这些例子中,CPU很难或者基本不可能预测出下一步计算所需要的带宽。所以处理器要么拖延执行等待足够长的时间,要么进行推测执行。虽然对于可预测的控制流来说,推测执行非常有效,但是对于而非查找这种不可预测分支问题,推测执行经常无法正确工作。错误的推测执行托慢CPU执行速度,因为CPU必须丢弃下面分支所对应的推测执行的指令,这种现象叫做流水线冲刷。如果流水线冲刷经常发生,其将会影响CPU的执行效率。流水线冲刷并不是现代CPU唯一的危险障碍,下面介绍的内存引用也是一种危险障碍。

3.1.2 内存引用

3.1.3 原子操作

3.1.4 内存屏障

3.1.5 缓存丢失

3.1.6 IO操作

3.2 Overheads

3.3 Hardware Free Lunch?

发布了137 篇原创文章 · 获赞 91 · 访问量 67万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章