Как правильно измерить IPC (инструкций на цикл) с помощью perf

Интересно, как правильно измерять количество инструкций за цикл с помощью perf. В качестве справки: http://www2.engr.arizona.edu/~tosiron/papers/SPEC2017_ISPASS18.pdf использовал inst_retired.any и cpu_clk_unhalted.ref_tsc для своих расчетов, и теперь мне интересно, правильный ли это подход. Для сравнения, PAPI использует аппаратные счетчики PAPI_TOT_INS и PAPI_TOT_CYC для вычисления IPC.

После некоторых измерений я пришел к выводу:

  • inst_retired.any:u похоже на то же, что и PAPI_TOT_INS
  • cpu-cycles похоже на то же, что и PAPI_TOT_CYC

В примере теста cpu-cycles отличается от cpu_clk_unhalted.ref_tsc примерно на 25%. Теперь возникает вопрос, какое из обоих значений является правильным для расчетов? Или оба подхода неверны?


person pointhi    schedule 20.07.2018    source источник
comment
Мы могли бы дать лучший ответ, если бы вы предоставили конкретную информацию о приложении, системе и конфигурации системы.   -  person Zulan    schedule 20.07.2018


Ответы (1)


cpu-cycles - это фактическая тактовая частота ядра, которая изменяется в зависимости от P-состояний турбо / энергосбережения. Используйте его, если вам важны такие вещи, как микроархитектура, например, насколько близко к 4 моп за такт узкое место во внешнем интерфейсе вы достигаете.

cpu_clk_unhalted.ref_tsc - это эталонные циклы, и он всегда тикает на (близкой к) номинальной / установленной скорости ЦП. (например, фиксированная частота 4008 МГц на моем i7-6700k с частотой 4 ГГц). Используйте его (или task-clock), если вы заботитесь о повседневной работе, включая выбор между турбонаддувом или низкой тактовой частотой при частичном ограничении памяти. (Зависит от предпочтительных настроек энергоэффективности EPP.)

Интересный факт: он использует тот же источник часов, что и RDTSC, но счетчик событий не тикает, когда часы остановлены, например при смене частоты процессора). Потерянные циклы на Intel ? Несоответствие между rdtsc и CPU_CLK_UNHALTED.REF_TSC

(Наполовину связано: Как получить счетчик циклов ЦП в x86_64 из C ++? подробнее о TSC и rdtsc)

person Peter Cordes    schedule 20.07.2018