1、多个任务在同一时间周期内争用同一个流水段(资源冲突)
例如,假如在指令流水线中,如果数据和指令是放在同一个储存器中,并且访问接口也只有一个,那么,两条指令就会争用储存器;在一些算数流水线中,有些运算会同时访问一个运算部件。
2、数据依赖(数据相关)
比如,A运算必须得到B运算的结果,但是,B运算还没有开始,A运算动作就必须等待,直到A运算完成,两次运算不能同时执行。
3、 条件转移的影响(条件转移)
如果第一条指令是一个条件转移指令,那么系统就会不清楚下面应该执行那一条指令。这时就必须等第一条指令的判断结果出来才能执行第二条指令。条件转移所造成的流水线停顿甚至比相关还要严重的多。
越是长的流水线,相关和转移两大问题也越严重,所以,流水线并不是越长越好,超标量也不是越多越好,找到一个速度与效率的平衡点才是最重要的。
请不要在循坏内过多声明变量开辟空间:
这些都放到循坏外,否则会阻塞CPU!!!
Unity中引起cpu流水线阻塞的三个原因
最新推荐文章于 2024-06-20 10:07:58 发布