如何查找流水线机器的执行时间?

时间:2016-05-24 03:11:12

标签: mips computer-science cpu-architecture instructions pipelining

我们正在机器

上执行以下说明

如果机器是流水线的,则需要大约200 ps * 3 = 600 ps。

如果流水线型机器运行1,000,003条指令,我想执行的时间是多少?是1,000,000 * 200 ps + 600 ps?

1 个答案:

答案 0 :(得分:2)

该图适用于经典的5阶段MIPS流水线架构。现代芯片使用超标量设计,但让我们忽略[至少暂时]。

这里的问题是该图显示了各种类型的指令[对于每个T状态T1-T5]的时间,但是没有要执行的示例程序,除非该图也是循环的示例。如果是这种情况,请继续...

另一个问题是管道和危害"。也就是说,特定指令的特定阶段(T状态)必须“停止”#34;因为它取决于先前指令的输出。例如:

L1: add $t1,$t2,$t3
L2: add $t6,$t4,$t1

第二条指令必须停止其注册读取" (T2)因为它必须等待完成先前的指令"注册写" (T5)阶段完成[因为它需要$t1]的最终值。

所以,而不是一个表现良好的管道,如:

1:      L1:T1
2:      L1:T2       L2:T1
3:      L1:T3       L2:T2
4:      L1:T4       L2:T3
5:      L1:T5       L2:T4
6:                  L2:T5

我们最终得到:

1:      L1:T1
2:      L1:T2       L2:T1
3:      L1:T3       L2:stall
4:      L1:T4       L2:stall
5:      L1:T5       L2:stall
6:                  L2:T2
7:                  L2:T3
8:                  L2:T4
9:                  L2:T5

在现代实现中,有一些架构技术可以避免这种情况(例如"转发",无序执行),但我们必须知道特定的架构实现,以了解它有哪些改进的工具危险。

我最好的猜测如下......

再次,如果我们忽略了危险,我们需要一个特定的程序/序列来进行计算。

如果我们假设程序是图表,对于1,000,000条指令,其循环迭代次数为1,000,000 / 4250,000。而且......我们也忽略了分支延迟时隙。

一次循环迭代的时序图如下所示:

label   inst    start   exec    end
                time    time    time
-----   ----    -----   ----    ----

L1:     lw      0       800     800
L2:     sw      200     700     900
L3:     R       400     600     1000
L4:     beq     600     500     1100

请注意,所有指令都在L4之前完成。因此,主导时间是L4的结束时间。因此,250,000 * 1100 ps或275 us,或多或少。

<强>更新

  

但是我的教授告诉我答案是1,000,000 * 200 ps + 1400 ps

嗯,你应该[显然;-)]相信你的教授不是我[我确实强调了#34;猜测&#34;]。

但是,我们必须再次知道实现:分支预测等。我认为第二个循环上的L1无法启动,直到循环1上的L4完成。

如果循环/序列完全展开[并且没有分支],例如lw, sw, R, R重复250,000次,则 1,000,000 * 200 ps,IMO。

我认为教授的分析假设L1的循环2的T1可以与L4的T2同时开始循环。

示例有用的序列可以是具有重叠源/目的地的memmove序列[寄存器已经预设]:

L1:     lw      $t0,4($t1)
L2:     sw      $t0,0($t1)
L3:     addu    $t1,$t1,$t2
L4:     bne     $t1,$t3,L1

同样,这假定没有分支延迟时隙。要使使用并且,只需附加nop,序列将为L1, L2, L4, L3

但是,我只是重读细则:此计算假定多路复用器,控制单元<​​/ strong>,PC访问和符号扩展单元没有延迟。

所以,这可能是导致差异的关键。再一次,如果有疑问,相信你的教授。