大家好,又见面了,我是你们的朋友全栈君。
1、多个任务在同一时间周期内争用同一个流水段(资源冲突)
例如,假如在
指令流水线
中,如果数据和指令是放在同一个储存器中,并且访问接口也只有一个,那么,两条指令就会争用储存器;在一些算数流水线中,有些运算会同时访问一个运算部件。
2、数据依赖(数据相关)
比如,A运算必须得到B运算的结果,但是,B运算还没有开始,A运算动作就必须等待,直到A运算完成,两次运算不能同时执行。
3、 条件转移的影响(条件转移)
如果第一条指令是一个
条件转移指令
,那么系统就会不清楚下面应该执行那一条指令。这时就必须等第一条指令的判断结果出来才能执行第二条指令。条件转移所造成的流水线停顿甚至比相关还要严重的多。
越是长的流水线,相关和转移两大问题也越严重,所以,流水线并不是越长越好,超标量也不是越多越好,找到一个速度与效率的平衡点才是最重要的。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/171380.html原文链接:https://javaforall.cn