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

C++ 刷新C+中的CPU缓存+;通过迭代数组并禁用编译器优化,c++,caching,benchmarking,compiler-optimization,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) { el

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

我正在考虑添加一个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];
}
vector向量向量(CACHE_SIZE/sizeof(SIZE_t));
//...
//...
尺寸元素;
对于(大小i=0;i
但是当使用优化编译时,所有这些都可能被删除


那么,我如何做到这一点,可能需要最小的开销。

元素声明为。不允许优化对易失性变量的访问和分配

volatile size_t element;

元素
声明为。不允许优化对易失性变量的访问和分配

volatile size_t element;

这是有道理的。它可能会生成额外的LOAD/MOV到内存指令,但这似乎没问题。我会查出来的。
vector-vec
可能更好,但我不确定这是否允许。这是有道理的。它可能会生成额外的LOAD/MOV到内存指令,但这似乎没问题。我会查出来的。
矢量矢量向量
可能更好,但我不确定这是否允许。