5级流水线处理器具有指令提取(IF),指令解码(ID),操作和提取(OF),执行操作(PO)和写操作数(WO)阶段.IF,ID,OF和WO阶段占用1个时钟每个阶段对任何一条指令循环一次.PO级分别对ADD和SUB指令花费1个时钟周期,对MUL指令花费3个时钟周期,对DIV指令花费6个时钟周期。流水线中使用运算和转发。需要执行以下指令序列?
Instruction Meaning of instruction
I0 :MUL R2 ,R0 ,R1 R2 ¬ R0 *R1
I1 :DIV R5 ,R3 ,R4 R5 ¬ R3/R4
I2 :ADD R2 ,R5 ,R2 R2 ¬ R5+R2
I3 :SUB R5 ,R2 ,R6 R5 ¬ R2-R6
(A) 13
(B) 15
(C) 17
(D) 19答案: (B)
说明:操作数转发:在这种技术中,操作数的值在存储之前被赋予相关指令的相关阶段。
在上述问题中,I2依赖于I0和I1,而I3依赖于I2。
让我们用一个时空图来看看这个问题。
上面是一个时空图,表示在其中执行指令的管道。
指令0是MUL操作,在PO阶段占用CPU的3个时钟周期,而在其他任何阶段仅占用1个周期。
指令1是DIV操作,在PO阶段占用CPU的6个时钟周期,在其他任何阶段仅占用1个周期。
在这里可以注意到,即使OF级在第4个时钟周期中处于空闲状态,也没有给出指令1。这是一个设计问题。仅在下一个周期要操作或执行操作数时,才应获取操作数,否则可能会损坏数据。由于下一个周期的PO阶段不是空闲的,因此OF延迟了,并且仅在进入PO阶段的1个周期之前对指令1进行了处理。
指令2是ADD操作,在所有阶段中都需要1个CPU时钟周期。但这是一个依赖操作。它需要指令0和1提供的操作数。
指令2需要R5和R2相加,它会按时获得R2,因为直到指令2到达其PO阶段为止,R2都已存储在内存中。现在也需要R5,但是指令2的PO和指令1的WO是并行的。这意味着指令2在被指令1存储之前不能接受R5的值。因此出现了操作数转发的概念。在将指令1的结果/值存储为R5之前,它可以先将其转发到指令2的Fetch-Execute缓冲区,以便指令2也可以在指令的WO阶段并行使用它。这将节省所需的额外时钟周期(如果不使用操作数转发,并且需要从内存中获取R5)。
在指令3中,将相同的操作数转发概念应用于由指令2计算的R2的值。
因此,操作数转发在此处节省了2个额外的时钟周期。 (指令2中有1个周期,指令3中有1个周期)。
因此,周期总数为15,这可以从图中看出,该阶段的每个实例代表1个时钟周期。总计15。
这个问题的测验