c++ - LUT 等的 L1/L2 缓存行为是什么?

标签 c++ caching lookup-tables cpu-cache

假设 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/

相关文章:

c++ - 使用按名称调用传递参数

c++ - 如何在同一程序中崩溃时自动重启 Qt 应用程序?

python - 如何在 Django 中使用派生数据进行数据库内存缓存?

PHP 将大量文件写入一个目录

c++ - 如何在 CMake 项目中包含 IntelliSense 的外部库源?

c++ - eclipse CDT : how to enable project debugging

javascript - 将 CanvasRenderingContext2D 的现有引用应用于元素

c# - 世界货币查找表 - 带有 ISO 3166-1 alpha-2 代码?

hlsl - 编写 HLSL 像素着色器以从 2d 纹理执行查找

python - 将 openCV 查找表 (LUT) 应用于图像