【发布时间】:2015-12-25 07:00:34
【问题描述】:
我正在运行某人的 c++ 代码来对数据集进行基准测试。我遇到的问题是,我经常得到第一次运行的时间,如果我再次运行相同的代码,这些数字会发生巨大变化(即 28 秒到 10 秒)。我认为这是由于 CPU 的自动缓存而发生的。有没有办法刷新缓存,或者以某种方式防止这些波动?
【问题讨论】:
-
你说的是 CPU 缓存,还是操作系统的磁盘缓存?额外的 18 秒似乎太长了,不能仅仅从 RAM 中填充 CPU 缓存、+页面错误和 TLB 未命中。即使是分散的随机读取,也应该能够在 well 不到 1 秒的时间内填满大型 Xeon 的 L3 缓存的所有缓存行。
-
@PeterCordes 根据我的计算,如果您进行分散读取,这些读取是串行相关的并且每个读取需要 100 ns,即使忽略 TLB 和其他成本,您在18 秒,看来在可行范围内。
标签: c++ caching benchmarking timing