【问题标题】:How does MIPS r10000 fetch hide instruction cache latency?MIPS r10000 如何获取隐藏指令缓存延迟?
【发布时间】:2019-02-14 02:48:25
【问题描述】:

我正在研究mips r10000 的不同流水线阶段。论文说 该处理器每次从指令缓存中获取 4 条指令。但是指令缓存的延迟必须超过一个周期,虽然我不知道指令缓存的确切命中延迟,Haswell处理器中的L1数据缓存的命中延迟大约是4个周期。

如果我们假设 L1 指令缓存延迟为 3-4 个周期,处理器如何每个周期获取 4 条指令?

【问题讨论】:

  • MIPS 的工作频率为 200 MHz,而 Haswell 的工作频率超过 3 GHz。因此,Haswell 中的 4 个周期比 R10000 中的 1 个周期要短得多。 90 年代制造的处理器通常具有 1 或 2 个周期的缓存访问延迟。
  • 谢谢,Haswell 不会出现同样的问题吗?
  • 您链接的参考仅表明 L1 数据缓存 的访问延迟为 4 个周期。这并不一定意味着 L1 指令缓存具有相同的延迟。尽管它们都是流水线的,因此每个周期都可以执行访问请求。 Haswell 中的指令缓存具有每个周期 16 字节的吞吐量。在支持推测执行的处理器(例如 Haswell 和 MIPS R10000)中,L1I 延迟仅对分支错误预测惩罚很重要......
  • ...我不知道 R10000 是否为 L1I 使用流水线设计设计来实现指令缓存的 1 个周期延迟(这就是我没有发布答案的原因),但它是它的延迟可能是 2 个周期(就像我认为的数据缓存一样),但它是流水线的,因此每个周期都可以执行请求。
  • 一般来说,指令缓存必须能够在每个周期提供至少一条指令(就吞吐量而言,不一定是延迟)。否则,时钟频率会太高,只会浪费功率,这是一种荒谬的设计。这基本上是流水线的 fetch 阶段,也就是第一阶段。在负载缓冲区数量较少的有序流水线或低功耗 CPU 中,L1D 缓存具有最小延迟至关重要。例如,Intel Atom 处理器都有 3 个周期的 L1D 延迟。

标签: mips cpu-architecture processor


【解决方案1】:

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

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

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

(相同的存储可以跨越缓存块边界,但是必须并行确认两个缓存块命中。前一次访问的方式的记忆将减少这为一组检查顺序访问的常见情况较大的缓存块;一组将使用记忆方式,另一组在进入新的缓存块时执行正常检查。页面交叉是类似的问题。)

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

在第二个流水线阶段(解码)检测到分支之前,该处理器不会重定向指令提取,因此即使预测正确,所采用的分支也会引入一个周期气泡。可能直到某些周期后才能确定不正确的预测,因为在第四个流水线阶段开始执行并且指令被乱序执行。 (错误预测的采用分支可能会解码已在采用分支气泡中提取的指令,因为这些指令存储在“恢复缓存”中。)

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

一般来说,缓存可以在每次提取时提供多个字(自然对齐限制有助于单个存储体提供块)或在每个周期被多次访问(例如,比流水线的其他部分更深入地流水线化指令缓存或使用昂贵的多端口 SRAM)。

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

【讨论】:

  • 你能帮我理解一下四行提供的单词顺序吗?我看不出它背后的逻辑。
  • @MargaretBloom 图表和扩展文本是否充分解释了银行业的运作方式?
  • 是的!非常感谢!很好的答案!
  • @mathworker MIPS R10000 没有 BTB。它使用专用的 44 位加法器来计算分支地址(根据用户手册)。摘自 Linley Gwennap 的“MIPS R10000 使用解耦架构”:“由于解码分支需要一个周期,所采用的分支在提取流中创建了一个“气泡”。
  • @mathworker 该图还仅说明访问的是分支历史表,而不是 BTB。该论文的正文还指出:“它将跳转的目标地址加载到程序计数器中,并在一个周期延迟后从缓存中获取新指令。这引入了一个“分支泡沫”循环'。此外,Yeager 关于 R12000 的论文指出:“添加了 32 个条目的“分支目标地址缓存”(BTAC),以避免在管道中引入“分支气泡”。
猜你喜欢
  • 1970-01-01
  • 2012-02-22
  • 1970-01-01
  • 2013-04-16
  • 1970-01-01
  • 2020-02-22
  • 1970-01-01
  • 1970-01-01
  • 2013-05-27
相关资源
最近更新 更多