Почему нам нужно прогреть кеш перед тестом пропускной способности и как это сделать.Независимо от того, достаточно ли велик набор данных, прогревать кэш не имеет смысла.Возьмем пример, почему код mountain.c в разогревах CSAPP кешируется два раза.Один находится в основном цикле перед реальной тестовой частью, другой - в реальной тестовой части.Весь код может быть загружен в http://csapp.cs.cmu.edu/3e/code.html
в основном цикле, кэш был разогрет один раз, что является тестовым методом
test(elems, stride); /* Warm up the cache */ //line:mem:warmup
cycles = fcyc2(test, elems, stride, 0); /* Call test(elems,stride) */ //line:mem:fcyc
return (size / stride) / (cycles / Mhz); /* Convert cycles to MB/s */ //line:mem:bwcompute
}
в реализации fcyc2, кэш нагрелсяснова
if (compensate) {
do {
double cyc;
if (clear_cache)
clear();
f(param1, param2); /* warm cache */
start_comp_counter();
f(param1, param2);
cyc = get_comp_counter();
add_sample(cyc, k);
} while (!has_converged(k, epsilon, maxsamples) && samplecount < maxsamples);
} else {
do {
double cyc;
if (clear_cache)
clear();
f(param1, param2); /* warm cache */
start_counter();
f(param1, param2);
cyc = get_counter();
add_sample(cyc, k);
} while (!has_converged(k, epsilon, maxsamples) && samplecount < maxsamples);
}