Число тактов на инструкцию

Число тактов на инструкцию (англ. cycles per instruction, также clock cycles per instruction, clocks per instruction, CPI) — характеристика производительности процессора, отражающая среднее количество тактов на одну инструкцию для программы или её части[1]. Является мультипликативно обратной величиной по отношению к показателю число инструкций за такт (IPC).

Определение

Среднее число тактов на инструкцию (CPI) для выполняемого процесса определяется как взвешенное среднее:

где — число инструкций i-го типа, — число тактов для инструкции данного типа, а — общее число инструкций. Суммирование ведётся по всем типам инструкций, встречающимся в программе или при бенчмаркинге.

Объяснение

Рассмотрим классический конвейер RISC с пятью стадиями:

  1. Получение инструкции (IF)
  2. Декодирование инструкции/Получение регистра (ID)
  3. Исполнение/Вычисление эффективного адреса (EX)
  4. Доступ к памяти (MEM)
  5. Запись результата (WB)

Каждая стадия требует один такт, инструкции проходят стадии последовательно. Без конвейеризации, в многоцикловом процессоре новая инструкция загружается на первой стадии только после завершения предыдущей инструкции на пятой стадии, поэтому затраты тактов на выполнение инструкции составляют пять (CPI = 5 > 1). Такой процессор называется субскалярным.

При использовании конвейера (pipeline), на каждом такте за счёт параллелизм на уровне инструкций поступает новая инструкция, и теоретически в каждом из пяти этапов одновременно может находиться по одной инструкции, то есть за каждый такт завершается одна инструкция (CPI = 1). Такой процессор называется скалярным.

У одноядерного процессора с одной исполнительной единицей наилучшее достижимое значение CPI — 1. Для процессора с несколькими исполнительными единицами можно получить даже более низкое значение CPI (CPI < 1): такой процессор называется суперскалярным. Чтобы достичь меньшего CPI без конвейеризации, число исполнительных устройств должно быть больше числа стадий конвейера. Например, при шести исполнительных единицах шесть новых инструкций загружаются, когда предыдущие шесть заканчивают пятую стадию, и в среднем на выполнение одной инструкции требуется 5/6 тактов (CPI = 5/6 < 1). Для достижения меньших значений CPI с конвейеризацией должно быть минимум две исполнительные единицы; например, при двух исполнительных единицах за каждый такт обрабатываются две инструкции, и средний CPI = 1/2 < 1.

Примеры

Пример 1

В многоцикловой реализации архитектуры MIPS существуют пять типов инструкций:

  • Загрузка (5 тактов)
  • Сохранение (4 такта)
  • Инструкции типа R (4 такта)
  • Переход (branch) (3 такта)
  • Прыжок (jump) (3 такта)

Если в программе встречается:

  • 50% инструкций загрузки
  • 25% инструкций сохранения
  • 15% инструкций типа R
  • 8% команд перехода
  • 2% команд прыжка

то среднее CPI:

Пример 2

[2] 400МГц процессор выполняет бенчмарк с таким распределением инструкций и затраченными тактами:

Тип инструкции Количество инструкций Тактов на инструкцию
Целочисленная арифметика 45000 1
Передача данных 32000 2
С плавающей запятой 15000 2
Управление (transfer) 8000 2

Определим эффективное значение CPI, скорость исполнения в MIPS, и время выполнения программы.

Поскольку: и

Следовательно,

Примечания

Литература

  • Kai Hwang. Advanced Computer Architecture, Chapter 1, Exercise Problem 1.1.