你对分支预测的作用的理解有误。
分支预测不是为了实现指令预取。它和cache就没关系,它是用来优化流水线的。
想象一个没有分支预测的流水线:
取指-译码-重命名-分发-发射-执行-写回-提交
分支指令要到执行阶段才能知道分支目标是哪里,那么意味着取指到发射阶段都没有事情可以做,因为不知道应该用哪条指令。
如果加入分支预测:
取指-分支预测-译码-重命名-分发-发射-执行-写回-提交
那么分支指令只要到分支预测阶段就能继续取指,我们只浪费了一个流水线阶段。
注意,这个过程对cache毫无优化效果。
---------
如果你要把分支两个方向的指令都取来执行,CPU必须维护两个指令流。虽然很麻烦但是不是不能做(这样的技术会很类似于超线程)。
只不过CPU就要浪费一半的时间执行毫无用处的错误分支,从统计学上来说,相当于用了一个正确率仅有50%的垃圾分支预测器。