(2) 数据冒险
流水线使原先有先后顺序的指令同时处理,当出现某些指令的组合时,可能会导致指令使用了错误的数据。
看下面这个例子:
寄存器访问的数据冒险
add R1,R2,R3将寄存器R2和R3的和赋给R1,add R4,R1,R5将寄存器R1和R5的和赋给R4,很明显,R1在第1条指令中被更新,然后在第2条指令中使用,可是R1必须在第5个cycle之后才被更新,而指令2再第4个cycle就要访问R1,这时的R1还不是正确的值,执行结果出错。
一种解决方法是在这2条语句之间增加2个cycle的等待: