1. 定义
流水线技术是一种使多条指令并行的实现技术。
注:完全执行一条指令一般都要经过几个过程(即流水线)。
2. 经典5级流水线
取指(Instruction Fetch)
将指令从存储器中读取出来的过程。Read Instruction from memory.
译码(Instruction Decode)
将存储器中取出的指令进行翻译的过程。Translate above Instruction.
经过译码之后, 得到指令需要的操作数寄存器索引, 使用此索引从通用寄存器中读出操作数。
执行(Instruction Execute)
对指令进行真正运算的过程。The process of performing an operation.
该阶段具体运算的硬件功能单元就是ALU。
访存(Memory Access)
存储器访问指令将数据从存储器中读出(或者写入存储器)的过程。
写回(Write-Back)
将指令执行的结果写回通用寄存器组的过程。
如果是普通运算指令,该结果来自于“执行”阶段计算的结果;
如果是存储器读指令,该结果来自于“访存”阶段从存储器中读取出来的数据。
3. 流水线技术的优势
提高了指令的吞吐率(即单位时间内执行的指令数量)。
注意:流水线技术并没有降低指令延迟(指令固有的执行时间)。
4. 流水线技术的加速比
在理想的条件下,并由大量指令的情况下,流水线的加速比≈流水线级数。
5. 其他相关概念
5.1 冒险(hazard)
指流水线过程中,产生停顿(或气泡)的行为。
结构冒险:同一时钟周期,多条指令使用同一个资源(寄存器,内存地址等)
数据冒险:一个步骤必须等待另一个步骤完成。
控制冒险:需要根据一条指令的结果做出决定(一般指分支跳转)。
5.2 提高指令级并行度的方法
5.2.1 增加流水线级数
5.2.2 多发射
通过增加流水线内部的功能部件,实现每周期发出多条命令。
分类:
静态多发射:在编译阶段,指令发射与否的判断由编译器完成。
动态多发射:在动态执行过程中,指令发射与否的判断由硬件完成。
相关概念:
超长指令字(VLIW):对于静态多发射处理器,同一周期发射出去的指令集合或发射指令包。
超标量(Super Scaler)处理器(动态多发射处理器):指一种采用高级流水线(动态调度流水线)的处理器。该处理器能在执行时选择指令,并在一个周期内执行一条以上的指令。
5.3 推测
一种非常重要的深度挖掘指令级并行的方法。
分类:
静态预测:在编译阶段,由编译器进行预测。
动态预测:在动态执行阶段,由硬件采取不同的算法(根据程序的历史执行路径信息)进行预测。
注:实现推测,要有相应的恢复机制来应对推测错误的情况。
5.4 动态调度流水线
定义:由硬件选择后续执行的指令,并对指令进行重排,避免流水线的停顿。
组成:取指和发射单元(负责取指、译码),多功能部件,提交单元。
相关概念:
保留站:功能部件前的缓冲区。用来存放指令的操作和所需操作数。
重排序缓冲:位于提交单元的缓冲区。保存指令执行结果的缓冲区。
5.5 乱序执行
用途:处理顺序执行产生的一些冒险。
场景:若顺序执行指令序列时,会产生数据冒险或结构冒险。
可以将位于后面不相关的指令,插入前面序列中提前执行,以避免发生冒险。
5.6 SIMD(Single Instruction Multiple Datas)
单指令多数据:相对于单指令单数据(SISD),几个执行部件同时访问内存,一次性读取所有的操作数。
注:NEON是ARM支持的一种128位SIMD扩展指令集。

1436

被折叠的 条评论
为什么被折叠?



