Я пытаюсь определить время, необходимое для чтения элемента, чтобы убедиться, что это попадание в кэш или его отсутствие.чтобы чтение было в порядке, я использую функцию _mm_lfence ().Я получил неожиданные результаты, и после проверки я увидел, что издержки lfence-функции не являются детерминированными.Поэтому я выполняю программу, которая измеряет эти издержки в цикле, например, 100 000 итераций.Я получаю результаты более 1000 тактов за одну итерацию, а в следующий раз - 200. Что может быть причиной такой разницы между издержками функции lfence и, если она настолько ненадежна, как я могу правильно оценить задержку попаданий в кэш и пропусков кеша?Я пытался использовать тот же подход, что и в этом посте: Измерение задержки памяти со счетчиком отметок времени
код, который дает ненадежные результаты, таков:
for(int i=0; i < arr_size; i++){
_mm_mfence();
_mm_lfence();
t1 = __rdtsc();
_mm_lfence();
_mm_lfence();
t2 = __rdtsc();
_mm_lfence();
arr[i] = t2-t1;
}
значения в arr варьируются в разных диапазонах, arr_size - 100 000