“hit-under-miss” 中的 “under” 是什么意思?

bru*_*uin 1 caching arm

ARM 网站包含对称为“HUM”(hit-under-missing)的功能的说明。

看来“under”可以解释为“after”或“follow”,意思是前面的访问是未命中,而后续的访问是命中。这种理解正确吗?如果,我想知道使用“下面”这个词是否有特殊的上下文(即使用空间关系而不是时间关系)。

pax*_*blo 5

在这种情况下,“under”一词可能意味着“期间”或“同时”,如“在(从先前的未命中中恢复的情况下)击中”中。

目的是让加载/存储单元在等待行填充(从支持高速缓存的内存传输到高速缓存)以从先前的未命中中恢复时继续自由访问内存。在没有后续遗漏的情况下无需停止:

Advancing time =======================>

hit hit miss/line-fill ------> carry-on
             hit hit hit hit >
Run Code Online (Sandbox Code Playgroud)

然而,如果当前正在执行行填充时发生未命中,则会发生停顿。此时,在第一个行填充完成之前不会发生任何进一步的操作,此时停顿将“解除停顿”并且下一个行填充将开始(以及任何未错过的情况):

Advancing time ================================================>

miss/line-fill --------> carry-on
     hit miss/stall ...> line-fill ----> carry on
                         miss/stall ...> line-fill ---> carry on
                                         hit hit ----->
Run Code Online (Sandbox Code Playgroud)

也许更图形化的查看方式是在下面的简化框图中:

          +--------+
      +-> | dcache | <---+ linefile
      |   +--------+     | (via amba)
      V             +----------+
+------------+      | cachable |
| load/store |      |  memory  |
|    unit    |      +----------+
+------------+
      ^         +--------------+
      |         | non-cachable |
      +-------> |    memory    |
                +--------------+
Run Code Online (Sandbox Code Playgroud)

一旦行填充开始,只要加载/存储单元仅读取以下内容,就不会出现停顿:

  • 已经在 dcache 中的可缓存内存;或者
  • 不可缓存的内存。