长数组缓存问题

Mik*_*e G 1 c c++ performance memo

我最近注意到,使用循环扫描长数组会降低缓存性能.你能解释一下为什么会发生这种情况以及这个问题的解决方法.我正在使用C/C++开发Linux平台

drd*_*cox 5

这是一个经典的缓存问题:如果循环一个足够大的数组,每个内存引用都是一个已经刷新的项,因此需要将该项从RAM中提取到缓存中.在最简单的情况下,您只需访问比缓存大一个字节的数组即可看到这种情况.

即使是复杂的,预测性的提取方案也会受到这个问题的影响.无论缓存方案如何,始终可以设计一个提取模式,该模式将导致每个内存引用上的缓存验证错误.

好消息是现代缓存系统努力减少这种影响.例如,您正在使用的系统可能会在大型数组中进行一些前向提取,因此不会对每次内存访问造成错误.最后,花时间了解缓存系统,也许从您在本科中学习的架构课程中查看笔记:-)将帮助您使用缓存系统.