“干净数据缓存未命中”和“脏数据缓存未命中”之间的区别

Posted

技术标签:

【中文标题】“干净数据缓存未命中”和“脏数据缓存未命中”之间的区别【英文标题】:difference between "clean data cache miss" and "dirty data cache miss" 【发布时间】:2018-09-20 07:14:06 【问题描述】:

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

我在我的 CPU 手册中找到了它们的计数器,并想知道哪一个是正确衡量代码中数据访问效率的指标。

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

什么时候会发生干净未命中,是否会在干净未命中时从内存中加载数据? 什么时候发生脏错? (编辑:其实这很清楚)

【问题讨论】:

哪个 CPU?什么手册? 来自英飞凌(see here)的三核。第 12.10 章。 【参考方案1】:

根据the manual,Data Cache Dirty Misses 被描述为“需要缓存回写/逐出”。

这是不好的措辞。我预计更可能的意图是,如果这些缓存未命中事件之一被认为是脏的,如果它碰巧驱逐的行被修改,因此必须写入内存。这与干净的缓存未命中之间的区别在于,干净的未命中要么没有驱逐一行,要么驱逐了未修改的行,因此可以简单地通过丢弃它而不将其写入内存来驱逐它。如果这个解释是正确的,那么描述会更清楚,如果它只是说“需要缓存写回”。

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

【讨论】:

以上是关于“干净数据缓存未命中”和“脏数据缓存未命中”之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

如何实现消费者和生产者之间的快速和慢速工作人员之间的通信?

树的每对顶点之间的最大流量和

javascript/jquery 介于 -13 和 13 之间的随机数,不包括 -3 和 3 之间的数字

div和div之间的空隙如何设置

生产者和消费者之间之间主要是______关系,这样就形成了______.

Android如何在Activity和Service之间传递数据