假设 LUT 为 512KB 的 64 位 double 类型。一般来说,CPU如何缓存L1或L2中的结构体?
例如:我访问中间元素,它会尝试缓存整个 LUT 还是其中的一部分 - 比如说中间元素然后是 n 个后续元素?
CPU 使用什么样的算法来确定它在二级缓存中保存的内容?是否遵循一定的前瞻策略
注意:我假设是 x86,但我有兴趣了解其他架构如何工作,POWER、SPARC 等。
最佳答案
这取决于您用于 LUT(查找表?)的数据结构
缓存的最佳状态是内存中连续放置的东西(例如数组或 std::vectors),而不是分散放置。
简单来说,当您访问一个内存位置时,一 block RAM(一个“缓存行”在 x86 上相当于 64 字节)被加载到缓存中,可能会驱逐一些以前缓存的数据。
缓存一般有几级,形成一个层次结构。随着每个级别的增加,访问时间会增加,但容量也会增加。
是的,有前瞻性,它受到相当简单的算法和无法跨越页面边界的限制(在 x86 上,内存页面的大小通常为 4KB。)
我建议你阅读What Every Programmer Should Know About Memory .它有很多关于这个主题的重要信息。
关于c++ - LUT 等的 L1/L2 缓存行为是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4340514/