数据依赖与控制依赖的区别 [英] Difference between data dependence and control dependence

查看:0
本文介绍了数据依赖与控制依赖的区别的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我很难理解数据依赖和控件依赖之间的区别。

我看到的一个例子是:

数据依赖例如,指令使用另一条指令创建的数据

控制相关性例如,指令等待更新的注册表进行比较

我很难理解的是,例如在BEQ中,我等待寄存器更新,但我也依赖他的数据。

所以我不知道如何区分它们之间的区别。

推荐答案

指令等待更新注册表进行比较是对控制相关性的错误描述,难怪

条件分支指令本身对其输入寄存器有数据依赖关系,然后才能检查分支条件。

分支之后的指令对分支具有控制依赖关系。前端需要根据分支是否被采用来知道提取/解码哪些指令。(或对于间接分支,目标地址是什么)。

分支预测所做的猜测稍后可能会被发现是错误的。(当分支指令实际执行并检查预测时)。

在简单(标量)顺序流水线中,相关指令不可能在分支指令到达EXEC阶段之前到达执行阶段。发现分支预测错误并从中恢复只是意味着重新引导前端从正确的地址获取,丢弃已获取(并解码)的错误路径中的指令。

但在无序的执行CPU中可能会发生这种情况。特别是如果分支的输入是长依赖链的一部分,但具有控制依赖关系的指令没有数据依赖关系。(即它们是独立的工作,乱序的后端可以投机性地启动它们。)

分支预测+推测执行在预测正确时有效地隐藏了控制依赖关系。这就是为什么编译器经常将if (a==0) return a;转换为if (a==0) return 0;或类似的;如果它们无论如何都要分支(控制依赖项),则使用返回值打破/避免代码的数据依赖项。

相关:

这篇关于数据依赖与控制依赖的区别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