题25

题目

【2016 统考真题】在无转发机制的五段基本流水线中,下列指令序列存在数据冒险的指令对是( )。
I1: add R1, R2, R3; (R2)+(R3)→R1
I2: add R5, R2, R4; (R2)+(R4)→R5
I3: add R4, R5, R3; (R5)+(R3)→R4
I4: add R5, R2, R6; (R2)+(R6)→R5
A. I1 和 I2
B. I2 和 I3
C. I2 和 I4
D. I3 和 I4

分析

数据冒险即数据相关, 指在一个程序中存在必须等前一条指令执行完才能执行后一条指令的情况, 此时这两条指令即为数据相关。
当多条指令重叠处理时就会发生冲突。
首先这两条指令发生写后读相关, 且两条指令在流水线中的执行情况 (发生数据冒险) 如下表所示。

B

时钟 指令1234567
I2取指译码/读寄存器运算访存写回
I3取指译码/读寄存器运算访存写回
指令 I2 在时钟 5 时将结果写入寄存器 R5, 但指令 I3 在时钟 3 时读 R5。 本来指令 I2 应先写入 R5, 指令 I3 后读 R5, 结果变成指令 I3 先读 R5, 指令 I2 后写入 R5, 因而发生数据冲突。