软考-软件设计:流水线技术 作者:马育民 • 2025-04-02 09:47 • 阅读:10004 # 并行 在学习流水线之前,必须掌握 **并行** 的概念:两个或两个以上的事件在 **同一时刻发生** # 计算机指令在执行步骤 一条计算机指令在执行时,可以分为以下三个步骤: 1. 取指:根据控制器的要求,从存储器中取出某条指令送到指令寄存器。 2. 分析:对指令进行译码,和取操作数操作。 3. 执行:把操作结果写到通用寄存器中。 ### 指令串行的缺点 如果 `取指`、`分析`、`执行` 分别需要 `1` 个单位的时间来执行,当 **3条指令** **串行** 时,则需要 `9` 个单位的时间,如下: **提示:** `t`表示时间单位,`1t` 表示 `1`个单位时间 | |1t |2t |3t |4t |5t |6t |7t |8t |9t | | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | |取指 |1取指 | | |2取指 | | |3取指 | | | |分析 | |1分析 | | |2分析 | | |3分析 | | |执行 | | |1执行 | | |2执行 | | |3执行 | **缺点:** - 有大量的空闲时间,如:当 `执行 指令1` 时,`取指` 和 `分析` 都在空闲 - 串行时,耗时长 # 流水线 流水线的概念,就是在程序执行时,多条指令 **并行** ,可以提高 **各部件的利用率** ### 使用流水线 的优点 如果使用了流水线,则只需要 `5` 个单位的时间 - 第一条指令的 `取指`、`分析`、`执行`,总共还是需要 `3` 个时间单位 - 当 `分析 指令1` 时,会 **并行** 执行 `取 指令2` - 当 `执行 指令1` 时,会 **并行** 执行 `分析 指令2`、`取 指令3` 如下: | |1t |2t |3t |4t |5t | | ------------ | ------------ | ------------ | ------------ | ------------ | ------------ | |取指 |1取指 |2取指 |3取指 | | | |分析 | |1分析 |2分析 |3分析 | | |执行 | | |1执行 |2执行 |3执行 | **结论:** - 多条指令并行 - 提高 **各部件的利用率** - 提升 **系统的吞吐率** ### 流水线周期 指的是流水线执行过程中 **最长的时间**。 比如一条指令取指 `3` 纳秒,分析 `4` 纳秒,执行 `1` 纳秒,那么这条指令的流水线周期为 `4` 纳秒。 ### 流水线时间计算公式 ``` 取指时间 + 分析时间 + 执行时间 + ( n - 1 ) * 流水线周期 ``` **解释:** - `取指时间 + 分析时间 + 执行时间` 是 第1条指令的时间,因为第1条指令 **没有并行** - `n - 1` :是不包括第1条指令,指后面的指令 ### 流水线的最大吞吐量(率) [](https://www.malaoshi.top/upload/0/0/1GWs4DdbDJW.png) **解释:** - k:一般是3,表示取指、分析、执行3个阶段 - n:条数 - tmax:流水线周期 当 `n` 趋向无穷大时,`k`、`-1` 都不影响结果,忽略。最后 `n` 再约去,所以就是 `1 / tmax` ``` 指令条数 / 流水线的执行时间 ``` 原文出处:http://malaoshi.top/show_1GWs2WrSUnR.html