随机访问连续数组的缓存友好性
Cache friendliness of randomly accessing a contiguous array
所以我正在编写一种专门用于 ECS 之类的应用程序的自定义脚本语言,由于 ECS 的全部意义在于最大限度地减少缓存未命中,我认为我也可以将其应用于脚本语言。目前我的解释器使用虚拟堆栈 (std::vector<std::byte>
) 来存储它的所有变量。我想知道我的解释器使用连续内存这一事实是否使它更 cpu 缓存友好。由于内存是半随机访问的(虽然大部分都靠得很近),我猜测好处不会像我以顺序和可预测的方式阅读它们那样好。 Stack Overflow 的智者有什么想法?
连续内存很好,因为内存子系统的许多部分都受益于引用的局部性。但是各个部分的工作规模各不相同。通常 CPU 缓存行小于页面大小,例如64 字节与 4096 字节。您的向量可能会跨越多个缓存行,因此这种规模的连续性并不重要,但它会受益于页面大小的连续性。
所以我正在编写一种专门用于 ECS 之类的应用程序的自定义脚本语言,由于 ECS 的全部意义在于最大限度地减少缓存未命中,我认为我也可以将其应用于脚本语言。目前我的解释器使用虚拟堆栈 (std::vector<std::byte>
) 来存储它的所有变量。我想知道我的解释器使用连续内存这一事实是否使它更 cpu 缓存友好。由于内存是半随机访问的(虽然大部分都靠得很近),我猜测好处不会像我以顺序和可预测的方式阅读它们那样好。 Stack Overflow 的智者有什么想法?
连续内存很好,因为内存子系统的许多部分都受益于引用的局部性。但是各个部分的工作规模各不相同。通常 CPU 缓存行小于页面大小,例如64 字节与 4096 字节。您的向量可能会跨越多个缓存行,因此这种规模的连续性并不重要,但它会受益于页面大小的连续性。