指令级并行

当指令之间不存在相关时,它们在流水线中是可以重叠起来并行执行的。这种指令序列中存在的潜在并行性称为指令级并行Instruction-Level Parallelism 简记为ILP

并行基本方法

技术解决目标
基本流水线调度解决RAW
循环展开解决控制相关
寄存器换名解决RAW、WRA
指令动态调度(记分牌和 Tomasulo 算法)解决各种数据相关
动态分支预测解决控制相关
前瞻(Speculation解决各种数据、控制相关
多指令流出(超标量和超长指令字)提高CPI

动态调度算法之一:记分牌

顺序流出 乱序执行


每一条指令均经过记分牌,并记录下各条指令间的数据相关信息

过程划分

  • 流出(Issue)
    解析指令,本指令所需的功能部件有空闲,并且其他正在执行的指令使用的目的寄存器与本指令不同。(解决了WAW)
  • 读操作数(Read Operand)
    一直等到不存在数据相关时,才读取操作数(解决RAW)
  • 执行(Execution)
    相当于流水线EX段
  • 写结果(Write Result)
    前面的某条指令还没有读取操作数或其中某个源操作数寄存器与本指令的目的寄存器相同不允许指令写结果(解决WAR)

如何记录数据相关信息?
功能部件状态表

  • Busy:指示功能部件是否工作
  • Op:功能部件当前执行的操作
  • Fi:目的寄存器编号
  • FjFk:源寄存器编号
  • QjQk:向RjRk中写结果的功能部件
  • RjRk:标示FjFk是否就绪,是否已经被使用

指令状态表
记录正在执行的各条指令已经进入哪一段

结果寄存器状态表
记录使用当前寄存器的功能部件
实例(Cycle 7)
mark

动态调度算法之二:Tomasulo算法

顺序流出 乱序执行

用Tomasulo算法的MIPS浮点单元基本结构

3个加法保留站、2个乘法保留站、4个寄存器 相当于构成了9个结果寄存器
6个取缓冲、3个存缓冲使用换名技术消除了数据的WAW、WAR
CDB作为Tomasulo算法的枢纽,一旦数据就绪被传送到CDB上,所有需要获得该数据的地方将同时得到数据

保留站的六个域

  • Op:对源操作数的操作
  • Qj,Qk:产生本条指令所需的保留站编号
  • Vj,Vk:源操作数值(与Qj,Qk不同时有效)
  • Busy:保留站是否被占用
    寄存器和存缓冲
  • Qi:结果要存入这个寄存器或缓冲的保留站编号
  • Busy:缓冲是否空闲
  • V:保存要存储数据值

实例(Cycle 5)
mark

Tomasulo算法的优点

  • 分布式硬件冲突检测
  • 利用寄存器换名,彻底消除WAW和WAR这两种名相关
  • 如果多个保留站等待同一个操作数,当操作数在CDB上广播时,他们可以同时所需的数据()可能产生竞争
Last modification:April 17th, 2020 at 11:06 pm
如果觉得我的文章对你有用,请随意赞赏