Читать полный материал
Процессор выполняет машинные команды. Например, команда сложения указывает, из каких двух регистров взять числа и куда записать сумму. Процессор получает команду, распознаёт её, складывает числа и сохраняет результат. Так из отдельных операций собирается работа программы. Кэш помогает быстрее получить данные, а ядра позволяют выполнять несколько цепочек команд параллельно.
Что делает процессор
Центральный процессор, или CPU, выполняет инструкции программы: считает, сравнивает, загружает данные из памяти и выбирает, какую команду выполнить дальше. Когда вы меняете число в таблице, одна простая операция в интерфейсе запускает целую последовательность машинных команд. Для самой простой части, сложения двух целых чисел, достаточно посмотреть на одну из них.
Как процессор складывает 7 и 5
Пусть два регистра уже содержат числа 7 и 5. Регистр — ячейка внутри ядра, которой инструкция может воспользоваться напрямую. Возьмём реальную команду add x3, x1, x2 из спецификации целочисленного набора команд RISC-V RV32I: сложить значения из x1 и x2 и записать результат в x3.
- Получить команду. Счётчик команд указывает адрес инструкции. Ядро получает её, обычно из кэша инструкций, если она там уже есть.
- Расшифровать. Декодер распознаёт сложение и определяет номера двух исходных регистров и регистра назначения.
- Выполнить. Арифметико-логический блок складывает значения 7 и 5.
- Сохранить результат. В
x3оказывается 12. Если программе нужно сохранить число в оперативной памяти, она выполнит отдельную команду записи.
Это порядок действий для одной инструкции в учебной модели. В современном ядре стадии разных инструкций могут перекрываться. Пока одна инструкция выполняется, ядро может получать или декодировать следующую. Пример конкретного конвейера с планировщиком и исполнительными блоками приведён в Intel 64 and IA-32 Architectures Software Developer’s Manual, том 1.
Откуда берутся нули и единицы
Логические схемы различают два диапазона сигнала, условно 0 и 1. Транзисторы входят в схемы, которые меняют эти сигналы. Группы битов могут обозначать данные, адрес или команду. Значение зависит от того, как схема или инструкция их интерпретирует. В примере со сложением одни биты задают операцию, другие указывают регистры.
Набор инструкций задаёт, что понимает процессор
ISA, или архитектура набора команд, описывает инструкции и видимый программе результат. Например, программа для x86-64 и программа для RISC-V используют разные машинные команды. Чтобы запустить программу на другом наборе команд, нужна подходящая сборка или слой трансляции, если он поддерживает это приложение. Расширения набора команд тоже имеют значение только там, где их использует программа.
Микроархитектура определяет, как ядро выполняет команды
Два процессора могут понимать одну и ту же команду и получать одинаковый результат. Внутри ядра при этом могут по-разному получать инструкции, планировать вычисления и обращаться к кэшу. От этих различий зависит, сколько работы процессор успевает сделать за такт и как часто ему приходится ждать данные.
Чем отличаются ядро и поток
Ядро — физический вычислительный блок. Поток программы — последовательность команд, которую операционная система может назначить ядру. Если у программы есть независимые части работы, их можно выполнять на разных ядрах. Если очередная команда ждёт результат предыдущей, дополнительные ядра сами по себе эту цепочку не ускорят.
Аппаратная многопоточность позволяет некоторым ядрам держать несколько контекстов выполнения. Например, Intel Hyper-Threading открывает системе два логических процессора на поддерживаемом физическом ядре. Они используют общие ресурсы ядра, поэтому выигрыш зависит от нагрузки. Такая технология есть не у всех моделей, поэтому число потоков в характеристиках может быть больше числа ядер или совпадать с ним.
Зачем процессору кэш, если есть оперативная память
Инструкция работает с регистрами напрямую. Кэш хранит копии недавно использованных или заранее загруженных инструкций и данных. Если нужная копия есть рядом с ядром, оно получает её быстрее. Если её нет, запрос идёт на следующий доступный уровень или в оперативную память. У многих CPU есть уровни L1, L2 и L3, но их размеры и распределение между ядрами зависят от модели.
Если программа снова и снова обращается к небольшому набору данных, кэш может обслужить многие запросы. При обработке большого массива часть запросов чаще доходит до оперативной памяти. Из-за этого одна и та же частота может давать разное быстродействие.
Где в этой цепочке RAM, SSD и GPU
SSD хранит приложение и файлы. Для работы система загружает нужные части программы и данные в RAM. Ядро получает инструкции и данные через подсистему памяти. GPU выполняет графические и другие задачи, которые приложение умеет передать ему. Поэтому медленная загрузка проекта и медленный расчёт внутри уже открытого проекта могут иметь разные причины.
Что меняется в системе на чипе
В SoC несколько функций системы объединены в одном устройстве. Вместе с ядрами CPU там могут находиться графика и контроллеры. Принцип выполнения машинных команд остаётся тем же. Меняется то, как CPU связан с остальными блоками и как память и питание распределены между ними.
Почему одинаковые гигагерцы дают разную скорость
Частота показывает число тактов в секунду. По определению единицы 4 ГГц — это четыре миллиарда тактов в секунду. Руководство Intel по тактовой частоте отдельно разбирает частоту и другие характеристики, включая кэш и число ядер. IPC — среднее число выполненных инструкций на такт в конкретной нагрузке. При одинаковой частоте один процессор может выполнить больше инструкций, а один и тот же процессор — показать разный IPC в двух программах.
Результат важнее одной цифры в паспорте. Для сравнения найдите замер одной и той же задачи при сопоставимых настройках. Подробнее о частоте и IPC см. почему один CPU быстрее другого на той же частоте.
Почему процессор нагревается и снижает частоту
Электрическая энергия при работе схем превращается в тепло. Когда охлаждение не успевает его отводить, защитные механизмы могут снизить частоту и мощность. Справка Intel о температурах процессоров описывает троттлинг и указывает, что температурный предел зависит от модели и системы. Для долгого рендера или сборки кода смотрите устойчивую производительность после прогрева.
Как читать характеристики процессора
Если программа ограничена одним потоком, смотрите скорость в похожей однопоточной задаче. Если работа делится между ядрами, ищите тест вашего приложения или близкого сценария. Для обновления компьютера проверьте совместимость модели с платой и нужной версией BIOS. С этими данными можно перейти в каталог процессоров и отсеять неподходящие варианты.
Что легко перепутать
- Такт и инструкция. Одна инструкция может требовать нескольких стадий, и ядро может обрабатывать стадии разных инструкций одновременно.
- Ядро и логический процессор. Несколько аппаратных потоков ядра пользуются его общими ресурсами.
- Пиковая и устойчивая скорость. Короткий пик частоты не гарантирует такой же результат при длительном расчёте.
Как связать всё вместе
Команда определяет, какие данные взять, что с ними сделать и где оставить результат. Кэш помогает получить данные, несколько ядер ускоряют независимые части работы, а частота задаёт темп тактов. Если программа тормозит, сначала уточните, на каком шаге она ждёт: загрузка файла, обработка данных или вывод графики. От этого зависит, имеет ли смысл искать более быстрый CPU.
Частые вопросы
Откуда процессор знает, какую команду выполнять следующей?
Адрес задаёт счётчик команд. При последовательном выполнении он продвигается, а команды перехода могут направить выполнение к другому адресу.
Результат вычисления сразу попадает в оперативную память?
В примере со сложением он записывается в регистр. Для сохранения значения в память программа выполняет отдельную команду записи.
Один такт всегда равен одной команде?
Нет. Стадии разных команд могут идти параллельно, а выполнение одной команды может занимать несколько тактов. Число завершённых инструкций зависит от ядра и нагрузки.
Чем кэш отличается от регистра?
Инструкция может указать регистр напрямую, по его номеру. Кэш хранит копии данных или инструкций и обслуживает обращения по адресам памяти.
Больше ядер всегда ускоряет программу?
Нет. Выигрыш зависит от того, сколько работы можно разделить между ядрами и сколько времени уходит на обмен данными или ожидание.
Почему частота меняется во время работы?
Процессор подстраивает её под нагрузку и ограничения по мощности и температуре. Для оценки длинной задачи важна скорость после прогрева.