cpu-architecture - Reordering指令如何解决数据依赖性?
问题描述
我最近遇到了一个问题。我观看了一个关于数据依赖的视频。并且讲师说通过重新排序指令可以解决数据依赖性问题。写后读风险示例:
A1 <- B1 + C1
A2 <- A1 + B2
在这种情况下,第二条指令有两个停顿。通过重新排序说明:
A2 <- A1 + B2
A1 <- B1 + C1
我们摆脱了写后读的危险。技术上是对的。但是,我想知道第二种方法在逻辑上是不是错误的并且会引入错误的结果?
如果我错了,请纠正我,因为我是新手。
解决方案
你是对的,这会改变结果并且不是有效的优化,除非你有其他信息可以保证安全。(即 A 已经等于 B1 + C1,在这种情况下,您应该优化它而不是重新排序)。
(我假设“A”是寄存器,A1 / A2 是用于跟踪值生命周期的静态单一分配方式的序列号。即 A2 是 A 具有的第二个值。)
希望您正在观看的视频并未暗示这是解决第一种情况的问题的方法,只是这是一个没有问题的不同示例。
推荐阅读
- scala - 如何使用 Scala 2.11.8 在 Spark REPL 中启用部分统一?
- sql - 语法错误:GROUP BY 子句不能包含聚合或窗口函数
- typescript - 确保接口的类型 T 是实现它的类
- react-native - React Native - 为 useSelector 设置一个简单的变量
- python - 给定 python 中的天、月和小时列表,如何找到最小值?
- ios - 自 Xcode 11.4 以来的状态栏样式问题
- flutter - 如何在 CurvedNavigationBar 上刷新图标颜色
- vue.js - 转到定义不适用于我的项目(vue 和 sass 文件)[visual-studio-code]
- python - 如何将基于索引的公式分配给 sympy 上张量的每个索引位置
- r - r-ggplot2 将图例分为 2 列:geom_sf