对于内存访问,数据依赖项包括RAW、WAW和WAR。注意:
1.内存数据依赖性仅存在于对同一内存地址的访问;对于对不同地址的内存访问,可以安全地乱序load和store。
2.在MIPS 5 stage pipeline 中,所有内存访问都在MEM阶段执行,因此这些数据依赖性不会发生在MIPS 5stage pipeline 中。在本次讨论中,我们将重点关注CPU乱序调度中的数据依赖。
RAW数据依赖性
示例如下所示。R1中的值store在某个内存地址中,稍后R2从相同的内存地址load。
Mem[Addr] <- R1(store)
R2 < - Mem[Addr](load)
如果允许store和load乱序执行,则load可能会获得一个旧的值。
WAW数据依赖性
示例如下所示。R1中的值store在某些内存地址中,稍后R2store在同一内存地址中。
Mem[Addr] < - R1(store)
Mem[Addr] <- R2(store)
如果允许两个store都乱序执行,则在两个指令完成后,内存地址可能会存储R1而不是R2的值。
WAR数据依赖性
示例如下所示。R1中的值从某个内存地址load,稍后R2 store到相同的内存地址。
R1 <- Mem[Addr](load)
Mem[Addr] <- R2(store)
如果允许load和store 乱序执行,则load可能会获得更新后的值。
总结
为了确定是否可以执行load,我们应该检查相同内存地址load之前的所有未完成的load和store。
同样,store必须等待,直到没有未完成的相同地址的load或较早的store。