4

有很多关于缓存相关性能问题的讨论。我对他们有几个问题:

  1. 可能最流行的问题是缓存局部性错误的缓存共享。还有其他人吗?
  2. 有什么好的概述吗?
  3. 有没有经过验证的技术可以对抗它们?
  4. 真正存在问题的应用程序有哪些共同特征?计算密集型领域(数学/图像处理等)?高度并行的应用程序?
4

1 回答 1

4

更有趣的一项是避免缓存冲突。如果您知道内存访问模式,您可以以一种最小化访问数据之间的缓存行冲突的方式布置访问的项目。您可以对数据和代码执行此操作。

弄清楚数据访问模式相对困难,但您可以相对容易地找出代码访问模式。给定一个调用图,构成函数体的块集,以及块之间转换频率的一些估计,您可以将代码块分配给缓存,以最大化您需要的下一个块的机会位于与当前缓存行不冲突的其他缓存行中。一个有趣的想法是,您只需分配“热”(高执行概率)的代码块;你把冷的放在哪里并不重要。IIRC,这意味着您可以按可能执行的频率对块进行排序,然后按该顺序分配它们。

你只需要一个全局分析:-} 我读到的第一个地方,优化实际上是作为链接器的一部分实现的,这是让你掌握整个程序的一种方法。

我不记得任何好的概述或收集的技术集。不过,PLDI 会议往往有关于这个主题的研究论文。

于 2011-02-13T23:56:01.267 回答