4

我是流水线的新手,我需要一些关于以下事实的帮助

流水线的速度由最慢阶段的速度决定

不仅如此,如果给我一个持续时间分别为 5 ns、10 ns、8 ns、7 ns、7 ns 的 5 级流水线,则据说每条指令将花费 10 ns 时间。我能得到一个明确的解释吗?

(已编辑)还让我的程序有 3 条指令 I1、I2、I3 并且我需要 1 个时钟周期持续时间 = 1ns,这样上述阶段分别需要 - 5、10、8、7、7 个时钟周期。现在根据理论,管道的快照将是 -

简单管道快照

但这给了我一个总时间 - 没有 clk 周期 * clk 周期持续时间 = 62 * 1 = 62 ns 但根据理论总时间应该是 - (最慢阶段)* 没有。指令数 = 10 * 3 = 30 ns 虽然我知道为什么最慢的阶段很重要(每个流水线阶段需要等待,因此每 10 个 clk 周期后产生 1 条指令 - 但是当我使用 clk 周期计算它时结果不一致。为什么会出现这种不一致?我错过了什么?? (已编辑)

4

4 回答 4

3

假设一个汽车制造过程。假设它使用了两级管道内衬。假设制造一台发动机需要 1 天时间。2 天制造剩下的。您可以并行执行这两个阶段。你的汽车输出率是多少?应该是每2天一辆车。尽管您在 1 天内制造了其余部分,但您必须再等一天才能获得发动机。

在您的情况下,尽管其他阶段在更短的时间内完成工作,但您必须等待 10ns 才能完成整个过程

于 2013-06-13T11:20:24.933 回答
1

暂存允许您一次执行同一操作的“部分”。

我将在这里创建一个较小的示例,删除示例的最后两个阶段:5、10、8 ns

让我们进行两个操作:

5  10  8
   5   10  8 

| The first operation starts here
   | At stage 2 the second operation can start it's fist stage
   | However, since the stages take different amount of times,
   | the longest ones determines the runtime
       | the thirds stage can only start after the 2nd has completed: after 15ns
       | this is also true for the 2nd stage of the 2nd operation
于 2013-06-13T10:59:41.557 回答
0

我不确定你的困惑的根源。如果管道中的一个单元花费的时间更长,那么它后面的单元在该单元完成之前无法推动管道向前移动,即使它们自己已经完成了工作。就像DPG说的,试着从汽车生产线的例子来看。这是解释管道的最常见的方法之一。如果最慢单元前面的单元在完成后更快,那仍然没关系,因为他们必须等到较慢单元完成其工作。所以是的,您的管道正在执行 3 条指令,总执行时间为 30ns。

于 2013-06-17T14:35:00.683 回答
0

谢谢大家的答案

我想我现在已经清楚了。这就是我认为的答案——

问题- 1 :- 为什么管道执行取决于最慢的步骤

从图中可以清楚地看出,每个阶段都必须等待最慢的阶段完成。因此,每条指令完成后的总时间受等待时间的限制。(在我的例子中,间隔 10 ns 之后)

问题 2 :- 程序的总执行时间是多少

我想知道包含 3 条指令的特定程序需要 多长时间才能执行,而不是 3 条指令需要多长时间执行- 这显然是 30ns,因为每条指令每 10 ns 完成一次。

现在假设在管道中获取 I1,然后已经有 4 条其他指令在其中执行。4 条指令在 40 ns 时间内完成。之后 I1,I2,I3 以 30 ns 的顺序执行。(假设没有流水线停顿)

这给出了总共 30+40=70ns 。

实际上对于n条指令程序,k级流水线

我认为是(n + k-1 ) *C *T

其中 C = 否。最慢阶段的时钟周期数 T= 时钟周期时间

请检查我的理解....以了解我是否在想什么错误,以便我可以接受自己的答案!!!

于 2013-06-17T15:48:45.720 回答