首页 > 解决方案 > Reordering指令如何解决数据依赖性?

问题描述

我最近遇到了一个问题。我观看了一个关于数据依赖的视频。并且讲师说通过重新排序指令可以解决数据依赖性问题。写后读风险示例:

A1 <- B1 + C1 
A2 <- A1 + B2 

在这种情况下,第二条指令有两个停顿。通过重新排序说明:

A2 <- A1 + B2 
A1 <- B1 + C1 

我们摆脱了写后读的危险。技术上是对的。但是,我想知道第二种方法在逻辑上是不是错误的并且会引入错误的结果?

如果我错了,请纠正我,因为我是新手。

标签: cpu-architecture

解决方案


你是对的,这会改变结果并且不是有效的优化,除非你有其他信息可以保证安全。(即 A 已经等于 B1 + C1,在这种情况下,您应该优化它而不是重新排序)。

(我假设“A”是寄存器,A1 / A2 是用于跟踪值生命周期的静态单一分配方式的序列号。即 A2 是 A 具有的第二个值。)

希望您正在观看的视频并未暗示这是解决第一种情况的问题的方法,只是这是一个没有问题的不同示例。


推荐阅读