ARM 网站包含对称为“HUM”(hit-under-missing)的功能的说明。
看来“under”可以解释为“after”或“follow”,意思是前面的访问是未命中,而后续的访问是命中。这种理解正确吗?如果,我想知道使用“下面”这个词是否有特殊的上下文(即使用空间关系而不是时间关系)。
在这种情况下,“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)
一旦行填充开始,只要加载/存储单元仅读取以下内容,就不会出现停顿: