《大话处理器》连载——微架构(13) 去数据相关和控制相关

 

       这些指令的相关性限制了指令的乱序调度与并行调度,需要去除这些相关以达到较好的指令调度。

(1) 去数据相关

        数据相关在代码中肯定是有的,如果每条语句都没有数据相关,那么它们就不能组合起来完成一项任务。不过,数据相关虽然不能完全消除,但是可以适当减少。例如这段代码:

x = a + b;

y = x + c;

z = y + d;

        这3条指令都是相关的,如果改成这样:

x = a + b;

y = c + d;

z = x + y;

        第1条和第2条指令就不相关了。

        去数据相关不是处理器的工作,而是程序员或者编译器的工作。

 

(2) 去控制相关

        分支指令的跳转方向不确定,后面的指令也就不知道该不该执行,就像股票一样,不知道以后是涨还是跌。股民通常会预测出哪只股票涨,然后买这只股票,如果涨了,那就欢欢喜喜,如果跌了,那就只能割肉了。

        处理器也可以借用这种投机行为,预测出跳转指令的目标地址,假设按照这条路径开始执行,跳转后面的指令甚至可以提前到跳转指令的前面去乱序执行,如果预测正确,那当然是皆大欢喜,如果预测失败,就从头再来。这种方式是一种典型的投机行为,因此也叫投机执行(Speculative Execution)。由于分支预测的准确性通常能达到98%以上,这种投机行为相当的划算,至少比做散户划算多了。

       分支指令也就2种路径:要么跳要么不跳。Eager execution方法将分支的2条路径都执行,防止预测失败,这是典型的一颗红心,两手准备,不过这种方式对资源的损耗太大,一般的乱序执行内核都不使用这种方式,而是预测一条路径,投机执行。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值