Как сузить данные Intel PCM до единого процесса?
Я пытаюсь использовать Intel Performance Counter Monitor (PCM), чтобы понять отсутствие кэш-памяти L3 и некоторые другие критерии производительности в моем коде.
Я не уверен, как разобраться в числах, которые я получаю, и был бы признателен за понимание.
В идеале я ожидаю получить 0 байтов из следующего фрагмента кода, однако получаю число, близкое к 240 КБ. Если я пытаюсь запустить другие процессы, число 240KB колеблется (не монотонно идет вверх / вниз, оно просто имеет значимое колебание (сначала идет вверх, а затем падает)).
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 КБ, хотя на самом деле я ничего не читаю в коде? Делится ли он вычислительными ресурсами с другими процессами и, возможно, получает статистику от других процессов? Если это так, как я могу убедиться, что полученная информация изолирована от этого выполняемого кода / процесса?