为什么这个程序导致如此多的缓存未命中?

时间:2013-04-14 03:42:09

标签: c performance caching

我在下面的练习考试中遇到了关于缓存性能的问题。你能给我一些关于如何解决它的提示吗?这是我的答案草案:

  1. 数组a,b跨越整个32页的缓存。
  2. 循环运行两次,因此第一个循环将预热缓存。 2048是第一个循环中a [i],b [i]赋值引起的冷未命中数。
  3. 在OS1中,缓存被虚拟索引,因为翻译在试验1和3中导致更多缓存未命中(尽管我无法解释试验2和3中的显着下降和增加)。
  4. 在OS2中,缓存是物理索引的。
  5. 在(c)部分中,减少缓存未命中的候选页面放置策略是页面着色和bin跳跃,但我不知道如何决定使用哪一个。
  6. 我很欣赏任何提示。谢谢。

    enter image description here

1 个答案:

答案 0 :(得分:0)

a)缓存是物理索引的。操作系统正在分配“随机”物理页面,导致测试结果出现较大偏差。如果缓存被虚拟索引,则测试结果不会有很大的偏差(因为使用的虚拟地址不会有很大偏差)。

b)最可能的解释是第二个操作系统没有分配“随机”物理页面(例如某种页面着色方案 - 见http://en.wikipedia.org/wiki/Cache_coloring)。

c)我使用搜索引擎来发现有关OS 2使用的策略的更多信息。

注1:我不知道最后一个问题的答案应该是什么(对我来说似乎是一个愚蠢的问题)。

注2:缓存是硬件,在安装不同的操作系统时,不会神奇地重新设计自己的芯片(例如从虚拟索引到物理索引)。