短语 "hit-under-miss" 中的 "under" 是什么意思?

What's the meaning of "under" in phrase "hit-under-miss"?

ARM website 包含对称为“HUM”(未命中)的功能的解释。

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

在这种情况下,“under”一词的意思可能是“期间”,如“在(在这种情况下)从之前的失误中恢复过来时被击中”。

目的是让 load/store 单元在等待 linefill(从可缓存内存传输到缓存)从之前的未命中中恢复时继续自由访问内存。在没有后续未命中的情况下无需停顿:

hit hit miss linefill -------> carry-on
             hit hit hit hit >

但是,如果在行填充处于活动状态时发生未命中,则会发生停顿 。那时,在第一个行填充完成之前不会发生进一步的操作,此时停顿将“un-stall”并发出另一个行填充。

hit hit miss linefill ----------------> carry-on
             hit hit miss/stall         linefill ---> carry on
                                        hit hit hit >

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

                              +--- linefill <-----+
                              |   (via amba)      |
                              V                   |
                          +--------+      +-----------------+
                      +-> | dcache | .... | cachable memory |
+-----------------+   |   +--------+      +-----------------+
| load/store unit | <-+ 
+-----------------+   |   +---------------------+
                      +-> | non-cachable memory |
                          +---------------------+

一旦行填充开始,如果 load/store 单元只读取:

,则没有停顿
  • 已在 dcache 中的可缓存内存;或
  • non-cachable内存。

ARMv6 之前,如果 cache-miss 发生,整个管道就会停止。
HUM 表示独立指令继续执行,即使 cache-miss 发生。

1:
ldr r0, [r10], #4
lsl r1, r1, #2
subs r9, r9, #1
add r1, r0, r1
bgt 1b

无 HUM:下一条指令 lsl 被执行 AFTER cache-miss 惩罚(数十个周期) 嗡嗡声:第一个 dependent 指令add 必须等待。先前的指令 lslsubs 无论如何都会执行。