12

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

什么是管道内衬?

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

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

4

5 回答 5

11

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

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

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

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

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

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

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

于 2012-03-04T02:12:56.870 回答
9

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

于 2012-03-04T01:43:46.260 回答
5

我不会试图将为期一年的大学课程塞进这个文本框,而是指向一本教科书,该教科书清楚地详细解释了整个主题:

轩尼诗,约翰·L。和 Patterson, David A.计算机体系结构,第五版:定量方法。摩根考夫曼。

于 2012-03-04T02:04:31.403 回答
3

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

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

Pipelining is simply taking an assembly line approach to executing instructions in a processor.

于 2012-03-05T00:34:55.510 回答
0

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

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

于 2012-03-04T01:47:46.610 回答