MIPS r10000 fetch如何隐藏指令缓存延迟?

MIPS r10000 fetch如何隐藏指令缓存延迟?,mips,cpu-architecture,processor,Mips,Cpu Architecture,Processor,我正在研究项目的不同管道阶段。报纸说 该处理器每次从指令缓存中获取4条指令。但指令缓存的延迟必须超过一个周期,虽然我不知道指令缓存的准确命中延迟,但处理器中一级数据缓存的命中延迟约为4个周期 因此,如果我们假设一级指令缓存延迟为3-4个周期,那么处理器如何在每个周期提取4条指令?MIPS R10000具有单周期延迟指令缓存,并且可以在没有对齐约束的情况下提取缓存块内四条指令的连续块 机械地说,这可能意味着它使用了至少部分独立寻址的四个SRAM组(缓存集地址解码可以共享)。 由于每个银行都是独立

我正在研究项目的不同管道阶段。报纸说 该处理器每次从指令缓存中获取4条指令。但指令缓存的延迟必须超过一个周期,虽然我不知道指令缓存的准确命中延迟,但处理器中一级数据缓存的命中延迟约为4个周期


因此,如果我们假设一级指令缓存延迟为3-4个周期,那么处理器如何在每个周期提取4条指令?

MIPS R10000具有单周期延迟指令缓存,并且可以在没有对齐约束的情况下提取缓存块内四条指令的连续块

机械地说,这可能意味着它使用了至少部分独立寻址的四个SRAM组(缓存集地址解码可以共享)。

由于每个银行都是独立可寻址的,如图中所示,十六个字中包含的四个字的任何连续序列都可以访问。寻址行[0,0,0,0]获取字[0,1,2,3](字0-3);行[1,0,0,0]获取字[4,1,2,3](字1-4);行[1,1,0,0]获取单词[4,5,2,3](单词2-5)。。。;行[3,3,3,2]获取单词[12,13,14,11](单词11-14);行[3,3,3,3]获取单词[12,13,14,15](单词12-15)

(同一银行业务可能会跨越缓存块边界,但随后必须并行确认两个缓存块命中。对先前访问的方式进行记忆将减少到一个集合检查,用于在较大缓存块中进行顺序访问的常见情况;一个集合将使用记忆方式,另一个将执行正常的che输入新缓存块时,请勾选。跨页也是一个类似的问题。)

(多指令提取的常见替代方案具有自然对齐块(例如16字节)的对齐约束。)

在第二管道阶段(解码)中检测到分支之前,此处理器没有重定向指令提取,因此,即使预测正确,执行的分支也会引入一个周期气泡。由于执行在第四个管道阶段开始,指令的执行顺序不正确,因此,直到一些周期之后,才可能确定错误的预测。(错误预测的执行分支可能会解码已在执行分支气泡中获取的指令,因为这些指令存储在“恢复缓存”中。)

指令缓冲可以消除这样的危险,因为由于数据依赖性和其他危险,吞吐量很少接近最大值

通常,缓存可以在每次取数时提供多个字(自然对齐限制有助于提供区块的单个银行)或在每个周期中访问多次(例如,与管道的其他部分相比,指令缓存的管道化更深入,或者使用昂贵的多端口SRAM)


只要每个周期提供一个新地址,就可以在每个周期提取多个连续指令。如果每个周期有两个可用(预测)地址,则可以在同一周期提取执行分支后的指令。(减少执行的分支惩罚的另一种方法——以及提供其他分支后优化机会——是使用跟踪缓存。)

MIPS的工作频率为200 MHz,而Haswell的工作频率可超过3 GHz。因此,Haswell中的4个周期比R10000中的1个周期要短得多。90年代制造的处理器的缓存访问延迟通常为1或2个周期。多谢了,Haswell中不会出现同样的问题吗?您链接的参考仅说明L1数据cache具有4个周期的访问延迟。这并不一定意味着一级指令缓存具有相同的延迟。尽管它们都是管道化的,但每个周期都可以执行一个访问请求。Haswell中的指令缓存每周期的吞吐量为16字节。在支持推测性执行的处理器中,例如Haswell和MIPS R10000,L1I延迟只对分支预测失误惩罚有影响……我不知道R10000是否使用L1I的流水线设计来实现指令缓存的1个周期延迟(这就是为什么我没有发布答案),但它的延迟可能是2个周期(就像我认为的数据缓存一样)但它是流水线的,因此每个周期都可以执行请求。一般来说,指令缓存必须能够在每个周期至少提供一条指令(就吞吐量而言,不一定是延迟)。否则,时钟频率会太高,只会浪费电源,这是一种荒谬的设计。这基本上是管道的提取阶段,这是第一阶段。对于负载缓冲区数量较少的顺序管道或低功耗CPU,L1D缓存必须具有最小的延迟。例如,Intel atom处理器的L1D延迟均为3个周期。您能帮我理解四库提供的单词序列吗?我看不出其背后的逻辑。@MargaretBloom图表和扩展文本是否充分解释了银行业务的工作原理?是的!非常感谢!回答得很好!@mathworker MIPS R10000没有BTB。我t使用一个专用的44位加法器来计算分支地址(根据用户手册)。来自Linley Gwennap的“MIPS R10000使用解耦架构”:“由于解码分支需要一个周期,使用的分支会产生一个“气泡”在获取流“.@mathworker”中,该图还仅表示访问了分支历史表,而不是BTB。该文件的文本还表示:“它将跳转的目标地址加载到程序计数器中,并在一个周期延迟后从缓存中获取新指令。这引入了一个“分支气泡”Yeager在R12000上的论文还指出:“添加了一个32条目的“分支目标地址缓存”(BTAC),以避免在管道中引入“分支气泡”