【发布时间】:2011-11-04 03:47:36
【问题描述】:
我最近注意到使用循环扫描长数组会使缓存性能下降。你们能否解释一下为什么会发生这种情况以及这个问题的一些解决方法。我正在使用 C/C++ 的 linux 平台上工作
【问题讨论】:
-
scribblethink.org/Computer/cachekiller.html ..这可能会给你更多的洞察力,因为这个问题是众所周知的
标签: c++ c performance memo
我最近注意到使用循环扫描长数组会使缓存性能下降。你们能否解释一下为什么会发生这种情况以及这个问题的一些解决方法。我正在使用 C/C++ 的 linux 平台上工作
【问题讨论】:
标签: c++ c performance memo
这是一个典型的缓存问题:如果循环足够大的数组,每个内存引用都指向一个已经刷新的项目,因此需要从 RAM 中获取该项目到缓存。在最简单的情况下,您只需访问比缓存大一字节的数组即可看到这种情况发生。
即使是复杂的预测性提取方案也会受到此问题的影响。无论采用何种缓存方案,总有可能设计一种会导致每个内存引用出现缓存验证错误的获取模式。
好消息是现代缓存系统努力减少这种影响。例如,您使用的系统可能会在您的大型数组中进行一些前向提取,因此它不会在每个 内存访问时出错。最后,花时间了解缓存系统,也许复习一下你在本科时上过的架构课上的笔记:-) 将帮助你使用缓存系统。
【讨论】: