我相信,如果这是在惹你生气,那就毫无疑问了。我有关于管道衬里的问题吗?
什么是管道衬里?
理论说:“通过流水线操作,CPU在第一条指令完成之前开始执行第二条指令。流水线导致处理速度更快,因为CPU没有等待一条指令完成机器循环。“
我的问题是考虑我正在开发一个单处理器系统,一次只能执行一条指令,当我的CPU忙时,如何同时执行取出下一条指令?如果我缺乏概念清晰度,请对我有所启发。如果有单独的硬件使同时处理发生,它是什么?请解释一下。
答案 0 :(得分:10)
流水线与单处理器系统无关。这与在硬件上执行机器上的单个指令所采取的步骤有很大的关系。
想象一下,您希望实现MIPS“add-immediate”指令addi $d, $s, $t
,该指令将存储在$s
命名的寄存器中的整数添加到直接编码的整数$t
中。指令,并将结果存储在$t
命名的寄存器中。考虑一下您需要采取的步骤。这是打破它的一种方法(例如,这不一定与真实硬件相对应):
addi
指令,就会解析出源寄存器和目标寄存器以及要添加的文字整数。现在请记住,所有这些都需要在硬件中构建,这意味着每个物体都有与之相关的物理电路。如果你一次执行一条指令,这些电路的四分之三将处于空闲状态,一直无所事事。流水线技术利用了这一观察结果:如果处理器需要连续执行两条addi
指令,那么它可以:
所以现在,即使每条指令需要4个处理轮次,处理器总共只完成5轮完成两条指令。
这很复杂,因为有时你必须等到一条指令完成才知道下一条指令要做什么(或者甚至是下一条指令要做什么),但那是基本的想法。 / p>
答案 1 :(得分:9)
确实有用于获取的单独硬件。有一大堆独立的硬件,排列在一个管道中。每个部分同时执行单独指令的一部分。在每个时钟边沿,一个阶段的结果将传递到下一个阶段。
答案 2 :(得分:5)
我不会试图将一年的大学课程塞进这个文本框,而是指向一本教科书,详细解释整个主题:
答案 3 :(得分:3)
想想那些如何制作或其他电视节目,你看到一个工厂在行动。想想你可能已经读过或看过的关于汽车工厂的信息。 “汽车”作为框架或车身从工厂开始移动,并在移动时添加东西。如果你坐在建筑物的外面,你会看到轮胎,油漆罐和钢丝卷和钢卷进入建筑物,并有稳定的汽车流出。仅仅因为它是单个(单处理器)工厂并不意味着它不能拥有装配线(管道)。具有管道的单处理器实际上不是必须一次执行一条指令,而不是工厂中的汽车一次构建一辆汽车。这辆车的一点点构造发生在它经过的每个车站,同样地,你的程序的执行在管道中的每个站点发生一点点。
管道中的典型简单阶段是获取,解码和执行三个阶段。执行一条指令需要三个时钟,最小(通常由于I / O缓慢而导致更多),可以说管道中有三个阶段。虽然指令a处于执行阶段,但是指令b正在被解码并且指令c被取出。回到汽车工厂,他们可能会生产“每7分钟一辆车”,这并不意味着制造汽车需要7分钟,制造汽车可能需要一周的时间,但他们每7分钟开一个新车,平均每个车站的时间是这样的,你可以每隔7分钟滚出一个车门。同样在这里,使用管道并不意味着您可以以处理器的时钟速率获取,解码和执行所有三个步骤。就像工厂一样,它更像是 平均的事情。如果您能够以处理器时钟速率为流水线中的每个级提供信号,那么它将在每个时钟完成一条指令(如果设计的话)。这些天你不能快速提供数据/指令,并且存在管道停滞等,这导致你必须重新开始或丢弃一些进度并备份一些。
流水线操作只是采用装配线方法在处理器中执行指令。
答案 4 :(得分:0)
我认为它是在代码中有分支时使用的,逻辑预测将采用哪个分支,并将该分支的指令预加载到缓存中。如果预测被证明是假的,那么它需要丢弃那些指令并加载备用,导致丢失。但我相信代码中有一些模式可以使预测更加频繁,尤其是现代编译器反复重复模式。
我不了解实际的实现,但我并不认为必须使用额外的硬件,尽管它对最佳速度很有用。