《大话处理器》连载——微架构(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条路径都执行,防止预测失败,这是典型的一颗红心,两手准备,不过这种方式对资源的损耗太大,一般的乱序执行内核都不使用这种方式,而是预测一条路径,投机执行。

你可能感兴趣的:(处理器)