软考中关于计算机流水线技术出题方式一般有两种:
关注公众号“月上老狗”,发送“软件设计师”,获取历年软件设计师软考真题。
在处理器中,流水线技术被广泛应用于指令执行过程中:处理器会将指令执行过程分解成取指、译码、执行、访存和写回等多个阶段,并将这些阶段连接起来形成一个流水线。这样,在同一时刻,处理器可以同时执行多条指令的不同阶段,从而提高了指令执行的效率。
PS:计算机中流水线技术并不是真的并行,而是伪并行,因为取指、译码、执行三个步骤还是需要串行执行,计算机中的流水线技术只不过是在第一条指令没有执行完之前,就已经开始了第二条指令的取指、译码。
可能涉及到的相关参数计算:
其中需要重点了解的参数是 流水线执行时间
和 流水线吞吐率
。
将指令的执行过程,抽象为空图,大概是这个样子:
时间 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|
取指 | c1 | c2 | c3 | … | c·n | |||
译码 | c1 | c2 | c3 | … | c·n | |||
执行 | c1 | c2 | c3 | … | c·n | |||
其他 | c1 | c2 | c3 | … | c·n |
上面的时空图我们将一条指令的执行过程分成了四个步骤,根据时空图可以推导出流水线执行 n
条指令的理论执行时间是:一条指令的耗时
+ (n-1)*流水线周期
。以上面的时空图为例,可以推出理论公式:
其中:t1+t2+t3+t4
分别是一条指令对应的取指、译码、执行、其他
所需时间;Δt
是流水线周期。
流水线周期:由时空图可知,一条指令的结束时间和上一条指令的结束时间中间有个差值,也就是
c2
的结束时间和c1
的结束时间的差值。为了便于计算,我们假设所有指令的耗时相同,将最长耗时的步骤作为两条指令结束时间的差值,然后假设所有指令的结束时间差值都是一样的,将其称为 流水线周期。
问:一条指令的执行过程分为三部分:取指、译码、执行,他们分别耗时:3s、3s、4s;采用流水线方式执行100条指令的总耗时是多少?这条流水线的流水线周期是多少?
解题思路:指令执行分为三步,最长的一步耗时为
4s
,一般将最长的耗时看作流水线周期,所以流水线周期是4s
,然后代入公式可以计算出N
条指令的总耗时。总耗时 =
(3 + 3 + 4) + (100 -1) * 4
=406s
流水线周期 =4s
关于计算流水线执行时间的题目,我们一般才用上面的公式就足够了,但可能有时会发现算出来的结果并不是正确答案,这时可以使用实践公式计算,看看有没有正确答案。
将上面的理论公式整理一下,设一条指令会分为 K
个步骤执行,则公式可写为:
实践公式是将所有步骤的执行时间扩大,增加容错(冗余)时间,认为每个步骤的实际执行时间都是最长步骤的时间(流水线周期),所以可以将公式改写为:
,提公因式得:
流水线吞吐率是衡量流水线性能的重要指标之一,它表示单位时间内流水线所能处理的指令数目,通常以每时钟周期执行的指令数目来衡量。流水线吞吐率越高,表示流水线能够更快地处理指令,从而提高了系统的性能和效率。
采用小学知识推导出计算公式:
吞吐率 = 吞吐量 / 吞吐耗时
所以根据上面的流水线执行时间公式(实践公式!!!
),可得到吞吐率公式为:
其中 n
是指令条数。
采用高中知识,将 n
趋近于无穷大,则 K
和 1
可以忽略不记,得到新公式:
约分可得:
本文作者:DingDangDog
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!