通过迭代数组并禁用编译器优化来刷新C ++中的CPU缓存

时间:2016-01-28 00:09:51

标签: c++ caching benchmarking compiler-optimization

出于基准测试的原因,我需要多次在相同的数据上运行相同的算法。现在,我想探讨相同数据的所有运行都在冷缓存上的情况。

我正在考虑添加一个for循环读取数组的每个元素(每个元素上的LOAD / MOV指令),以便缓存填充数组元素。例如

vector<size_t> vec(CACHE_SIZE/sizeof(size_t));
//...
//...
size_t element;
for (size_t i = 0; i < vec.size(); ++i) {
    element = vec[i];
}

但是在使用优化进行编译时,所有这些都可能会被删除。

那么我该如何做到这一点,可能只需要很少的开销。

1 个答案:

答案 0 :(得分:2)

element声明为volatile。不允许对易失性变量的访问和赋值进行优化。

volatile size_t element;