Впервые он был представлен в архитектуре Armv8-A . Arm выпускает новое расширение каждый год. [1]
Расширения и функции ARMv8.x и ARMv9.x
Анонсированный в октябре 2011 года [2] ARMv8-A представляет собой фундаментальное изменение в архитектуре ARM. Он добавляет дополнительную 64-битную архитектуру под названием «AArch64» и связанный с ней новый набор инструкций «A64». AArch64 обеспечивает совместимость в пользовательском пространстве с существующей 32-битной архитектурой («AArch32» / ARMv7-A) и набором команд («A32»). 16-32-битный набор команд Thumb называется «T32» и не имеет 64-битного аналога. ARMv8-A позволяет 32-битным приложениям выполняться в 64-битной ОС, а 32-битная ОС находится под управлением 64-битного гипервизора . [3] ARM анонсировала свои ядра Cortex-A53 и Cortex-A57 30 октября 2012 года. [4] Apple была первой, кто выпустил совместимое с ARMv8-A ядро ( Cyclone ) в потребительском продукте ( iPhone 5S ). AppliedMicro , используя FPGA , первым продемонстрировал ARMv8-A. [5] Первой SoC ARMv8-A от Samsung является процессор Exynos 5433, используемый в Galaxy Note 4 , который имеет два кластера по четыре ядра Cortex-A57 и Cortex-A53 в конфигурации big.LITTLE ; но он будет работать только в режиме AArch32. [6]
Как для AArch32, так и для AArch64, ARMv8-A соответствует стандарту VFPv3/v4 и расширенному SIMD (Neon). Он также добавляет инструкции криптографии, поддерживающие AES , SHA-1 / SHA-256 и арифметику с конечными полями . [7]
Соглашения об именах
64 + 32 бит
Архитектура: AArch64
Спецификация: ARMv8-A
Наборы инструкций: A64 + A32
Суффиксы: v8-A
32 + 16 (большой) бит
Архитектура: AArch32
Спецификация: ARMv8-R/ARMv7-A
Наборы инструкций: A32 + T32
Суффиксы: -A32/-R/v7-A
Пример: ARMv8-R, Cortex-A32 [8]
Возможности AArch64
Новый набор инструкций, A64.
Имеет 31 64-битный регистр общего назначения.
Имеет выделенный регистр нуля или указателя стека (SP) (в зависимости от инструкции).
Программный счетчик (ПК) больше не доступен напрямую как регистр.
Инструкции по-прежнему имеют длину 32 бита и в основном такие же, как A32 (с отброшенными инструкциями LDM/STM и большинством условий выполнения).
Имеет парные загрузки/хранилища (вместо LDM/STM).
Нет предопределения для большинства инструкций (кроме ветвей).
Большинство инструкций могут принимать 32-битные или 64-битные аргументы.
Адреса считаются 64-битными.
Расширенный SIMD (неон) улучшенный
Имеет 32 × 128-битных регистров (вместо 16), также доступных через VFPv4.
Инструкции шифрования/дешифрования AES и хеширования SHA-1/SHA-2 также используют эти регистры.
Новая система исключений
Меньше банковских регистров и режимов.
Трансляция памяти из 48-битных виртуальных адресов на основе существующего расширения больших физических адресов (LPAE), которое было разработано с возможностью легкого расширения до 64-битных.
Расширение: подсказка по сбору данных (ARMv8.0-DGH).
AArch64 был представлен в ARMv8-A и включен в последующие версии ARMv8-A. Он также был представлен в ARMv8-R в качестве опции после его появления в ARMv8-A; он не включен в ARMv8-M.
Форматы инструкций
Основной код операции для выбора группы, к которой принадлежит инструкция A64, находится в битах 25–28.
ARMv8.1-А
В декабре 2014 года было объявлено о выпуске ARMv8.1-A, [9] обновления с «дополнительными преимуществами по сравнению с версией 8.0». Улучшения разделились на две категории: изменения в наборе инструкций, а также изменения в модели исключений и трансляции памяти.
Улучшения набора команд включали следующее:
Набор атомарных инструкций чтения-записи AArch64.
Дополнения к набору команд Advanced SIMD для AArch32 и AArch64, позволяющие оптимизировать некоторые библиотеки:
Инструкции добавляются в векторной и скалярной формах.
Набор инструкций загрузки и сохранения AArch64, которые могут обеспечить порядок доступа к памяти, ограниченный настраиваемыми адресными областями.
Дополнительные инструкции CRC в версии 8.0 становятся обязательными в ARMv8.1.
Улучшения модели исключений и системы трансляции памяти включали следующее:
Новый бит состояния «Привилегированный доступ никогда» (PAN) обеспечивает контроль, который предотвращает привилегированный доступ к пользовательским данным, если он не включен явно.
Увеличенный диапазон VMID для виртуализации; поддерживает большее количество виртуальных машин.
Дополнительная поддержка аппаратного обновления флага доступа к таблице страниц и стандартизация дополнительного, обновленного аппаратного обеспечения, механизма «грязных битов».
Расширения хоста виртуализации (VHE). Эти улучшения повышают производительность гипервизоров типа 2 за счет снижения накладных расходов на программное обеспечение, связанных с переходом между хостовой и гостевой операционными системами. Расширения позволяют хостовой ОС работать на уровне EL2, а не на уровне EL1, без существенных изменений.
Механизм освобождения некоторых битов таблицы трансляции для использования операционной системой, когда ОС не требует аппаратной поддержки.
Старший байт игнорируется при разметке памяти. [10]
ARMv8.2-А
В январе 2016 года был анонсирован ARMv8.2-A. [11] Его улучшения можно разделить на четыре категории:
Дополнительная обработка данных с плавающей запятой половинной точности (половинная точность уже поддерживалась, но не для обработки, а как формат хранения).
Масштабируемое векторное расширение (SVE) — это «дополнительное расширение архитектуры ARMv8.2-A и новее», разработанное специально для векторизации научных рабочих нагрузок высокопроизводительных вычислений . [12] [13] Спецификация допускает реализацию векторов переменной длины от 128 до 2048 бит. Расширение дополняет и не заменяет расширения NEON .
512-битный вариант SVE уже реализован на суперкомпьютере Fugaku с использованием ARM-процессора Fujitsu A64FX ; этот компьютер [14] был самым быстрым суперкомпьютером в мире в течение двух лет, с июня 2020 года [15] по май 2022 года. [16] Более гибкая версия, 2x256 SVE, была реализована на ARM-процессоре AWS Graviton3 .
SVE поддерживается компилятором GCC : GCC 8 поддерживает автоматическую векторизацию [13] , а GCC 10 поддерживает встроенные функции C. По состоянию на июль 2020 года [обновлять]LLVM и clang поддерживают встроенные функции C и IR. Собственная версия LLVM от ARM поддерживает автоматическую векторизацию. [17]
ARMv8.3-А
В октябре 2016 года был анонсирован ARMv8.3-A. Его усовершенствования разделены на шесть категорий: [18]
Аутентификация указателя [19] (только AArch64); обязательное расширение (на основе нового блочного шифра QARMA [20] ) архитектуры (компиляторам необходимо использовать функцию безопасности, но поскольку инструкции находятся в пространстве NOP, они обратно совместимы, хотя и не обеспечивают дополнительной безопасности на старых чипах).
Новая инструкция FJCVTZS ( JavaScript- преобразование чисел с плавающей запятой в знаковую фиксированную точку, округление в сторону нуля). [21]
Изменение модели согласованности памяти (только AArch64); для поддержки (не по умолчанию) более слабой модели RCpc (Release Consistent Processor Consistent) C++11 / C11 (модель согласованности C++11/C11 по умолчанию уже поддерживалась в предыдущей версии ARMv8).
Поддержка механизма идентификации для более крупных кэшей, видимых системой (AArch64 и AArch32).
Архитектура ARMv8.3-A теперь поддерживается (по крайней мере) компилятором GCC 7. [22]
ARMv8.4-А
В ноябре 2017 года был анонсирован ARMv8.4-A. Его улучшения попали в следующие категории: [23] [24] [25]
Инструкции генератора случайных чисел - «предоставление детерминированных и истинно случайных чисел, соответствующих различным национальным и международным стандартам»
2 августа 2019 года Google объявил , что Android будет использовать расширение тегов памяти (MTE). [30]
В марте 2021 года был анонсирован ARMv9-A. Базовая версия ARMv9-A — это все функции ARMv8.5. [31] [32] [33] В ARMv9-A также добавлено:
Масштабируемое векторное расширение 2 (SVE2). SVE2 основан на масштабируемой векторизации SVE для увеличения мелкозернистого параллелизма уровня данных (DLP) , что позволяет выполнять больше работы на одну инструкцию. SVE2 стремится распространить эти преимущества на более широкий спектр программного обеспечения, включая DSP и мультимедийный код SIMD, которые в настоящее время используют Neon. [34] Коды разработки LLVM / Clang 9.0 и GCC 10.0 были обновлены для поддержки SVE2. [34] [35]
Расширение транзакционной памяти (TME). Вслед за расширениями x86 TME обеспечивает поддержку аппаратной транзакционной памяти (HTM) и устранения транзакционных блокировок (TLE). TME стремится обеспечить масштабируемый параллелизм для увеличения грубого параллелизма на уровне потоков (TLP) , чтобы позволить выполнять больше работы на поток. [34] Коды разработки LLVM / Clang 9.0 и GCC 10.0 были обновлены для поддержки TME. [35]
Инструкции по манипуляции матрицей SIMD, BFDOT, BFMMLA, BFMLAL и BFCVT
улучшения для виртуализации, управления системой и безопасности
и следующие расширения (в которые в LLVM 11 уже добавлена поддержка [39] ):
Расширенная виртуализация счетчиков (ARMv8.6-ECV)
Мелкозернистые ловушки (ARMv8.6-FGT)
Виртуализация мониторов активности (ARMv8.6-AMU)
Например, детальные ловушки, инструкции ожидания события (WFE), EnhancedPAC2 и FPAC. Расширения bfloat16 для SVE и Neon в основном предназначены для глубокого обучения. [40]
ARMv8.7-A и ARMv9.2-A
В сентябре 2020 года был анонсирован ARMv8.7-A. Его улучшения попали в следующие категории: [26] [41]
Расширение масштабируемой матрицы (SME) (только ARMv9.2). [42] МСП добавляет новые функции для эффективной обработки матриц, такие как:
Расширенная поддержка горячего подключения PCIe (AArch64).
Атомная 64-байтовая загрузка и сохранение в ускорители (AArch64)
Ожидание инструкции (WFI) и ожидание события (WFE) с тайм-аутом (AArch64)
Запись ветвей записи (только ARMv9.2)
ARMv8.8-A и ARMv9.3-A
В сентябре 2021 года были анонсированы ARMv8.8-A и ARMv9.3-A. Их улучшения попали в следующие категории: [26] [43]
Немаскируемые прерывания (AArch64)
Инструкции по оптимизации операций стилей memcpy() и memset() (AArch64)
Улучшения PAC (AArch64)
Условные переходы с подсказками (AArch64)
LLVM 15 поддерживает ARMv8.8-A и ARMv9.3-A. [44]
ARMv8.9-A и ARMv9.4-A
В сентябре 2022 года были анонсированы ARMv8.9-A и ARMv9.4-A, в том числе: [45]
Улучшения архитектуры системы виртуальной памяти (VMSA)
Косвенное разрешение и наложения
Усиление перевода
128-битные таблицы перевода (только ARMv9)
Расширение масштабируемой матрицы 2 (SME2) (только ARMv9)
Многовекторные инструкции
Многовекторные предикаты
Сжатие веса 2b/4b
1б бинарные сети
Предварительная выборка диапазона
Защищенный стек управления (GCS) (только ARMv9)
Конфиденциальные вычисления
Контексты шифрования памяти
Назначение устройства
Armv8-R (архитектура реального времени)
В профиль Armv8-R была добавлена дополнительная поддержка AArch64, причем первым ядром Arm, реализующим ее, стал Cortex-R82. [46] Добавлен набор инструкций A64 с некоторыми изменениями в инструкциях по барьеру памяти. [47]
Рекомендации
^ «Обзор». Изучите архитектуру: понимание расширений Armv8.x и Armv9.x .
^ «ARM раскрывает технические подробности следующей версии архитектуры ARM» (пресс-релиз). Арм Холдингс . 27 октября 2011 г. Архивировано из оригинала 1 января 2019 г. . Проверено 20 сентября 2013 г.
^ Гризентуэйт, Ричард (2011). «Обзор технологии ARMv8-A» (PDF) . Архивировано из оригинала (PDF) 11 ноября 2011 года . Проверено 31 октября 2011 г.
^ «ARM выпускает серию Cortex-A50, самые энергоэффективные 64-битные процессоры в мире» (пресс-релиз). Арм Холдингс . Проверено 31 октября 2012 г.
^ «AppliedMicro демонстрирует первое в мире 64-битное ядро ARM v8» (пресс-релиз). ПрикладнойМикро. 28 октября 2011 года . Проверено 11 февраля 2014 г.
^ «Exynos 5433 от Samsung — это SoC A57/A53 ARM» . АнандТех . Проверено 17 сентября 2014 г.
^ «Техническое справочное руководство процессора ARM Cortex-A53 MPCore: Расширение криптографии» . РУКА . Проверено 11 сентября 2016 г.
^ «Процессор Cortex-A32 — ARM» . Проверено 18 декабря 2016 г.
↑ Браш, Дэвид (2 декабря 2014 г.). «Архитектура ARMv8-A и ее постоянное развитие» . Проверено 23 января 2015 г.
↑ Браш, Дэвид (5 января 2016 г.). «Эволюция архитектуры ARMv8-A» . Проверено 7 июня 2016 г.
^ «Масштабируемое векторное расширение для архитектуры ARMv8» . Арм Сообщество . 22 августа 2016 года . Проверено 8 июля 2018 г.
^ ab «Серия выпусков GCC 8 – Изменения, новые функции и исправления – Проект GNU – Фонд свободного программного обеспечения (FSF)» . gcc.gnu.org . Проверено 9 июля 2018 г.
^ «Fujitsu завершает прототип процессора суперкомпьютера Post-K, начинает испытания функциональности - Fujitsu Global» . www.fujitsu.com (пресс-релиз) . Проверено 8 июля 2018 г.
^ «Японский Fugaku завоевал титул самого быстрого суперкомпьютера в мире» (пресс-релиз). www.riken.jp. 23 июня 2020 г. Проверено 7 декабря 2020 г.
^ «Граница ORNL первой преодолела потолок эксафлопа» . Топ500 . 30 мая 2022 г. Проверено 30 мая 2022 г.
↑ Дэвид Браш (26 октября 2016 г.). «Архитектура ARMv8-A – дополнения 2016 г.».
^ «[Ping~,AArch64] Добавить поддержку командной строки для -march=armv8.3-a». Расширение аутентификации указателя определено как обязательное расширение в ARMv8.3-A и не является необязательным.
^ «Qualcomm выпускает технический документ с подробным описанием аутентификации указателя на ARMv8.3» . 10 января 2017 г.
^ «Инструкции A64 с плавающей запятой: FJCVTZS» . Arm.com . Проверено 11 июля 2019 г.
^ «Серия выпусков GCC 7 – изменения, новые функции и исправления» . Теперь поддерживается архитектура ARMv8.3-A. Его можно использовать, указав опцию -march=armv8.3-a. [..] Опция -msign-return-address= поддерживается для включения защиты обратного адреса с помощью расширений аутентификации указателей ARMv8.3-A.
^ «Представляем расширения 2017 года для архитектуры Arm» . сообщество.arm.com . Проверено 15 июня 2019 г.
^ «Изучение машинного обучения скалярного произведения» . сообщество.arm.com . Проверено 15 июня 2019 г.
^ «ARM готовит поддержку ARMv8.4-A для компилятора GCC - Phoronix» . www.phoronix.com . Проверено 14 января 2018 г.
^ abcd «Расширения и функции ARMv8.x и ARMv9.x». Изучите архитектуру: понимание расширений ARMv8.x и ARMv9.x .
^ «Объявление Arm Architecture ARMv8.5-A - Блог о процессорах - Процессоры - Сообщество Arm» . сообщество.arm.com . Проверено 26 апреля 2019 г.
^ «Справочное руководство по архитектуре Arm ARMv8, для профиля архитектуры ARMv8-A» . ARM-разработчик . Проверено 6 августа 2019 г.
^ «Архитектура Arm MTE: повышение безопасности памяти» . сообщество.arm.com . Проверено 27 июля 2021 г.
^ «Внедрение расширения маркировки памяти Arm в Android» . Блог Google по онлайн-безопасности . Проверено 6 августа 2019 г.
^ «Решение Arm для будущих потребностей искусственного интеллекта, безопасности и специализированных вычислений — v9» . Рука | Архитектура цифрового мира . Проверено 27 июля 2021 г.
↑ Шор, Дэвид (30 марта 2021 г.). «ARM запускает ARMv9». Викичип-предохранитель . Проверено 27 июля 2021 г.
^ Фрумусану, Андрей. «Arm анонсирует архитектуру ARMv9: SVE2, безопасность и следующее десятилетие». www.anandtech.com . Проверено 27 июля 2021 г.
^ abc «Arm выпускает SVE2 и TME для архитектуры A-профиля - Блог процессоров - Процессоры - Сообщество Arm» . сообщество.arm.com . Проверено 25 мая 2019 г.
^ ab «Выравнивание поддержки Arm SVE2 для GCC 10, LLVM Clang 9.0 – Phoronix» . www.phoronix.com . Проверено 26 мая 2019 г.
^ «Раскрытие возможностей данных с помощью Arm CCA» . сообщество.arm.com . Проверено 27 июля 2021 г.
^ «Arm представляет свою конфиденциальную вычислительную архитектуру» . WikiChip Предохранитель . 23 июня 2021 г. Проверено 27 июля 2021 г.
^ «Обновление архитектуры профиля Arm A, 2019» . сообщество.arm.com . Проверено 26 сентября 2019 г.
^ «Примечания к выпуску LLVM 11.0.0» . Releases.llvm.org . Проверено 11 марта 2021 г.
^ «Расширения BFloat16 для ARMv8-A» . сообщество.arm.com . Проверено 30 августа 2019 г.
↑ Вайдманн, Мартин (21 сентября 2020 г.). «Развитие архитектуры Arm A-профиля 2020». сообщество.arm.com . РУКА . Проверено 28 сентября 2022 г.
^ «Масштабируемое матричное расширение для архитектуры ARMv9-A» . сообщество.arm.com . Проверено 27 июля 2021 г.
^ Вайдманн, Мартин (8 сентября 2021 г.). «Развитие архитектуры Arm A-профиля 2021». сообщество.arm.com . РУКА . Проверено 28 сентября 2022 г.
^ «Что нового в LLVM 15? - Блог «Архитектуры и процессоры» - Блоги сообщества Arm - Сообщество Arm» . Проверено 15 апреля 2023 г.
^ «Развитие архитектуры Arm A-Profile 2022 — Блог об архитектурах и процессорах — Блоги сообщества Arm — Сообщество Arm» . сообщество.arm.com . Проверено 9 декабря 2022 г.
↑ Фрумусану, Андрей (3 сентября 2020 г.). «ARM анонсировала Cortex-R82: первый 64-битный процессор реального времени». АнандТех .
^ «Дополнение к справочному руководству по архитектуре Arm — Armv8, для профиля архитектуры Armv8-R AArch64» . Арм, ООО