Когда процессор выполняет программу, он идёт по циклу команд (Instruction Cycle). В этом цикле четыре шага. Сначала идёт Fetch — выборка инструкции из памяти по адресу, который хранится в счётчике команд (Program Counter, PC). Команда попадает в регистр инструкций (Instruction Register, IR). Потом идёт Decode — расшифровка. Блок управления (Control Unit, CU) понимает, какие действия и данные нужны. Далее наступает Execute — арифметико-логическое устройство (ALU) или другой блок процессора выполняет команду. Завершает цикл шаг Writeback, когда результат записывается в регистр или память (RAM).
Работа всех этих шагов идёт в ритме тактового сигнала (Clock Signal). Такт — это импульс. Частота (Clock Frequency) показывает, сколько тактов в секунду выдаёт процессор. Например, 3 GHz — это три миллиарда тактов. Но одна инструкция тратит не один, а несколько тактов, потому что проходит через все стадии цикла. Простое сложение в ALU может занять 1–2 такта, а обращение к памяти десятки.
Пример на Python:
sum = 0
for i in range(5):
sum = sum + i
На вид это одна строчка в цикле. Но процессор делает много шагов: загружает i
, сравнивает его с 5, проверяет условие цикла, достаёт sum
, складывает два значения, записывает результат обратно, увеличивает i
и возвращается к началу. Каждое из этих действий превращается в отдельные инструкции и каждая проходит через Fetch, Decode, Execute, Writeback.
Современные процессоры ускоряют выполнение с помощью Pipelining. Пока одна инструкция исполняется, другая уже декодируется, а третья загружается. Это экономит такты. Если процессор может выполнять несколько инструкций за такт, это называется Superscalar Architecture.
Для оценки скорости используют три величины. Частота показывает количество тактов. CPI (Cycles Per Instruction) — среднее число тактов на инструкцию. IPC (Instructions Per Cycle) — сколько инструкций выполняется за один такт. Например, при 3 GHz, CPI = 2 и IPC = 4 процессор делает около 6 миллиардов инструкций в секунду.
Есть и задержки. Если процессору нужны данные из памяти, он может простоять несколько тактов — это Pipeline Stall. Память работает медленнее процессора, поэтому ожидание данных останавливает конвейер. При условных переходах процессор пытается угадать путь выполнения (Branch Prediction). Ошибка в предсказании приводит к откату команд. Большую роль играет кэш (Cache). Если данные есть в кэше (Cache Hit), они подгружаются быстро. Если данных нет (Cache Miss), процессор ждёт RAM, и это десятки лишних тактов.
Два процессора с одинаковой частотой работают по-разному: один быстрее благодаря большему IPC и кэшу, другой медленнее, хотя частота выше. Виртуальные машины делят физические такты между собой. Часто нагрузка связана с ожиданием памяти или диска. Серверные процессоры обычно имеют ниже частоту, но больше ядер и крупный кэш, чтобы выдерживать постоянную нагрузку и экономить энергию.
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.