Введение: что такое RISC
RISC (Reduced Instruction Set Computer) – это архитектурная концепция проектирования процессоров, основанная на принципе минимального и унифицированного набора команд. Каждая RISC-команда проста, имеет фиксированную длину и выполняется, как правило, за один такт процессора. Такой подход позволяет упростить схему декодирования команд, реализовать глубокий конвейер выполнения и достичь высокой тактовой частоты.
RISC противопоставляется CISC (Complex Instruction Set Computer) – архитектуре с богатым набором сложных многотактовых команд, характерной для процессоров семейства x86 (Intel, AMD). Современные x86-процессоры фактически используют RISC-ядра внутри, транслируя CISC-инструкции в микрооперации, – стирая границу между двумя подходами.
История и контекст развития RISC
Идеи RISC были независимо разработаны в конце 1970-х – начале 1980-х годов в нескольких исследовательских группах:
- IBM 801 (1980): первый RISC-процессор, разработанный командой Джона Кока (John Cocke) в IBM Research. Кок в 1987 году получил премию Тьюринга за этот вклад.
- Проект RISC-I/II в Беркли (1981-1982): команды под руководством Дэвида Паттерсона сформулировали сам термин «RISC» и опубликовали результаты исследований.
- Проект MIPS в Стэнфорде (1981): Джон Хеннесси разработал архитектуру MIPS (Microprocessor without Interlocked Pipeline Stages).
Паттерсон и Хеннесси в 2017 году получили премию Тьюринга – высшую награду в информатике – за вклад в разработку RISC-архитектуры. Коммерческие RISC-процессоры появились в середине 1980-х: SPARC (Sun, 1987), MIPS (Silicon Graphics), PA-RISC (HP), POWER (IBM). Главным успехом RISC стала архитектура ARM (Advanced RISC Machine), основанная в 1990 году в Кембридже и ставшая доминирующей в мобильных устройствах.
Ключевые принципы и отличия от CISC
Основные характеристики RISC-архитектуры:
- Простые команды: каждая инструкция выполняет одну простую операцию (load, store, add, compare).
- Фиксированная длина команды: облегчает декодирование и конвейеризацию.
- Load/Store архитектура: операции над данными выполняются только над регистрами; обращение к памяти – только через команды load/store.
- Большое количество регистров: типично 32 регистра общего назначения против 8 в базовом x86.
- Конвейер: простота команд позволяет реализовать глубокий суперскалярный конвейер.
CISC (x86) наоборот: команды переменной длины, сложные операции с памятью, богатый набор специализированных инструкций. Компиляторы в эпоху RISC писали более сложный код, но аппаратура была проще и быстрее.
Применение и современные RISC-архитектуры
RISC-архитектуры доминируют в нескольких сегментах рынка:
- Мобильные устройства: практически все смартфоны и планшеты работают на ARM-процессорах (Qualcomm Snapdragon, Apple A-series, Samsung Exynos, MediaTek). ARM Holdings лицензирует архитектуру, а производители разрабатывают собственные чипы.
- Суперкомпьютеры: японский Fugaku (1-е место в TOP500 в 2020-2021 гг.) построен на ARM-процессорах A64FX от Fujitsu.
- Серверы и облако: Amazon AWS Graviton, Ampere Altra – ARM-серверные процессоры, предлагающие выгодное соотношение производительности и энергопотребления.
- Встроенные системы и IoT: микроконтроллеры ARM Cortex-M управляют миллиардами устройств.
- Персональные компьютеры: Apple M1/M2/M3 на базе ARM доказали конкурентоспособность RISC в настольном сегменте.
RISC-V – открытая RISC-архитектура с открытым ISA (Instruction Set Architecture), разработанная в UC Berkeley в 2010 году. RISC-V активно развивается в академической среде и промышленности как альтернатива проприетарным ARM и x86.
Связь с другими понятиями
CISC – прямая противоположность RISC; понимание различий между ними необходимо для понимания архитектуры современных процессоров. Микропроцессор (CPU) – устройство, в котором реализуется та или иная ISA. ASIC – специализированные чипы, часто реализующие RISC-ядра для определённых задач. AMD Ryzen – пример современных x86/CISC-процессоров с RISC-ядром внутри. RISC напрямую определяет, как компиляторы генерируют код: RISC требует более «умных» компиляторов, перекладывая оптимизацию с железа на программное обеспечение.