c++ - 基准测试时有没有办法模拟缓存局部性?
问题描述
我试图找出对 C++ 程序进行基准测试的最佳方法,并希望模拟与基准测试部分相关的数据存在于缓存中和冷时两种情况。
假设它所涉及的数据是已知的,是否有一种可靠的方法可以在 x86-64 机器上强制执行好的和坏的缓存局部性作为测试运行的准备形式?
解决方案
大概您正在对一种算法进行基准测试,该算法在一系列对象上执行操作,并且您关心这些对象在内存(以及缓存)中的位置。
“模拟”局部性:创建局部性。您可以创建具有高局部性的链表以及具有低局部性的链表:
分配数组中的节点。要创建具有高局部性的列表,请确保数组的第一个元素指向第二个元素,依此类推。要创建具有较低局部性的列表,请创建顺序的随机排列,以便每个节点在数组的随机位置指向另一个节点。
确保元素的数量至少比最大缓存大一个数量级。
推荐阅读
- react-native - nsnumber 类型的 json 值“1”无法转换为 uiedgeinsets
- django - Django+gunicorn+nginx上传大文件连接重置错误
- angular8 - 如何在Angular 8上的可点击项目上使用调用函数?
- docker-compose - 将日志配置添加到 docker-compose 后磁盘操作量增加
- python - 如何遍历列表并更改其中的值?
- python - Python:如何以两个参数作为参数传递函数
- ios - IOS,如果我有 GMSMapView,如何在 didtap 或 didDrag 之后删除地图的自动动画
- javascript - 如何根据先前的单选选择禁用单选按钮
- python - 如何防止熊猫访问器发出覆盖警告?
- r - R元编程:使用函数调用粘贴逻辑表达式