流水线是如何实现的?我们可以读取现代微处理器的固件吗?

How is pipelining implemented? Can we read the firmware of a modern microprocessor?

我的问题有两个相关部分。

首先,大多数现代微处理器都采用流水线和其他方式来更快地执行代码。他们如何实施?我的意思是,是固件还是其他什么?

其次,如果是固件的话,请问我可以读读固件看看代码吗?

抱歉,我对微处理器知之甚少。

处理器设计中的流水线是一个硬件概念;如果指令流在流程和指令流中利用一点并行性,并通过分解逻辑中的关键路径,指令流可以执行得更快。在硬件中,对于给定的设计(技术上是实现),您只能 "run" 它这么快;即信号通过所有逻辑传播需要一些时间。在最坏情况下可能花费的最长时间是关键路径,它定义了设计可以 运行 的最大时间(或频率)(这是最大时钟速度的来源)。

现在,在最简单的处理器中处理一条指令可以分为三个主要部分:从内存中取出指令(即fetch),将指令解码成它的部分(decode),以及实际执行指令(execute) ).对于每条指令,它都被提取、解码、执行;然后是下一条指令,然后是下一条指令。

每个阶段的硬件都有一个关键路径,即在最坏情况下可能花费的最长时间(Tmax_fetch 用于获取阶段,Tmax_decode 用于解码,Tmax_exec 执行)。因此,对于没有流水线(或单周期)的处理器,完整处理器的关键路径是所有这些阶段将是这些关键路径的总和(这在实际设计中不一定正确,但我们将使用它作为一个简化的例子),Tmax_inst = Tmax_fetch + Tmax_decode + Tmax_exec。所以,通过4条指令到运行,需要4 * Tmax_inst = 4 * Tmax_fetch + 4 * Tmax_decode + 4 * Tmax_exec.

流水线允许我们使用硬件寄存器来分解这些关键路径(与程序员寄存器不同,ARM 中的 r2 就是一个例子),但这些寄存器对固件是不可见的。现在,Tmax_inst 不再是阶段的总和,它现在只是最大阶段的三倍,Tmax_inst = 3 * Tmax_stage = 3 * max(Tmax_fetch, Tmax_decode, Tmax_exec) 因为处理器必须 "wait" 才能在最慢的阶段完成最坏的情况下。现在处理器对于单个指令的速度变慢了,但是由于流水线的原因,我们可以独立地执行这些阶段中的每一个,只要在每个 stsge 中处理的指令之间没有依赖关系(比如分支指令,其中获取stage can't 运行 until the branch is executed).因此,对于四个独立的指令,处理器将只取 Tmax_stage * (3 + 4 - 1),因为流水线允许提取第一条指令,然后在提取第二条指令的同时进行解码,依此类推。

这应该有助于更好的 exolain 流水线,但直接回答您的问题:

  1. 这是一个硬件设计概念,所以在硬件中实现,而不是固件
  2. 由于是硬件概念,没有固件代码可读。