首页 > 解决方案 > 基准测试时有没有办法模拟缓存局部性?

问题描述

我试图找出对 C++ 程序进行基准测试的最佳方法,并希望模拟与基准测试部分相关的数据存在于缓存中和冷时两种情况。

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

标签: c++x86-64benchmarkingcpu-cachemicrobenchmark

解决方案


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

“模拟”局部性:创建局部性。您可以创建具有高局部性的链表以及具有低局部性的链表:

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

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


推荐阅读