Как сузить данные Intel PCM до единого процесса? - PullRequest
0 голосов
/ 02 марта 2019

Я пытаюсь использовать 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 КБ, хотя на самом деле я ничего не читаю вкод?Делится ли он вычислительными ресурсами с другими процессами и, возможно, получает статистику от других процессов?Если это так, как я могу убедиться, что собранная информация изолирована от этого выполняемого кода / процесса?

...