指令级并行
1.概念
1.1.指令级并行(ILP)有两种实现方法:
(1)依靠硬件来动态发现并实现并行; (2)依靠软件技术在编译时静态发现并行。
1.2.数据依赖与冒险
数据依赖(三种类型):数据依赖、名称依赖和控制依赖。
1.数据依赖:1)指令 i 生成的结果可能会被指令 j 用到。 2)指令 j 数据依赖于指令 k ,指令 k 数据依赖于指令 i 。
2.名称依赖:1)当指令 j 对指令 i 读取的寄存器或存储地址执行写操作时,就会在指令 i 和指令 j 之间发生反依赖。 2)当指令 i 和指令 j 对同一个寄存器或存储器地址进行写操作时,发生输出依赖。
3.数据冒险:只要存在名称依赖或者数据依赖,而且非常相近,以至于在执行期间的重叠能改变对应依赖中操作数的访问顺序,就会存在冒险。可能的数据冒险如下: 1)RAW(读后写) 2)WAW(写后写) 3)WAR(写后读)
4.控制依赖:控制依赖决定了指令 i 相对于分支指令的顺序,使指令 i 按正确的程序执行顺序执行,而且只会在应当执行时执行。
# 2.动态调度
简单流水线的一个主要限制是:如果一个指令停顿在流水线中,后续指令都不能执行。 在经典的五级流水线中,可在指令译码阶段(ID)检查结构冒险和数据冒险:当一个指令可以无冒险执行时,它就会从ID发射出去,并确认所有的数据冒险都已解决。 在动态调度流水线中,所有的指令都顺序经历发射阶段;但是,它们可能在第二阶段(读取操作数阶段)停顿或者相互旁路,从而进入乱序执行状态。记分板(scoreboarding)技术允许有足够资源且不存在数据依赖时乱序执行指令。 Tomasulo算法:通过对寄存器进行有效的动态重命名来处理反依赖和输出依赖。此外,还可以对算法进行扩展,用来进行推测。
3.以多发射和静态调度来利用ILP
多发射的目标就是允许在一个时钟周期内发射多条指令。多发射处理器主要有以下3类。 1)静态超标量处理器 2)VLIW(超长指令字)处理器 3)动态调度超变量处理器
标签:依赖,并行,笔记,指令,流水线,数据,冒险 From: https://www.cnblogs.com/lane-yang/p/17673931.html