有没有办法在基准测试时模拟缓存位置?

Is there a way to simulate cache locality when benchmarking?

我试图弄清楚什么是对 C++ 程序进行基准测试的最佳方法,并且想模拟当与基准测试部分相关的数据存在于缓存中时以及当它处于冷状态时的场景。

是否有一种可靠的方法在 x86-64 机器上强制实施好的和坏的缓存局部性作为测试准备的一种形式运行,假设它将涉及的数据是已知的?

大概您正在对一种算法进行基准测试,该算法对一系列对象执行操作,并且您关心这些对象在内存(以及缓存)中的位置。

至"simulate"地区:创建地区。您可以创建具有高局部性的链表以及具有低局部性的链表:

分配数组中的节点。要创建具有高局部性的列表,请确保数组的第一个元素指向第二个,依此类推。要创建具有较低局部性的列表,请创建顺序的随机排列,以便每个节点指向数组随机位置中的另一个节点。

确保元素数量至少比最大缓存大一个数量级。