我们在机器上执行以下指令如何查找流水线机器的执行时间?
如果机器是流水线式的,则需要大约200 ps * 3 = 600 ps。
如果流水线机器运行1,000,003条指令,我希望执行时间是多少?它是1,000,000 * 200 ps + 600 ps?
我们在机器上执行以下指令如何查找流水线机器的执行时间?
如果机器是流水线式的,则需要大约200 ps * 3 = 600 ps。
如果流水线机器运行1,000,003条指令,我希望执行时间是多少?它是1,000,000 * 200 ps + 600 ps?
该图适用于经典的5级MIPS流水线架构。现代芯片使用超标量设计,但我们忽略[至少现在]。
这里的问题是,该图显示了各种类型的指令[对于每个T状态T1-T5]的时间,但是没有示例程序要执行,除非该图也是循环的示例。如果是这样,继续...
另一个问题是管道“危险”。也就是说,特定指令的特定阶段(T状态)必须“停顿”,因为它取决于先前指令的输出。例如:
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/4
或250,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,或多或少。
UPDATE:
但是我的教授告诉我答案为100万* 200 PS + 1400个PS
那么,你应该[显然;-)]相信你的教授不是我[我确实强调“猜测”]。
但是,我们再次必须知道实现:分支预测等。在第1个循环中,假设第1个循环中的L1不能启动,直到循环1中的L4完成。
如果循环/序列被完全展开[和没有分支],如lw, sw, R, R
重复25万次,它将是1,000,000 * 200 ps
,IMO。
我认为教授的分析假定L1的T1为环2可以就并发与L4的T2 for循环1.
一个例子有用序列可以是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
不过,我只是重读小字:这种计算假设多路复用器,控制单元,PC访问,并且符号扩展单元没有延迟。
因此,这可能是为什么存在/有差异的关键。如果有疑问,再次相信你的教授。
但我的教授告诉我答案是1,000,000 * 200 ps + 1400 ps –
@ Yvette不,国际海事组织,这是一个非常多的计算机工程,计算机体系结构,计算机编程问题。任何人都会采用mips asm,希望能够为管道规划获得最佳性能。 –
@CraigEstey是的,没关系。我不确定SuperU是否进入了这个方面。谢谢。 –