我使用 perf 作为基本事件计数器。我正在开发一个遭受数据缓存存储未命中的程序。其中比例高达80%。
我知道缓存原则上是如何工作的。它会在各种未命中情况下从内存加载,并在需要时从缓存中删除数据。我不明白的是:存储未命中和加载未命中之间有什么区别。它与加载和存储有何不同。你怎么能储存错过呢?
加载未命中(如您所知)是指处理器需要从主内存中获取数据,但缓存中不存在数据。因此,每当处理器想要从主内存中获取一些数据时,它就需要缓存,如果数据已经加载,您将获得加载命中,否则您将获得加载未命中。
存储未命中与处理器何时要将新计算的数据写回主存有关。当要将数据写回主存时,必须确保高速缓存和主存的内容一致彼此同步。您可以在此处找到两种不同的政策,这可能会发生:撰写政策 http://en.wikipedia.org/wiki/Cache_%28computing%29#Writing_policies.
所以无论你选择什么策略,你首先需要检查数据是否已经在缓存中,以便你可以先将其存储到缓存中(因为它更快),以及你要查找的数据块是否已从缓存中逐出,您会得到与该缓存相关的存储未命中。
你可以检查小程序在这里 http://www.cs.iastate.edu/~prabhu/Tutorial/CACHE/interac.html,更好地了解不同场景中会发生什么。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)