3.5Kпросмотров
27 апреля 2025 г.
Score: 3.9K
Об IPC
(конспект по книге Performance Analysis and Tuning on Modern CPUs) Я уже писал о показателе Instructions Per Cycle (IPC) (например тут и тут). Сейчас разберём детали глубже. Instruction Per Cycle (IPC) — это среднее количество инструкций, завершённых за один такт процессора: IPC = Retired Instructions / Core Cycles Определим ключевые понятия. Инструкции делятся на executed и retired. - Executed инструкции уже выполнены, но результат ещё не записан в память. Они могут выполняться вне порядка (out of order) и быть отменены, например, из-за miss branch prediction; - Retired инструкции полностью завершены, то есть и выполнены и их результаты записаны (committed). Отменить их уже нельзя. Executed напрямую не отслеживаются, а для retired есть отдельный счётчик:
perf stat -e instructions -- ./a.exe 2173414 instructions # 0.80 insn per cycle Cycles (циклы) процессора бывают двух видов:
- core;
- reference. Разница важна при динамическом изменении частоты процессора:
1. если CPU работает на штатной частоте: core = reference.
2. если CPU разогнан: core > reference. Core Cycles отражают реальную текущую, когда Reference Cycles базовую (по паспорту) частоту процессора.
perf stat -e cycles,ref-cycles -- ./a.exe 43340884632 cycles # 3.97 GHz <= Core Cycles
37028245322 ref-cycles # 3.39 GHz <= Reference Cycles Следовательно IPC показывает единицу A) выполненной B) полезной работы в текущий момент. IPC не зависит от изменения тактовой частоты, так как всегда рассчитывается на один цикл. Факторы, ограничивающие IPC (перечислены в случайном порядке, список неполный): - скорость памяти и cache misses;
- архитектура процессора: скалярность, загрузка слотов пайплайна;
- тип и сложность инструкций;
- branch misprediction (пенальти на ошибку по 10–25 ns);
- ... Скалярность ограничивает количество инструкций, которые процессор может обработать за один такт, и задаёт теоретический максимум IPC. На практике этот максимум недостижим: процессор может одновременно выполнять только определённые типы инструкций. Например, в 6-wide архитектуре за такт можно провести четыре операции сложения/вычитания, одну загрузку и одну запись, но не шесть загрузок одновременно. to be continued... #cpu #theory