系统架构师——流水线

流水线

​流水线是指在程序执行时多条指令重叠进行操作的一种准并行处理实现技术。各种部件同时处理是针对不同指令而言的,他们可同时为多条指令的不同部分进行工作,以提高各部件的利用率和指令的平均执行速度。

流水线周期

流水线应用过程中,会将需要处理的工作分为N个阶段,最耗时的那一段所消耗的时间为流水线周期。如:使用流水线技术执行100条指令,每条指令取指2ms,分析4ms,执行1ms,则流水线周期为4ms。

计算流水线执行时间

将一个任务的执行过程分为N个阶段,假设每个阶段完成时间为 t,则完成该任务所需时间即为 Nt,若以传统的方式,则完成k个任务所需的时间是kNt;而使用流水线技术执行,且花费的时间是Nt+(k-1)t。也就是说,除了第一个任务需要完整的时间外,其他都通过并行,节省下大量的时间。所以流水线的执行时间可通俗的表达为:

流水线执行时间=第一条指令的执行时间+(n-1)*流水线周期

注:n 代表需要处理的任务数量

流水线的执行时间计算,其实进一步可以分理论情况与实践情况两种不同的处理方式。 例:某计算机系统,一条指令的执行需要经历取指(2ms)、分析(4ms)、执行(1ms)三个阶段,现要执行 100 条指令,利用流水线技术需要多长时间?

  1. 理论上,1条指令的执行时间为:2ms+4ms+1ms=7ms。所以:理论流水线执行时间=2ms+4ms+1ms+(100-1)*4=403ms。

  2. 实际上,真正做流水线处理时,考虑到处理的复杂性,会将指令的每个执行阶段的时间都统一为流水线周期,即1条指令的执行时间为:4ms+4ms+4ms=12ms。 所以:实际流水线执行时间=4ms+4ms+4ms+(100-1)*4=408ms。

考试时80%以上的概率采用理论公式计算,所以考试时需要以理论公式计算,若计算的结果无正确选项才考虑采用实际公式计算

流水线的吞吐率

流水线的吞吐率(Though Put rate,TP)是指在单位时间内流水线所完成的任务数量或输出的结果数量,基本的公式如下:

吞吐率:指令条数/流水线执行时间
image20200928145740421.png

流水线的加速比

在流水线中,因为在同一时刻,有多个任务在重叠地执行,虽然完成一个任务的时间与单独执行该任务相近(甚至由于分段的缘故,可能更多一些),但是从整体上看完成多个任务所需的时间则大大减少。

​完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比称为流水线的加速比(speedup ratio)。如果不使用流水线,即顺序执行所用的时间为 T0 ,使用流水线的执行时间为 Tk ,则计算流水线加速比的基本公式如下:
image20200928151933990.png

如果流水线各个流水段的执行时间都相等(设为Dt),则一条k段流水线完成n个连 续任务所需要的时间为(k+n-1)Dt。如果不使用流水线,即顺序执行这n个任务,则所需要的时间为nkDt。因此,各个流水段执行时间均相等的一条k 段流水线完成n个连续任务 时的实际加速比为:

image20200928151856373.png

真题

image20200928150448703.png

解析:
100条指令的执行时间为:(Δt+3Δt+Δt+2Δt+Δt)+(100-1)*3Δt=305Δt;
100条指令时的吞吐率为:100/305Δt

image20200928150845740.png

解析:
n条指令的吞吐率=n/(2Δt+1Δt+3Δt+1Δt+2Δt+(n-1)*3Δt)=n/(6Δt+3nΔt)
当n趋向于无穷大时 上式的结果为 1/3Δt

流水线加速比=不用流水线的执行时间/使用流水线的执行时间
10条指令不用流水线的执行时间=(2t+1t+3t+1t+2t)*10=90t。
10条指令使用流水线的执行时间=(2t+1t+3t+1t+2t)+(10-1)*3t=36t。
所以加速比为:90t/36t=5:2
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值