Я пытаюсь использовать Intel Performance Counter Monitor (PCM), чтобы понять пропадание кэша L3 и некоторые другие критерии производительности в моем коде.
Я не уверен, как разобраться в числах, которые яполучаю и был бы признателен за некоторую проницательность.
В идеале я ожидаю получить 0 байтов из следующего фрагмента кода, однако получаю число, близкое к 240КБ.Если я пытаюсь запустить другие процессы, число 240 КБ колеблется (монотонно не идет вверх / вниз, оно просто имеет значимое колебание (сначала идет вверх, а затем падает)).
volatile SystemCounterState before_sstate = getSystemCounterState();
volatile SystemCounterState after_sstate = getSystemCounterState();
cout << "Instructions per clock: " << getIPC( before_sstate, after_sstate )
<< ", L3 Cache hit ratio: " << getL3CacheHitRatio( before_sstate, after_sstate )
<< ", L3 Missed Cycles: " << getCyclesLostDueL3CacheMisses(before_sstate, after_sstate )
<< ", Bytes read: " << getBytesReadFromMC( before_sstate, after_sstate )
<< ", L3 Occupancy: " << getL3CacheOccupancy( after_sstate ) << endl;
Вотвывод, который я получаю:
Пытается использовать перф события в Linux ...
Успешно запрограммированный PMU на ядре с использованием Linux perf
Инструкций за такт: 0,637448, L3 Коэффициент использования кэша: 0,820139, Пропущенные циклы: 0,075492, Чтение байтов: 263488, Заполнение L3: 0
Кто-нибудь знает, почему я читаю 240 КБ, хотя на самом деле я ничего не читаю вкод?Делится ли он вычислительными ресурсами с другими процессами и, возможно, получает статистику от других процессов?Если это так, как я могу убедиться, что собранная информация изолирована от этого выполняемого кода / процесса?