以下是一段MIPS指令序列:addi ﹩t1, ﹩zero, 20 #R[﹩t1]-20lw ﹩t2, l2(﹩a0) #R[﹩t2]-M[R[﹩a0]+12]add ﹩v0, ﹩t1, ﹩t2 #R[﹩v0]-R[﹩t1]+R[﹩t2]以上指令序列中,第1和第3,第2和第3条指令之间发生数据相关。假定采用“取指、译码/取数、执行、访存、写回”这种5段流水线方式,并控制在时钟的前半周期写寄存器堆,后半周期读寄存器堆,那么不采用“转发”技术时,需要在第3条指令前加入多少条空操作(nop)指令才能使这段程序不发生数据冒险。
A: 1
B: 2
C: 3
D: 4
A: 1
B: 2
C: 3
D: 4
举一反三
- 下面是一段MIPS指令序列: 1 add$s3, $s1, $s0 #R[$t3]←R[$s1]+R[$s0] 2 add$t2, $s0, $s3 #R[$t2]←R[$s0]+R[$s3] 3 1w$t1, 0($t2) #R[$t1]←M[R[$t2]+0] 4 add$t1, $t1, $t2 #R[$t1]←R[$t1]+R[$t2] 以上指令序列中,______指令之间发生数据相关 A: 1和2、2和3 B: 1和2、2和4 C: 1和3、2和3、2和4、3和4 D: 1和2、2和3、2和4、3和4
- 以下是一条MIPS指令序列:add﹩t1,﹩t0,﹩t1 #R[﹩t1]-R[﹩t0]+R[﹩t1]lw ﹩t0, 0(﹩t1) #R[﹩t0]-M[R[﹩t1]+0]bne﹩t0,﹩s5, exit #if(R[﹩t0]!=R[﹩s5]) then go to exitadd﹩s3,﹩s5,﹩s4 #R[﹩s3]-R[﹩s5]+R[﹩s4]exit:以上指令序列中,( )指令之间产生数据相关。 A: 1和2,2和3 B: 1和2,2和3,3和4 C: 1和2,1和3 D: 1和2,1和3,2和3
- 以下是一段指令序列: 1 addi R1,20 (R1)←20 2 1w R2,R0,12 (R2)←M(12+(R0)) 3 add R3,R1,R2 (R3)←(R1)+(R2) 以上指令序列中,假定采用“取指、译码/取数、执行、访存、写回”这种五段流水线方式,那么在采用“转发”技术时,需要在第3条指令之前至少加入______条空操作(nop)指令,才能使这段程序不发生数据冒险。 A: 0 B: 1 C: 2 D: 3
- 以下是一条MIPS指令序列:add ﹩t1, ﹩t0, ﹩t1 #R[﹩t1]<-R[﹩t0]+R[﹩t1]lw ﹩t0, 0(﹩t1) #R[﹩t0]<-M[R[﹩t1]+0]bne ﹩t0, ﹩s5, exit #if(R[﹩t0]!=R[﹩s5]) then go to exitadd ﹩s3, ﹩s5, ﹩s4 #R[﹩s3]<-R[﹩s5]+R[﹩s4]exit:以上指令序列中,( )指令之间产生数据相关。 A: 1和2,2和3 B: 1和2,2和3,3和4 C: 1和2,1和3 D: 1和2,1和3,2和3
- 在采用“取指、译码/取数、执行、访存、写回”5段流水线的处理器中,执行如下指令序列,其中s0、s1、s2、s3和t2表示寄存器编号。I1: add s2, s1, s0 // R[s2]←R[s1] + R[s0]I2: load s3, 0(t2) // R[s3]←M[R[t2] + 0]I3: add s2, s2, s3 // R[s2]←R[s2] + R[s3]I4: store s2, 0(t2) // M[R[t2] + 0]←R[s2]下列指令对中,不存在数据冒险的是( ) A: I2和I4 B: I1和I3 C: I2和I3 D: I3和I4