为了并行执行跟多流水线操作,我们要么把stage变的更细,或者把流水线变成多条。
流水线变成多条的话,难免就要才接下来的指令的一些特征,比如:load之前还没store,且地址相同,branch到了错误的地方。
在编译器层面,我们可以reorder instruciton.把instruction分成不同的package,package之间没有依赖,可以把其想象成一个长的流水线。本来之前如果没准备好的话,只要一个clock latency,但现在多条流水线,代价变高了。
跟好的并行就是有循环的时候,利用循环展开并且相互独立,更好的利用多条流水线
在硬件层面,我们可以来一个buffer,确定正确了,我们才提交。
这些是硬件的优势