流水线,是一种把一个任务分解为若干个子任务,交付给不同执行机构或者部件进行的技术。目的是在可以让多个机构(资源)同时工作,使得机构可以并行工作,从而提高工作效率。下面将从周期与执行时间、吞吐率、加速比三个内容进行学习阐释。
Part 1:周期与执行时间
由于流水线的特点是并行工作,所以,并行的N个部件中,周期取决于周期最长的一个任务。则可推出,执行时间 = 第一条指令的执行时间 + (n-1)* 流水线周期,特殊情况下可有N个任务执行时间相同,则:执行时间 = n*流水线周期。
在题目中往往存在理论情况和实践情况两种不同的处理方式,下面通过例题来解释。
例题:某计算机系统,一条指令的执行需要经历取指令(2ms)、分析指令(4ms)、执行指令(1ms)三个阶段完成,现在有100条指令,利用流水线技术需要多少时间?
①理论情况:一条指令的执行时间= 2 + 4 + 1 = 7ms
则有:一条指令的执行时间=(2+4+1) + (100-1)*4 = 403ms
②实际情况:一条指令执行的周期= 最大任务时间,则有第一个周期内执行的时间是(4ms + 4ms + 4ms )+(100-1) * 4 = 408ms
Part2:流水线的吞吐率
流水线的吞吐率是指在单位时间内流水线所完成的任务数量和输出结果的数量。
有公式:吞吐率=任务数 / 总时间。
流水线最大吞吐率=任务数 / (流水线段数 + 任务数 - 1)* 流水线周期
当任务数趋向于无求大的时候,吞吐率最大= 1 /流水线周期。
Part3:流水线的加速比
流水线的加速比是指,完成同一批任务,不使用流水线所用的时间和使用流水线的时间所用的时间比例。有公式:加速比=不使用流水线时间 / 使用流水线时间。
进一步拆分可有:
①使用流水线时间= (流水线段数 + 任务数 - 1)* 流水线周期
②不使用流水线时间= 任务数*流水线段数*流水线周期
结合则有:加速比=(任务数*流水线段数)/ 任务数 + 流水线段数 - 1
当任务数趋向于无穷大的时候,有最大加速比=流水线段数。