首页 > 试题广场 >

假定采用“取指、译码取数、执行、访存、写回”这种五段流水线

[单选题]
下面是一段伪指令序列:
ADD R1 ,  R0, #20
LD R2 ,  12 (R3)
ADD     R4,  R1, R 2
以上指令序列中,第1条和第2条指令分别与第3条指令发生数据相关。假定采用“取指、译码/取数、执行、访存、写回”这种五段流水线方式,那么不采用“定向技术”时需要在第三条指令前加入( )条nop指令才 能使这段程序不发生数据冒险。
  • 1
  • 2
  • 3
  • 4
对于经典五段流水线的数据相关问题,一般需要考察前后指令之间是否有寄存器写后读(顺序执行下,不会发生写后写或读后写的相关冲突,在乱序执行下才有可能发生)的问题。
关于数据相关的流水线问题,具体延迟几个周期与下列两个因素相关:
1. 是否能在同一周期内完成寄存器的读和写
2. 是否采用“转发/定向”(forward)技术
具体的讨论如下:
  • 如果两者都为否定,那么应当至少延迟3个时钟周期。(下一条指令必须等到上一条指令完成写回后所需操作数才准备就绪)
  • 如果能够在同一周期内完成寄存器的读和写,则上一条指令的“WB”段(写回)与下一条数据相关指令的“ID”(取操作数)可以安排在同一周期,此时至少延迟2个时钟周期。
  • 如果更进一步,采用了“转发技术”,那么需要根据上一条指令的类型来进行区分:
    • 若上一条指令为算术逻辑运算类指令,例如sub、add等等,结果操作数能够在“EX段获得的话,那么上一条指令在“EX”段(运算)运算的结果,可以直接转发到本条指令运算时的一端,从而时钟周期延迟为0。
    • 若上一条指令为取数指令(ld),结果操作数必须等到访存阶段结束才能获得,那么至少需要延迟1个时钟周期。
一般情况下,我们默认能在同一周期内完成寄存器的读和写,是否支持“转发”技术题目一般也会给出,在本题中,是“能在同一周期内完成寄存器读写”和“不采用定向技术”的情况,很容易看到,指令三的源操作数是指令一、二的结果操作数,根据上述讨论应当停顿2个时钟周期。
发表于 2022-10-04 17:09:43 回复(0)
取址,译码,这两个可以先做起来
发表于 2019-12-01 19:06:50 回复(0)
应该是指令1和2都和第3条指令发生数据相关,所以两条后面都需要一条空指令作缓冲。
发表于 2019-07-12 07:40:20 回复(0)