Skip to the content.

02 Jul 2025

Как устроен процессор

Игорь Слободсков, Белград, 1 июля 2025


План


Aбак


Логарифмическая линейка

Сама идея возникла в 1620-1630, после открытия логарифма



Суммирующая машина Паскаля, 1642г


Колесо Лейбница, 1673


Арифмометры

Много разных - от рисунов да Винчи в 1500 до 1978 года (советский арифмометр Феликс)


Curta - карманный арифмометр, 1948-1970


Жаккардовый ткацкий станок, 1804


Разностная машина Чарльза Бэббиджа


Разностная машина Чарльза Бэббиджа


Табуляторы, 1888

Early IBM D11 tabulating machine, with covers removed


Пневматика


Электромеханика в самолёте, 1955


Электромеханика в самолёте, 1955


MONIAC


Digi-Comp I 1963


Математика


Архитектура фон Неймана


Гарвардская архитектура


intel i8008



Одного NAND достаточного для всего


NOT


AND


OR

A B = !(!A & !B)


XOR

(A & !B) (B & !A)


полусумматор


сумматор


сложение чисел


carry-lookahead adder


Вычитание


Поразрядное сложение


Умножение-много сложений


деление



ячейка памяти


Релевантные слова:



Общий подход


Микрокод

Команда может описывать несколько простых действий:

movl $1, 8(%rsp, %rdi, 4) 
# indirect with displacement and scaled-index
  (address = base %rsp + displ 8 + index %rdi * scale 4)

Логично разбить её на два действия - вычисление адреса + запись



Суперскалярность

независимые команды можно исполнять одновременно

a = b + c 
e = f + g

Конвейер для исполнения инструкций

У классических RISC пять стадий:

Современные десктопные CPU с x86-64 - порядка 19-30 стадий


Порты

У ядра есть несколько портов, на которые можно раскидывать операции. Часть для целых чисел, часть для вещественных, часть для доступа к памяти. Могут быть какие-то специализированные блоки: например, для деления или для вычисления синуса.

Ядра могут быть сгруппированы в пары и иметь общий набор портов для пары.


Предсказание переходов и спекулятивное исполнение

Поскольку операции делаются долго, можем менять их порядок или начинать вычислять операцию до того, как случится ветвление. И отменять, если что пошло не так.

В процессоре есть блоки предсказания переходов. В современных Amd Ryzen и Samsung exynos предсказатель переходов на основе маленькой двуслойной нейронной сети.

Уязвимость Spectre вызвана спекулятивным исполнением команд. Для фикса предлагалось обновить микрокод процессора и после этого процессор терял часть производительности из-за менее агрессивного спекулятивного исполнения.


Cortex A-76 (Raspberry pi 5)

источник



Single instruction, multiple data

x86 - SIMD, AVX (advanced vector extension) (обычно 32 бита) ARM - NEON (16 байт), SVE (scalable vector extension) (максимальный размер регистра зависит от процессора, лежит в пределах 16 - 256 байт, обязательная часть в ARMv9+)



Кэш


Kэш

Пример: Cortex A76


TLB

Транслирует виртуальные адреса в реальные. Обычно размер страницы - 4 килобайта. Есть более новые режимы с большими страницами типа 2 мегабайт.


Оперативная память

DDR5-6000 с таймингами 30-36-36

Сколько займёт чтение?


Оперативная память

DDR5-6000 с таймингами 30-36-36

DDR5 - double data rate. Данные передаются не сигналом, а по началу сигнала и по его концу. Реальная частота (в которой измеряются тайминги) - 3000.

Сколько займёт чтение?


Оперативная память

DDR5-6000 с таймингами 30-36-36

DDR = double data rate. Данные передаются не сигналом, а по началу сигнала и по его концу. Реальная частота (в которой измеряются тайминги) - 3000.

Память организована в строки по 4 килобайта


Оперативная память

tRP - время закрытия предыдущей строки tRCD - Row Address to Column Address Delay - время для активации строки CL/tCWL - тайминг на чтение/запись после активации строки burst transfer - модуль памяти как-бы два отдельных модуля и сразу в двухканальном режиме, на каждый можно передавать 4 байта за раз, и для передачи 64 байт надо сделать 16 передач данных.

Итого - в лучшем случае у нас потери в 10 нс на чтение в уже открытой строке + 2.6 нс на передачу. В худшем случае, когда надо закрыть другую строку, открыть эту и прочитать, получится вместе (36 + 36 + 30 + 8) / 3000 = 36.6 нс


DDR1 SDRAM (1998)

DDR-200 частота 100 MHz один такт = 10 ns тайминги: 2-2-2



GPU

Много-много паралельных вычислительных блоков (у каждого свой кеш и прочее). Внутри блока есть warp, который как в SIMD может делать операции, например, сразу над 32 числами.

высокая задержка, медленное исполнение на каждом блоке, плохая поддержка ветвлений, но зато очень большая суммарная производительность.

Если брак при изготовлении - часть блоков можно отключить.


GPU


FPGA


FPGA


ASIC

Application-specific integrated circuit

Кастомный чип, сделанный специально под какой-то узкоспециализированный сценарий. Например, майнинг биткоинов или перекодирование видео.


Систолический массив

Придумали в 1944 в Британии, но там засекертили и потом придумали ещё несколько раз.

Идея в том, что есть отдельные вычислители, которые посылают данные друг другу. Примеры хорошо подходящийх операций - перемножение матриц, решение систем линейных уравнений и т.п.

Примеры:



Попробуй сам!

Игры про конструирование процессоров:

Продвинутый уровень - попробовать сделать что-нибудь на FPGA


Какие выводы для программиста


Список источников


Список источников