【问题标题】:What is pipelining? how does it increase the speed of execution?什么是流水线?它如何提高执行速度?
【发布时间】:2012-03-22 00:49:34
【问题描述】:

我相信,如果它困扰着您,那么任何问题都是愚蠢的。我有这个关于管道内衬的问题?

什么是管道内衬?

理论说:“使用流水线,CPU 在第一条指令完成之前开始执行第二条指令。流水线导致更快的处理,因为 CPU 没有等待一条指令完成机器周期。”

我的问题是考虑我正在使用单处理器系统,一次只能执行一条指令,当我的 CPU 忙时,如何同时执行获取下一条指令的操作?如果我缺乏概念上的清晰度,请给我一些启发。如果有单独的硬件使同时处理发生,那是什么?请解释一下。

【问题讨论】:

  • 这正是亨利福特 100 年前所做的。您不必等待一辆车(或指令)完成后才开始处理下一辆车。
  • 我很惊讶没有人提到它,但流水线增加了吞吐量,从而实现了更好的 IPC 和性能。

标签: architecture assembly arm pipelining


【解决方案1】:

想想那些你看到工厂在运作的地方是如何制作的或其他电视节目。想想你可能读过或看到的关于汽车工厂的事情。 “汽车”从框架或车身开始在工厂中移动,并在移动时添加东西。如果你坐在大楼的外面,你会看到轮胎、油漆罐、电线和钢卷进入大楼,并且源源不断的汽车驶出。仅仅因为它是单个(单处理器)工厂并不意味着它不能拥有装配线(管道)。具有流水线的单处理器实际上并不一定一次执行一条指令,就像工厂中的汽车一次制造一辆汽车一样。那辆车的一点点构造发生在它经过的每个站,同样你的程序的执行在管道中的每个站发生一点。

管道中典型的简单阶段是获取、解码和执行三个阶段。执行一条指令需要三个时钟,最少(由于 I/O 速度慢,通常更多)可以说管道中的三个阶段。虽然指令 a 处于执行阶段,但您有指令 b 正在解码并且指令 c 正在获取。回到汽车厂,他们可能会生产“每 7 分钟一辆车”,这并不意味着制造一辆汽车需要 7 分钟,制造一辆汽车可能需要一周时间,但他们每 7 分钟就开始一辆新汽车,平均每个车站的时间是这样的,你可以每 7 分钟推出一个。同样在这里,使用管道并不意味着您可以以处理器的时钟速率获取、解码和执行所有三个步骤。像工厂一样 一个普通的东西。如果您可以以处理器时钟速率馈送流水线中的每个阶段,那么它将在每个时钟完成一条指令(如果设计为这样做的话)。如今,您无法快速提供数据/指令,并且存在管道停顿等情况,这导致您必须重新开始或放弃一些进度并备份一些。

流水线只是采用流水线方法在处理器中执行指令。

