如何解决当顺序迭代数组 1 并为每个元素 1 随机访问另一个数组 2 时,cpu 缓存中会发生什么?
我了解顺序迭代数据如何利用 cpu 缓存。我不明白如何将多个数据集加载到缓存中。在这种情况下,来自阵列 2 的数据是否与阵列 1 一起位于更高级别的缓存中?假设数组 2 可以完全适合 cpu 缓存,但不能适合数组 1;它必须分块加载。
如果只迭代数组 1,则所有级别的缓存都填充了其数据块。但是我不明白当 2 个数据集需要交互时会发生什么,其中一个是非顺序的?
我正在寻找一种将两个数据集都保存在缓存 (l2) 中的方法,这样我就不必每次随机访问都去 RAM,或者如果这不可能,请解释一下?
谢谢。
解决方法
整个数组不会被完全加载,所以它的长度并不重要。当您访问数组的元素时,将加载一个缓存行,其中包含该元素周围的内存副本。在 x86 系统上,缓存行通常为 64 字节。
如果 cpu 预取器检测到访问模式,它将预取下一个(或两个)缓存行。假设没有其他进程正在运行并使用您的 L1 缓存,如果预取器能够检测到它们的访问模式,那么您将有足够的空间用于来自两个阵列的缓存行。
在您的情况下,如果数组 2 中的访问依赖于数组 1 中的值,则不太可能确定数组 2 的访问模式,因为访问不是顺序的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。