是否有可能在MIPS中,指令的某些步骤先于流水线结构中的前一步骤?

时间:2013-10-07 22:58:11

标签: mips pipeline computer-architecture instruction-set

这是一个关于计算机体系结构的问题,希望有人有线索。更具体地说,它是关于MIPS指令的流水线流程。但我对它的某些方面感到模糊不清。因为我目前没有足够的声誉所以我无法发布图像。

  1. S(失速)是否意味着没有以下说明可以利用摊位的时间段?

  2. 两个连续指令可以在同一个时隙中都有X(执行)吗?

  3. 指令的M(内存访问)和W(回写)是否有可能在其前一个指令的流水线结构中出现?

  4. 在循环的情况下,最后一条指令是第一条指令的重复,为什么最后一条指令中有2个F(取指)?

1 个答案:

答案 0 :(得分:3)

对于问题1,在一个简单的标量管道中,一个摊位引入了一个不能弹出的管道泡沫"。为了允许稍后在程序顺序中的指令填充管道气泡,该指令必须经过停顿的指令。支持这种指令的重新排序增加了流水线的复杂性,这往往会增加设计和生产成本以增加流水线深度或周期时间(以及每个活动周期使用更多的能量[out-of即使在活动时使用更多能量,订单执行也可以更加节能。支持这种重新排序所需的机制也增加了解释管道的复杂性。

对于问题2,使用更复杂的管道,可以同时开始执行多个指令。这种处理器称为超标量。对于有序执行,只有连续序列中的指令(按程序顺序)可以同时开始执行,这要求指令不具有数据依赖性,并且有足够的硬件资源可用于执行指令并处理它们结果。对于有序微体系结构,早期流水线阶段的宽度通常与后续流水线阶段的宽度相同,但缓冲将允许多个指令在失速后累积。

(即使只有两个宽的执行,通常还有额外的限制可以并行执行什么类型的指令。例如,一个执行端口可能无法处理内存访问或分支,而另一个执行端口可能会处理这些指令但对于相对昂贵的操作(如移位和乘法),有两个硬件副本会增加大小,限制存储器访问和分支的数据路径可以简化设计并可能减少延迟。)

对于问题3,乱序执行允许重新排序指令,因此稍后按程序顺序的指令可以在较早的指令之前执行并将结果写回寄存器文件。在处理异常/中断和仲裁寄存器写端口使用(或增加写端口数)方面存在一些额外的复杂性,按顺序处理器也可以按程序顺序写回结果。摩托罗拉88110(从20世纪90年代初开始)是一个处理器的例子。为了处理异常,88110有一个历史缓冲区来保存数据,这些数据被稍后按程序顺序的指令覆盖,而不是异常。 88110每个寄存器文件都有两个额外的读端口,用于读取目标寄存器中的数据,并将其写入历史缓冲区。

对于问题4,我猜你的意思是循环体仅由一条指令组成。对于典型的RISC指令集,控制循环的分支指令是与执行计算或存储器访问的指令分开的指令,因此循环实际上包含两个指令。 (Power,以前的PowerPC,可以使用一个指令延迟循环,使用分支计数器递减特殊计数器寄存器,但优化指令读取以实现这种特殊代码的简单实现将是愚蠢的。)

对于具有延迟分支的简单经典5阶段管道,从性能角度来看没有意义以避免指令缓存访问,因为循环分支即使在采用时也不会引入管道气泡。这意味着没有机会执行更多指令。但是,在一些微架构中,重定向指令获取到非顺序地址会引入流水线气泡(特别是如果从指令获取需要多于一个周期),提供一个小的快速访问缓冲区可以提高性能。 (指令获取带宽限制也可以证明缓冲区的性能;小缓冲区可以提供比大缓存或片外存储器更高的带宽。)此外,减少能源使用,使用一个循环缓冲区很有意义,但几乎肯定不会想要将缓冲区的大小限制为只有两个指令(分支加一个" body"指令),因为这种微小的循环是罕见的,甚至增加了缓冲区大小为8条指令只会添加适量的硬件。

为了专门处理小体环的情况,必须检测这种环。虽然缓冲区总是可以用最后N条指令填充(以避免第一次遇到短后向分支而不是#34;在循环缓冲区中按下#34;并且这样的缓冲区也可以使取指令中的变化均匀这可能是由跨越缓存行边界,缓存未命中,获取重定向延迟等引起的,有必要检查每个分支指令以查看它是否针对缓冲区内的指令。 (甚至可以为循环分支指令提供特殊存储,因为仅在检查条件时需要存储,循环缓冲区中的小索引以及分支在何处的指示,但短循环可能不够常见对于这种专用硬件。)实际上,循环缓冲区可以是非常小级 0 指令缓存

(分支目标指令缓存[BTIC]是与循环缓冲区类似的机制,而不是仅从最近的循环分支的目标缓存指令,而是BTIC缓存来自目标的指令最近的一些分支.BTIC主要用于隐藏指令获取延迟。)

在教授管道时,通常最初会避免这种复杂因素。