【讨论】:

    【解决方案2】:

    流水线与单处理器系统和多处理器系统无关。它与认真思考在硬件中在机器上执行单个指令所采取的步骤有关。

    假设你想实现 MIPS 的“add-immediate”指令addi $d, $s, $t,它将存储在以$s命名的寄存器中的整数与指令中直接编码的整数$t相加,并存储结果在$t命名的寄存器中。想想你需要采取哪些步骤来做到这一点。这是一种分解方法(仅作为示例,这不一定对应于真实硬件):

    1. 解析(二进制编码的)指令以找出它是哪条指令。
    2. 一旦识别出这是一条addi 指令,解析出源寄存器和目标寄存器以及要相加的字面整数。
    3. 读取相应的寄存器,并计算其值与立即整数之和。
    4. 将结果写入指定的结果寄存器。

    现在请记住,所有这些都需要在硬件中构建,这意味着与这些东西中的每一个都相关联的物理电路。如果您一次执行一条指令,这些电路中有四分之三将处于空闲状态,一直无所事事。流水线利用了这一观察:如果处理器需要连续执行两条addi 指令,那么它可以:

    1. 识别第一个
    2. 解析第一个,并用原本空闲的电路识别第二个
    3. 添加第一个,解析第二个
    4. 写出第一个,添加第二个
    5. 写出第二个

    所以现在,即使每条指令需要 4 轮处理,处理器总共只用了 5 轮就完成了两条指令。

    这变得很复杂,因为有时您必须等待一条指令完成才能知道下一条指令(甚至下一条指令是什么)该做什么,但这是基本思想。

    【讨论】:

    • 还有一件事。通过流水线,功能单元(获取/解码/执行/写回)可以相互独立。所以单元本身可以比整个块更紧凑。这可以提高时钟速度,因为减少了硬件传播延迟(电子需要时间穿过硅并切换晶体管)。
    【解决方案3】:

    与其试图将为期一年的大学课程塞进这个文本框,我会指给你看一本清楚详细地解释整个主题的教科书:

    Hennessy, John L.; and Patterson, David A. Computer Architecture, Fifth Edition: A Quantitative Approach. Morgan Kauffman.

    【讨论】:

    • 我还记得第二版。来自大学,预测 x86 即将热死。无论如何都很棒的书。
    • 原来我在课堂上实际看的书不是 Hennessy 和 Patterson,而是 Patterson 和 Hennessy 的“计算机组织与设计:硬件-软件接口”,第 2 版。 amazon.com/Computer-Organization-Design-Fourth-Architecture/dp/… 太混乱了!
    • 我可以直接阅读第5版还是必须阅读以前的版本?问它,以便我可以相应地购买这本书。请回复。
    • @happy2Help 您可以从当前版本开始;以前的版本只是同一本书的旧版本。毕竟,作者必须更新他们的教科书以跟上新计算机的步伐!同样的作者还有另一本教科书,涵盖了大部分相同的主题,但风格不同:amazon.com/Computer-Organization-Design-Fourth-Architecture/dp/…你可以看看两者,看看哪个更适合你。 “硬件/软件”接口是我在课堂上实际使用的接口。
    • 嘿。谢谢。我从网上阅读了 CA 的第 1 章。我发现它真的很好并订购了它。将阅读并让您知道。感谢您推荐一本好书。
    【解决方案4】:

    确实有单独的硬件用于获取。有一大堆独立的硬件,排列在管道中。每个部分同时执行单独指令的一部分。在每个时钟沿,一个阶段的结果都会传递到下一个阶段。

    【讨论】:

    【解决方案5】:

    我认为当代码中有分支时使用它,并且逻辑预测将采用哪个分支,并将该分支的指令预加载到缓存中。如果预测被证明是错误的,那么它需要丢弃这些指令并加载备用指令,从而导致损失。但我相信代码中的某些模式可以使预测更频繁地成为现实,尤其是对于一遍又一遍地重复模式的现代编译器。

    我不了解实际的实现,但我并不认为需要额外的硬件,尽管它对于优化速度很有用。

    【讨论】:

    • 不,这只是分支预测。虽然它在概念上与流水线的一部分相似(对一些指令到达之前进行内存访问),但它是一个完全不同的野兽 AFAIK。
    • 是的,这是不同的。
    • 我查了一下,发现了一个(也是?)简单的动画here:。但我想知道......这种技术是否只用于 risc 处理器,还是它刚开始的地方?
    • @Marty:当处理器执行一个分支时,它的流水线中已经填满了紧随分支之后的指令。因此,如果它采用分支,则管道中的所有内容都无法使用,处理器必须将其全部丢弃并开始在分支目的地加载指令。所以分支预测是处理器试图猜测在分支之后执行哪条指令,这样它就不必刷新它的管道。而且你现在很难找到不使用流水线的处理器。
    • 谢谢;我想我的硬件理论有点落后。很难跟上新的编程技术。回到我刚开始的时候,我在硬件之上,这可能就是从那以后它一直走下坡路的原因。 :) 现在,8080,这很容易!
    猜你喜欢
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 2019-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多