“清除数据高速缓存未命中”和“脏数据高速缓存未命中”之间的区别

时间:2018-09-20 07:14:07

标签: caching cpu-cache

脏数据缓存未命中干净数据缓存未命中有什么区别?

我在CPU手册中找到了这两个计数器,并想知道哪种方法是对代码中的数据访问效率进行说明的正确方法。

在我当前的程序中,干净的未命中= 102271,而肮脏的未命中= 1323。

  • 何时会发生清除未命中,是否会在清除未命中时从内存中加载数据?
  • 什么时候会发生肮脏的错过? (编辑:实际上这很清楚)

1 个答案:

答案 0 :(得分:1)

对于每个the manual,数据高速缓存脏未命中都描述为“需要高速缓存写回/逐出)”。

这是错误的措词。我希望更可能的意图是,如果修改了碰到的行,因此不得不将其写入内存,则这些缓存未命中事件之一将被视为脏事件。这与干净的高速缓存未命中之间的区别在于,干净的未命中既不逐出一条线,也不逐出未修改的行,因此可以通过丢弃它而不将其写入内存来简单地逐出。如果这种解释是正确的,那么如果只说“需要缓存写回”,则描述会更加清楚。

如果注释是按字面意义使用的,则“ /”表示“或”,则意味着如果缓存未命中事件必须将数据写入内存或逐出一行,则该事件被视为脏事件。那么,干净的缓存未命中将是不必逐行删除的缓存。这是一种不太可能的解释,因为在初始化高速缓存且尚未填充选定的高速缓存集之后,或者在没有行的情况下,典型设计的高速缓存只有一次不必驱逐一行来腾出空间来插入新行已从缓存中手动逐出。通常,行被保留在缓存中,直到被强行逐出为止,因此缓存的正常状态是每个缓存集已满。在这种“干净的缓存未命中”的意义上,干净的缓存未命中将很少见,并且针对它们的计数器通常不会有用。另外,措辞将是多余的,因为当由于未命中而导致对高速缓存进行写回时,也会有逐出,因此,“要求进行高速缓存回写/逐出”在逻辑上等同于“需要逐出”。 ”