Architecture 什么是流水线?它如何提高执行速度?

Architecture 什么是流水线?它如何提高执行速度?,architecture,assembly,arm,pipelining,Architecture,Assembly,Arm,Pipelining,我相信,如果有什么问题困扰着你,那就没有什么问题是愚蠢的。我有一个关于管道内衬的问题 什么是管道内衬? 理论上说:“通过流水线,CPU在第一条指令完成之前开始执行第二条指令。流水线导致更快的处理,因为CPU不必等待一条指令完成机器周期。” 我的问题是考虑到我在一个单处理器系统上工作,在这个系统中一次只能执行一条指令,当我的CPU忙时,如何可能同时执行获取下一条指令的操作?如果我缺乏概念上的清晰,请给我一些启发。如果有单独的硬件使同时处理发生,那是什么?请解释。确实有单独的硬件用于抓取。有一大堆独

我相信,如果有什么问题困扰着你,那就没有什么问题是愚蠢的。我有一个关于管道内衬的问题

什么是管道内衬?

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


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

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

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


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

与其尝试在这个文本框中塞满一年的大学课程,我将向您介绍一本教科书,该教科书详细解释了整个主题:


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

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

  • 解析(二进制编码的)指令,找出它是哪条指令
  • 一旦识别出它是一条
    addi
    指令,就解析出源寄存器和目标寄存器以及要添加的文本整数
  • 读取相应的寄存器,并计算其值与立即整数之和
  • 将结果写入命名结果寄存器
  • 现在请记住,所有这些都需要在硬件中构建,这意味着这些东西都有与之相关的物理电路。如果一次执行一条指令,四分之三的电路将处于空闲状态,一直无所事事。流水线利用了这一观察结果:如果处理器需要在一行中执行两条
    addi
    指令,那么它可以:

  • 确定第一个
  • 解析第一个,并使用否则将处于空闲状态的电路识别第二个
  • 添加第一个,然后解析第二个
  • 写出第一个,加上第二个
  • 写出第二个
  • 所以现在,即使每条指令需要4轮处理,处理器总共只在5轮中完成了两条指令


    这变得复杂了,因为有时你必须等待一条指令完成,然后才能知道下一条指令要做什么(甚至下一条指令是什么),但这是最基本的想法。

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

    管道中典型的简单阶段是fetch、decode和execute三个阶段。执行一条指令至少需要三个时钟(由于I/O速度慢,通常需要更多时钟),比如说管道中的三个阶段。虽然指令a处于执行阶段,但指令b被解码,指令c被提取。回到汽车工厂,他们可能会生产“每7分钟一辆车”,这并不意味着制造一辆车需要7分钟,制造一辆车可能需要一周的时间,但他们每7分钟就会开始一辆新的,而且每个站点的平均时间是这样的,你可以每7分钟推出一辆。这里也是一样,使用管道并不意味着您可以以处理器的时钟速率获取、解码和执行这三个步骤。像工厂一样,它更多的是 一件普通的事情。如果您可以以处理器时钟速率向管道中的每个阶段馈电,那么它将每个时钟完成一条指令(如果设计为这样做的话)。如今,你无法提供fa提供的数据/指令