📝本文介绍
本文主要为计算机系统结构的流水方式。涉及流水基本概念,分类和流水处理机的性能。
👋作者简介:一个正在积极探索的本科生
📱联系方式:943641266(QQ)
🚪Github地址:https://github.com/sankexilianhua
🔑Gitee地址:https://gitee.com/Java_Ryson
由于本人的知识所限,如果文章有问题,欢迎大家联系并指出,博主会在第一时间修正。
📕流水线概念
📖基本概念
基本概念:流水是重叠的延申。一次/二次重叠是将一条指令的解释划分为两/三个子过程,而流水则会划分成更多子过程。
📖表示方法
连接图
时空图
预约表(非线性流水线使用)
📖特点
- 只有连续提供同类任务才能充分发挥流水线的效率
- 在流水线的每一个流水段中都要设置一个流水锁存器
- 各类流水段时间应尽量相等
- 流水线需要有装入时间、充满时间和排空时间
- 理想情况下,当流水线充满后,每隔Δt时间将会有一个结果流出流水线。
📘流水线分类
- 按向下扩展和向上扩展的思路
- 向下扩展:子过程细分
- 向上扩展:多个处理机之间进行流水
- 按流水处理的级别
- 部件级(操作流水线)
- 处理机级(指令流水线)
- 系统级(宏流水线)
- 按功能多少
- 单功能:只能完成一种固定功能的流水线
- 多功能:流水线的各段通过不同连接实现不同功能
- 按多功能的连接方式
- 静态:同一段时间内,只能按照一种固定方式连接功能段,实现一种功能
- 动态:在同一段时间内,多功能流水线中的各段可以按照不同的方式连接,同时执行多种功能。
- 按数据表示
- 标量流水:没有向量数据,只能用标量循环方式来对向量、数组进行处理。
- 向量流水:设置有向量指令和向量运算硬件,能对向量、数组中的各个元素流水地处理。
- 按是否有反馈电路
- 线性:每个流水段都流过一次,且仅流过一次
- 非线性:在流水线的某些流水段之间有反馈回路或前馈回路
- 按控制方式
- 同步流水线
- 异步流水线
📙流水处理机的性能
主要通过时空图来分析
📖吞吐率
🔖概念
流水线单位时间里能流出的任务数或结果数。
假设有n个任务,m Δ t {\Delta t} Δt时间后充满流水线
Tpmax= 1 m a x { Δ t 1 , Δ t 2 , Δ t 3 , Δ t 4 . . . . . } {1 \over max\{\Delta t_1 ,\Delta t_2 ,\Delta t_3 ,\Delta t_4 .....\}} max{Δt1,Δt2,Δt3,Δt4.....}1
TP = n m Δ t + ( n − 1 ) Δ t {n \over m\Delta t + (n-1)\Delta t} mΔt+(n−1)Δtn
也就是,任务总数/任务总时间。理想状态下,当流水线充满之后,一个 Δ t \Delta t Δt的时间就可以输出一个结果.那么前m Δ t {\Delta t} Δt的时间就需要用来充满流水线。而这m Δ t {\Delta t} Δt的时间,实际上只能输出一个任务结果。
🔖瓶颈解决
实际过程中,每个功能段的时间总不会完全相等,这时候就有可能出现等待的问题。也就是前面环节不能马上进入该功能段,需要等待一段时间(瓶颈段执行时间-前一功能段执行时间).解决方法有如下两种:
- 细分:将一个瓶颈段细分成更小的功能段,实现更多段流水
- 并联:多增加几个该功能段,实现功能段的并联。(假如前一功能段时间为 Δ t {\Delta t} Δt 而瓶颈段为3 Δ t {\Delta t} Δt 那么就需要添加3-1=2个功能段,从而实现3个瓶颈功能段的并联。让前一个功能段处理完,马上能进入瓶颈段处理。)
📖加速比
指流水线的速度与等效的非流水线的速度之比。
公式就是之前说过的:未加速前的时间(串行时间)/加速后的时间(流水时间)
Δ t \Delta t Δt都相等时:Sp= n m Δ t m Δ t + ( n − 1 ) Δ t {nm\Delta t \over m\Delta t +(n-1) \Delta t } mΔt+(n−1)ΔtnmΔt
Δ t \Delta t Δt不相等时:Sp= n ∑ 1 m Δ t i ∑ 1 m Δ t 1 + ( n − 1 ) Δ t j {n\sum_1^m\Delta t_i \over \sum_1^m\Delta t_1 +(n-1) \Delta t_j } ∑1mΔt1+(n−1)Δtjn∑1mΔti ( Δ t j \Delta t_j Δtj为时间最长的段/瓶颈段)
加速比一定大于1
📖效率
指流水线中的设备实际使用时间占整个运行时间之比,也称流水线设备的时间利用率。
这里的实际使用时间,在时空图中表现为有标号的格子,而总时间则是整个长方形(从开始到最后一个任务的输出)
各段时间相同: η \eta η= n Δ t m ∗ T {n\Delta t \over m*T} m∗TnΔt(T为最后一个任务输出时在时间轴的坐标)
各段时间不同: η \eta η= n ∗ ∑ 1 m Δ t i m ∗ [ ∑ 1 m Δ t i + ( n − 1 ) ∗ Δ t j ] {n*\sum_1^m\Delta t_i \over m*[\sum_1^m \Delta t_i + (n-1)*\Delta t_j]} m∗[∑1mΔti+(n−1)∗Δtj]n∗∑1mΔti( Δ t j \Delta t_j Δtj 为时间最长的功能段)