Раньше было так: есть мощные процессоры для настольных компьютеров, ноутбуков и серверов, а есть слабые процессоры для мобильных устройств — телефонов и планшетов.
Теперь ситуация меняется: мобильные процессоры постепенно обгоняют настольные, а настольные начинают заимствовать технологии из мобильных.
Мы уже писали о технологическом прорыве процессоров Apple M1. Пора раскрыть эту тему глубже.
RISC — простые команды, много кода
На заре процессоров у программистов не было языков высокого уровня, например JavaScript или Python. Все команды писались машинным кодом или на ассемблерах. Программист в то время работал с процессором напрямую, и каждая команда в коде обозначала какую-то инструкцию для процессора.
Например, типичная программа того времени по умножению одного числа на другое могла выглядеть для процессора так:
- Выдели память под первое число.
- Запиши в это место первое число.
- Выдели память под второе число.
- Запиши в память второе число.
- Поставь единицу в такой-то служебный регистр.
- Выполни команду битового сдвига для первого числа.
- (много других команд)
- Верни служебный регистр в состояние «0».
- Выдели память под результат
- Результат умножения положи на это место.
В итоге получалась большая программа, которую было довольно сложно прочитать.
Такую технологию назвали RISC — Reduced-instruction-set Computing, компьютер с ограниченным набором команд.
Некоторое время спустя технологию RISC усовершенствовали двумя разными способами — так появились архитектуры x86 и ARM. Первые ориентировались на мощные компьютеры, вторые — на небольшие устройства с пониженным энергопотреблением.
x86 — это сложный RISC
С развитием компьютеров программисты захотели писать более сложные программы. Но чем сложнее программа, тем больше кода приходилось писать.
Тогда компания Intel выпустила процессор 8086, который поддерживал много новых команд. Они упрощали написание кода, частично закрывая разрыв между машинным кодом и высокоуровневым языком программирования.
Возьмём тот же пример кода для перемножения двух чисел. Для процессора 8086 код выглядел так:
- Возьми первое и второе число.
- Перемножь их, а результат положи в новый участок памяти.
«Перемножь числа» — это новая сложная команда, доступная в этом процессоре. Когда процессор встречает её в коде, он выполняет много других инструкций, похожих на те, которые мы писали в начале, и получает тот же результат.
Такая технология называется CISC — complex instruction set computer, вычислительная машина со сложным набором команд.
✅ С одной стороны, программистам теперь проще писать код: вместо тридцати инструкций можно написать три, а результат будет таким же. Чем больше новых сложных команд поддерживает процессор, тем быстрее идёт разработка.
❌ С другой — процессору теперь нужно тратить некоторое время на перевод сложных команд в простые. Когда он получает от программиста команду «Перемножь эти два числа», то превращает её в те самые тридцать строк кода и выполняет каждую команду.
После процессора 8086 вышли процессоры 80286 и 80386. Они получились настолько удачными для того времени, что с тех пор Intel маркировку всех своих основных процессоров заканчивала на «86», а технология и набор команд получили название «x86».
ARM — это продвинутый RISC
По другому пути пошла компания ARM, название которой расшифровывается как «Улучшенные RISC-машины». Подход был такой: зачем нужно много сложных команды для процессора, если можно по максимуму использовать простейшие команды и сосредоточиться на эффективности работы?
В итоге ARM усовершенствовали RISC-архитектуру, сделали команды проще и сосредоточились на эффективности.
В те времена ARM-процессоры работали не так быстро, как процессоры семейства x86, зато они потребляли гораздо меньше энергии. Со временем это позволило использовать ARM-процессоры в мобильных телефонах.
Получается, процессоры отличаются тем, что x86 это CISC, а ARM — это RISC?
Большинство думает именно так, и в каком-то смысле это похоже на правду. Но это не совсем точно.
Современные x86-процессоры на 80% состоят из RISC-модулей, которые обрабатывают RISC-команды. Каждая сложная CISC-команда специальным декодером разбивается на много простых команд, которые и выполняют эти модули.
Получается, что в основе любого современного процессора всё равно лежит RISC-архитектура, сверху которой для каждого устройства наслаиваются свои дополнительные команды.
В чём успех ARM
Чтобы сделать процессор с x86-архитектурой, компании нужно самой придумать и нарисовать все транзисторы и соединения между ними. Это сложный и дорогой процесс, который не могут себе позволить маленькие компании. Из крупных производителей x86-процессоров остались только Intel и AMD.
В ARM сделали иначе — они продают лицензии на производство процессоров по своей архитектуре всем желающим. Получается, что любая компания может купить лицензию и делать свои ARM-процессоры. При этом компания может как угодно улучшать свои процессоры — изменять компоновку, добавлять новые модули и так далее.
Именно доступность лицензии и конкуренция привели к быстрому развитию ARM-процессоров, а не RISC-архитектура или наборы команд.
Сейчас на ARM свои процессоры выпускают Samsung, Nvidia, Qualcomm, Atmel, Huawei и многие другие. Если вы производитель смартфонов, вы можете разработать свой собственный процессор на ARM, а можете купить готовый у любой другой компании. Это создаёт конкуренцию на рынке, гонку технологий и всеобщий прогресс.
Главное — внутреннее устройство процессора
Современные процессоры состоят из множества отдельных модулей, каждый из которых делает что-то своё, например:
- обрабатывает изображения,
- отвечает за работу нейросетей,
- регулирует энергопотребление,
- выполняет базовые команды,
- организует работу с памятью,
- следит за безопасностью,
- отвечает за подключение и работу внешних устройств.
От того, как производитель реализует компоновку и соединение модулей, зависит быстродействие процессора и его применимость в разных областях. А из-за того, что ARM-архитектура основана на простых командах, в ней проще соединять такие модули между собой. Получается, что сила ARM — в простоте и гибкости.