ARMv8-A
ARMv8-A — это 64-битная архитектура набора команд (ISA), разработанная британской компанией Arm Holdings. Она представляет собой первое значительное расширение архитектуры ARM до 64 бит, обеспечивая поддержку как 64-битного (AArch64), так и 32-битного (AArch32) режимов выполнения. ARMv8-A является основой для современных процессоров, используемых в смартфонах, планшетах, серверах, сетевом оборудовании и встраиваемых системах, начиная с 2013 года.
История
Разработка ARMv8 началась в 2011 году, когда стало очевидно, что 32-битная архитектура ARMv7-A (Cortex-A8, A9, A15) упирается в ограничения по адресации памяти (4 ГБ) и производительности для ресурсоёмких задач, таких как обработка видео высокого разрешения и работа с базами данных. Первая публичная спецификация ARMv8-A была выпущена в октябре 2011 года. Первым коммерческим процессором на этой архитектуре стал Apple A7, представленный в iPhone 5S в сентябре 2013 года. Он использовал ядро Cyclone, разработанное Apple по лицензии ARM.
В последующие годы ARMv8-A была расширена рядом дополнительных наборов инструкций, включая:
- AArch32 (2013) — режим совместимости с 32-битным кодом ARMv7-A.
- ARMv8.1-A (2014) — улучшения атомарных операций, поддержка виртуализации и расширения для работы с большими страницами памяти.
- ARMv8.2-A (2016) — поддержка половинной точности (FP16), расширения для машинного обучения (SVE — Scalable Vector Extension) и улучшенная обработка исключений.
- ARMv8.3-A (2017) — расширения для криптографии (SHA-512, SHA-3), улучшенная поддержка многопоточности и новые инструкции для работы с матрицами.
- ARMv8.4-A (2018) — расширения для работы с виртуальной памятью, улучшенная поддержка контейнеров и новые криптографические инструкции (SM3, SM4).
- ARMv8.5-A (2019) — расширения для безопасности (Memory Tagging Extension — MTE), улучшения в работе с памятью и поддержка новых форматов данных.
- ARMv8.6-A (2020) — расширения для работы с матрицами (Matrix Multiply — MMA), улучшенная поддержка машинного обучения и новые инструкции для работы с векторами.
В 2021 году ARM представила ARMv9-A, которая является прямым преемником ARMv8-A и включает все её расширения, а также новые технологии, такие как Confidential Compute Architecture (CCA) и улучшенные возможности для машинного обучения. Однако ARMv8-A остаётся широко используемой архитектурой во многих современных процессорах.
Архитектура
Режимы выполнения
ARMv8-A поддерживает два основных режима выполнения:
- AArch64 — 64-битный режим с 64-битными регистрами общего назначения (X0–X30), 64-битным программным счётчиком (PC) и 64-битным указателем стека (SP). Адресация памяти — 64-битная, что позволяет адресовать до 16 эксабайт (2^64 байт) виртуального адресного пространства. Режим AArch64 использует новый набор инструкций, оптимизированный для 64-битных вычислений.
- AArch32 — 32-битный режим, полностью совместимый с ARMv7-A. Он поддерживает 32-битные регистры (R0–R15), 32-битный программный счётчик и 32-битный указатель стека. AArch32 позволяет выполнять 32-битные приложения без изменений, что упрощает миграцию с ARMv7-A на ARMv8-A.
Переключение между режимами возможно только при смене уровня привилегий (например, при переходе от пользовательского режима к режиму ядра). Процессор может работать только в одном режиме одновременно.
Регистры
В режиме AArch64 доступны следующие регистры:
- 31 регистр общего назначения (X0–X30) размером 64 бита. Регистр X30 используется как регистр связи (link register) для хранения адреса возврата из подпрограммы.
- Программный счётчик (PC) — 64-битный регистр, хранящий адрес текущей инструкции.
- Указатель стека (SP) — 64-битный регистр, используемый для работы со стеком.
- Регистры состояния — 64-битный регистр состояния процесса (PSTATE), который хранит флаги условий (N, Z, C, V) и управляющие биты (например, режим выполнения, уровень привилегий).
- Регистры SIMD и FP — 32 регистра (V0–V31) размером 128 бит, используемые для операций с плавающей точкой (FP) и SIMD-инструкций (Single Instruction, Multiple Data). Каждый регистр может хранить несколько значений меньшего размера (например, 2 64-битных, 4 32-битных, 8 16-битных или 16 8-битных).
В режиме AArch32 доступны 16 32-битных регистров общего назначения (R0–R15), где R15 — программный счётчик, R13 — указатель стека, R14 — регистр связи. Также доступны 32 регистра для SIMD и FP (S0–S31 для одинарной точности, D0–D31 для двойной точности, Q0–Q15 для 128-битных операций).
Набор инструкций
ARMv8-A использует два набора инструкций:
- A64 — 64-битный набор инструкций для режима AArch64. Инструкции имеют фиксированную длину 32 бита. A64 включает:
- Арифметические и логические операции (ADD, SUB, AND, ORR, EOR и др.).
- Операции с памятью (LDR, STR, LDP, STP и др.) с поддержкой различных режимов адресации (базовый, предварительная индексация, пост-индексация).
- Условные инструкции (CSEL, CSINC, CSINV, CSNEG) для реализации условных выражений без ветвлений.
- Инструкции для работы с плавающей точкой (FADD, FSUB, FMUL, FDIV, FCMP и др.) и SIMD-инструкции (ADD, SUB, MUL, FMAX, FMIN, SHA-256, AES и др.).
- Инструкции для управления системой (SVC, HVC, SMC, MSR, MRS и др.).
- A32 и T32 — 32-битные наборы инструкций для режима AArch32. A32 — это классический 32-битный набор ARM (фиксированная длина 32 бита), а T32 — набор Thumb/Thumb-2 (переменная длина 16 или 32 бита). Они полностью совместимы с ARMv7-A.
Уровни привилегий
ARMv8-A поддерживает четыре уровня привилегий (Exception Levels — EL):
- EL0 — пользовательский режим (User). Выполняются приложения.
- EL1 — режим ядра операционной системы (OS). Выполняется ядро ОС.
- EL2 — режим гипервизора (Hypervisor). Используется для виртуализации.
- EL3 — режим монитора безопасности (Secure Monitor). Используется для управления безопасностью и переключения между обычным и защищённым мирами.
Переход между уровнями осуществляется через механизм исключений (exceptions). Каждый уровень имеет собственный стек, регистры состояния и векторную таблицу исключений. Это обеспечивает изоляцию и безопасность между различными компонентами системы.
Классификация
ARMv8-A является частью семейства архитектур ARM, которое включает:
- ARMv8-A — для приложений (Application). Ориентирована на высокопроизводительные системы: смартфоны, планшеты, серверы, сетевые устройства.
- ARMv8-R — для реального времени (Real-time). Используется в системах с жёсткими требованиями к времени отклика: автомобильные системы, промышленные контроллеры.
- ARMv8-M — для микроконтроллеров (Microcontroller). Оптимизирована для встраиваемых систем с низким энергопотреблением: датчики, носимые устройства, IoT.
Применение
ARMv8-A широко используется в различных устройствах и системах:
Мобильные устройства
Большинство современных смартфонов и планшетов, начиная с 2013 года, используют процессоры на архитектуре ARMv8-A. Примеры:
- Apple A7–A16 (iPhone, iPad) — собственные разработки Apple.
- Qualcomm Snapdragon 800–8 Gen 2 (Android-смартфоны) — лицензированные ядра Kryo.
- Samsung Exynos 5–2200 (Galaxy S, Note) — собственные ядра Mongoose и Cortex.
- MediaTek Helio и Dimensity (бюджетные и средние смартфоны) — ядра Cortex-A.
- Huawei Kirin 920–9000 (смартфоны Huawei) — ядра Cortex-A.
Серверы и облачные вычисления
ARMv8-A активно внедряется в серверный сегмент благодаря высокой энергоэффективности. Примеры:
- Amazon Graviton (AWS) — процессоры на базе ARMv8-A для облачных вычислений.
- Ampere Altra — серверные процессоры с 80 ядрами ARMv8-A.
- Fujitsu A64FX — процессор для суперкомпьютера Fugaku (№1 в рейтинге TOP500 в 2020–2021 годах).
Встраиваемые системы
ARMv8-A используется в роутерах, сетевых хранилищах, промышленных контроллерах и автомобильных системах. Примеры:
- Qualcomm IPQ8074 — процессор для Wi-Fi 6 роутеров.
- NXP i.MX 8 — процессор для автомобильных информационно-развлекательных систем.
- Rockchip RK3399 — процессор для одноплатных компьютеров (например, Raspberry Pi 4).
Ноутбуки и персональные компьютеры
С 2020 года ARMv8-A используется в ноутбуках на базе Windows on ARM и Apple Silicon:
- Apple M1, M2, M3 — процессоры для MacBook и iPad Pro.
- Microsoft SQ1, SQ2 — процессоры для Surface Pro X.
- Qualcomm Snapdragon 8cx Gen 3 — процессор для ноутбуков на Windows on ARM.
Критика
Несмотря на широкое распространение, ARMv8-A имеет ряд недостатков:
- Сложность реализации — поддержка двух режимов (AArch64 и AArch32) усложняет проектирование процессоров и увеличивает площадь кристалла.
- Энергопотребление — хотя ARMv8-A энергоэффективнее x86, в высокопроизводительных ядрах (например, Cortex-X1, X2) энергопотребление может быть сопоставимо с мобильными процессорами Intel.
- Совместимость — приложения, написанные для 32-битной архитектуры, могут работать только в режиме AArch32, что ограничивает использование 64-битных возможностей.
- Экосистема — на момент выхода (2013) экосистема 64-битных приложений для ARM была слабо развита, что замедляло переход с ARMv7-A.
Источники
- ARM Architecture Reference Manual ARMv8-A (ARM DDI 0487)
- ARMv8-A Architecture Overview (Arm Developer)
- «ARMv8-A: 64-bit Architecture for the Next Generation of Mobile and Embedded Systems» (Arm White Paper, 2011)
- «The ARMv8-A Architecture and Its Extensions» (IEEE Micro, 2015)
- «ARMv8-A: A 64-bit Architecture for Mobile and Server Applications» (ACM Computing Surveys, 2016)
- «Apple A7: The First 64-bit ARM Processor» (AnandTech, 2013)
- «ARMv8-A: Architecture and Implementation» (Springer, 2018)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →