AArch64
Эта статья может быть слишком технической для понимания большинства читателей . ( июнь 2020 г. ) |
AArch64 или ARM64 — это 64-битное состояние выполнения семейства архитектуры ARM . Впервые он был представлен в архитектуре Armv8-A и имел множество обновлений расширений. [1]
ARM-A (архитектура приложения)
[ редактировать ]Объявлено в октябре 2011 г. [2] ARMv8-A представляет собой фундаментальное изменение архитектуры ARM. Он добавляет дополнительное 64-битное состояние выполнения под названием «AArch64» и связанный с ним новый набор инструкций «A64» в дополнение к 32-битному состоянию выполнения «AArch32», поддерживающему 32-битный «A32» (исходный 32-битный режим выполнения). -bit Arm) и наборы инструкций «T32» (Thumb/Thumb-2). Последние наборы инструкций обеспечивают совместимость пользовательского пространства с существующей 32-битной архитектурой ARMv7-A. 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]
ARMv8-A включает VFPv3/v4 и расширенный SIMD (Neon) в качестве стандартных функций как в AArch32, так и в AArch64. Он также добавляет инструкции криптографии, поддерживающие AES , SHA-1 / SHA-256 и арифметику с конечными полями . [7]
Процессор ARMv8-A может поддерживать один или оба AArch32 и AArch64; он может поддерживать AArch32 и AArch64 на более низких уровнях исключений и только AArch64 на более высоких уровнях исключений. [8] Например, ARM Cortex-A32 поддерживает только AArch32. [9] ARM Cortex-A34 поддерживает только AArch64, [10] а ARM Cortex-A72 поддерживает как AArch64, так и AArch32. [11] Процессор ARMv9-A должен поддерживать AArch64 на всех уровнях исключений и может поддерживать AArch32 на уровне EL0. [8]
Соглашения об именах
[ редактировать ]- 64-бит:
- Состояние выполнения: AArch64.
- Наборы инструкций: A64.
- 32-битный:
- Состояние выполнения: AArch32.
- Наборы инструкций: A32 + T32.
- Пример: ARMv8-R, Cortex-A32. [12]
Возможности AArch64
[ редактировать ]- Новый набор инструкций, A64:
- Имеет 31 64-битный регистр общего назначения.
- Имеет выделенный регистр нуля или указателя стека (SP) (в зависимости от инструкции).
- Программный счетчик (ПК) больше не доступен напрямую как регистр.
- Инструкции по-прежнему имеют длину 32 бита и в основном такие же, как A32 (с отброшенными инструкциями LDM/STM и большинством условий выполнения).
- Имеет парные загрузки/хранилища (вместо LDM/STM).
- Нет предопределения для большинства инструкций (кроме ветвей).
- Большинство инструкций могут принимать 32-битные или 64-битные аргументы.
- Адреса считаются 64-битными.
- Расширенный SIMD (неон) улучшенный:
- Имеет 32 × 128-битных регистров (вместо 16), также доступных через VFPv4.
- Поддерживает формат с плавающей запятой двойной точности .
- Полностью соответствует стандарту IEEE 754 .
- Инструкции шифрования/дешифрования 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, [13] было объявлено об обновлении с «дополнительными преимуществами по сравнению с версией 8.0». Улучшения разделились на две категории: изменения в наборе инструкций, а также изменения в модели исключений и трансляции памяти.
Улучшения набора команд включали следующее:
- Набор атомарных инструкций чтения-записи AArch64.
- Дополнения к набору команд Advanced SIMD для AArch32 и AArch64, позволяющие оптимизировать некоторые библиотеки:
- Знаковое насыщение, округление, удвоение, умножение, накопление, возврат старшей половины.
- Знаковое насыщение, округление, удвоение, умножение, вычитание, возврат старшей половины.
- Инструкции добавляются в векторной и скалярной формах.
- Набор инструкций загрузки и сохранения AArch64, которые могут обеспечить порядок доступа к памяти, ограниченный настраиваемыми адресными областями.
- Дополнительные инструкции CRC в версии 8.0 становятся обязательными в ARMv8.1.
Улучшения модели исключений и системы трансляции памяти включали следующее:
- Новый бит состояния «Привилегированный доступ никогда» (PAN) обеспечивает контроль, который предотвращает привилегированный доступ к пользовательским данным, если он не включен явно.
- Увеличенный диапазон VMID для виртуализации; поддерживает большее количество виртуальных машин.
- Дополнительная поддержка аппаратного обновления флага доступа к таблице страниц и стандартизация дополнительного, обновленного аппаратного обеспечения, механизма «грязных битов».
- Расширения хоста виртуализации (VHE). Эти улучшения повышают производительность гипервизоров типа 2 за счет снижения накладных расходов на программное обеспечение, связанных с переходом между хостовой и гостевой операционными системами. Расширения позволяют хостовой ОС работать на уровне EL2, а не на уровне EL1, без существенных изменений.
- Механизм освобождения некоторых битов таблицы трансляции для использования операционной системой, когда ОС не требует аппаратной поддержки.
- Старший байт игнорируется при разметке памяти . [14]
ARMv8.2-А
[ редактировать ]В январе 2016 года был анонсирован ARMv8.2-A. [15] Его усовершенствования разделены на четыре категории:
- Дополнительная обработка данных с плавающей запятой половинной точности (половинная точность уже поддерживалась, но не для обработки, а как формат хранения).
- Улучшения модели памяти.
- Внедрение расширения надежности, доступности и удобства обслуживания (расширение RAS).
- Внедрение статистического профилирования.
Масштабируемое векторное расширение (SVE)
[ редактировать ]Масштабируемое векторное расширение (SVE) — это «дополнительное расширение архитектуры ARMv8.2-A и новее», разработанное специально для векторизации научных рабочих нагрузок высокопроизводительных вычислений . [16] [17] Спецификация позволяет реализовать переменную длину векторов от 128 до 2048 бит. Расширение дополняет и не заменяет расширения NEON .
512-битный вариант SVE уже реализован на суперкомпьютере Fugaku с использованием ARM-процессора Fujitsu A64FX ; этот компьютер [18] был самым быстрым суперкомпьютером в мире в течение двух лет, с июня 2020 года. [19] до мая 2022 года. [20] Более гибкая версия — 2x256 SVE — реализована на базе ARM-процессора AWS Graviton3 .
SVE поддерживается компилятором GCC , причем GCC 8 поддерживает автоматическую векторизацию. [17] и GCC 10, поддерживающий встроенные функции C. По состоянию на июль 2020 г. [update], LLVM и clang поддерживают встроенные функции C и IR. Собственная версия LLVM от ARM поддерживает автоматическую векторизацию. [21]
ARMv8.3-А
[ редактировать ]В октябре 2016 года был анонсирован ARMv8.3-A. Его усовершенствования разделены на шесть категорий: [22]
- Аутентификация указателя [23] (только AArch64); обязательное расширение (на основе нового блочного шифра QARMA [24] ) к архитектуре (компиляторам необходимо использовать эту функцию безопасности, но поскольку инструкции находятся в пространстве NOP, они обратно совместимы, хотя и не обеспечивают дополнительной безопасности на старых чипах).
- Вложенная виртуализация (только AArch64).
- Расширенная поддержка комплексных номеров SIMD (AArch64 и AArch32); например, повороты на угол, кратный 90 градусам.
- преобразование чисел с плавающей запятой Новая инструкция FJCVTZS ( JavaScript- в знаковую фиксированную точку, округление в сторону нуля). [25]
- Изменение модели согласованности памяти (только AArch64); для поддержки (не по умолчанию) более слабой модели RCpc (Release Consistent Processor Consistent) C++11 / C11 (модель согласованности C++11/C11 по умолчанию уже поддерживалась в предыдущей версии ARMv8).
- Поддержка механизма идентификаторов для более крупных кэшей, видимых системой (AArch64 и AArch32).
Архитектура ARMv8.3-A теперь поддерживается (по крайней мере) компилятором GCC 7. [26]
ARMv8.4-А
[ редактировать ]В ноябре 2017 года был анонсирован ARMv8.4-A. Его улучшения попали в следующие категории: [27] [28] [29]
- SHA3/SHA512/SM3/ SM4 « Крипторасширения ». Т.е. необязательные инструкции.
- Улучшенная поддержка виртуализации.
- Возможности разделения памяти и мониторинга (MPAM).
- Новое состояние Secure EL2 и мониторы активности.
- целых чисел со знаком и без знака (SDOT и UDOT). скалярного произведения Инструкции
ARMv8.5-A и ARMv9.0-A
[ редактировать ]В сентябре 2018 года был анонсирован ARMv8.5-A. Его улучшения попали в следующие категории: [30] [31] [32]
- Расширение маркировки памяти (MTE) (AArch64). [33]
- Индикаторы целевой ветки (BTI) (AArch64) для уменьшения «способности злоумышленника выполнить произвольный код». Как и аутентификация указателя, соответствующие инструкции в более ранних версиях ARMv8-A не выполняются.
- Инструкции генератора случайных чисел - «предоставление детерминированных и истинно случайных чисел, соответствующих различным национальным и международным стандартам».
2 августа 2019 года Google объявил, что Android будет использовать расширение тегов памяти (MTE). [34]
В марте 2021 года был анонсирован ARMv9-A. Базовая версия ARMv9-A — это все функции ARMv8.5. [35] [36] [37] ARMv9-A также добавляет:
- Масштабируемое векторное расширение 2 (SVE2). SVE2 основан на масштабируемой векторизации SVE для увеличения мелкозернистого параллелизма уровня данных (DLP) , что позволяет выполнять больше работы на одну инструкцию. SVE2 стремится распространить эти преимущества на более широкий спектр программного обеспечения, включая DSP и мультимедийный код SIMD, которые в настоящее время используют Neon . [38] Коды разработки LLVM Clang / 10.0 были обновлены для поддержки SVE2 9.0 и GCC . [38] [39]
- Расширение транзакционной памяти (TME). Вслед за расширениями x86 TME обеспечивает поддержку аппаратной транзакционной памяти (HTM) и устранения транзакционных блокировок (TLE). TME стремится обеспечить масштабируемый параллелизм для увеличения грубого параллелизма на уровне потоков (TLP) , чтобы позволить выполнять больше работы на поток. [38] Коды разработки LLVM Clang / 10.0 9.0 и GCC были обновлены для поддержки TME. [39]
- Конфиденциальная вычислительная архитектура (CCA). [40] [41]
ARMv8.6-A и ARMv9.1-A
[ редактировать ]В сентябре 2019 года был анонсирован ARMv8.6-A. Его улучшения попали в следующие категории: [30] [42]
- Общее матричное умножение (GEMM).
- Поддержка формата Bfloat16 .
- Инструкции по манипуляции матрицей SIMD, BFDOT, BFMMLA, BFMLAL и BFCVT.
- Улучшения в области виртуализации, управления системой и безопасности.
- И следующие расширения (в которые в LLVM 11 уже добавлена поддержка [43] ):
- Расширенная виртуализация счетчиков (ARMv8.6-ECV).
- Мелкозернистые ловушки (ARMv8.6-FGT).
- Виртуализация мониторов активности (ARMv8.6-AMU).
Например, детальные ловушки, инструкции ожидания события (WFE), EnhancedPAC2 и FPAC. Расширения bfloat16 для SVE и Neon в основном предназначены для глубокого обучения. [44]
ARMv8.7-A и ARMv9.2-A
[ редактировать ]В сентябре 2020 года был анонсирован ARMv8.7-A. Его улучшения попали в следующие категории: [30] [45]
- Расширение масштабируемой матрицы (SME) (только ARMv9.2). [46] SME добавляет новые функции для эффективной обработки матриц, такие как:
- Матричное хранение тайлов.
- Транспонирование матрицы «на лету».
- Загрузка/сохранение/вставка/извлечение векторов тайлов.
- Матричное внешнее произведение векторов SVE.
- «Режим потоковой передачи» СВЕ.
- Расширенная поддержка горячего подключения PCIe (AArch64).
- Атомная 64-байтовая загрузка и сохранение в ускорители (AArch64).
- Ожидание инструкции (WFI) и ожидание события (WFE) с тайм-аутом (AArch64).
- Запись ветвей записи (только ARMv9.2).
ARMv8.8-A и ARMv9.3-A
[ редактировать ]В сентябре 2021 года были анонсированы ARMv8.8-A и ARMv9.3-A. Их улучшения попали в следующие категории: [30] [47]
- Немаскируемые прерывания (AArch64).
- Инструкции по оптимизации операций стилей memcpy() и memset() (AArch64).
- Улучшения PAC (AArch64).
- Условные переходы с подсказками (AArch64).
LLVM 15 поддерживает ARMv8.8-A и ARMv9.3-A. [48]
ARMv8.9-A и ARMv9.4-A
[ редактировать ]В сентябре 2022 года были анонсированы ARMv8.9-A и ARMv9.4-A, в том числе: [49]
- Улучшения архитектуры системы виртуальной памяти (VMSA).
- Косвенное разрешение и наложения.
- Усиление перевода.
- 128-битные таблицы трансляции (только ARMv9).
- Расширение масштабируемой матрицы 2 (SME2) (только ARMv9).
- Многовекторные инструкции.
- Многовекторные предикаты.
- Сжатие веса 2b/4b.
- 1б бинарные сети.
- Предварительная выборка диапазона.
- Защищенный стек управления (GCS) (только ARMv9).
- Конфиденциальные вычисления.
- Контексты шифрования памяти.
- Назначение устройства.
ARM-R (архитектура реального времени)
[ редактировать ]Этот раздел нуждается в дополнении : примерами и дополнительными цитатами. Вы можете помочь, добавив к нему . ( май 2021 г. ) |
В профиль Armv8-R была добавлена дополнительная поддержка AArch64, причем первым ядром Arm, реализующим ее, стал Cortex-R82. [50] Он добавляет набор инструкций A64 с некоторыми изменениями в инструкциях по барьеру памяти. [51]
Ссылки
[ редактировать ]- ^ «Обзор» . Изучите архитектуру: понимание расширений 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 г.
- ^ Jump up to: а б «Влияние реализованных уровней исключений» . Изучите архитектуру — Модель исключений AArch64 . Рука.
- ^ «Кортекс-А32» . Разработчик рук .
- ^ «Кортекс-А34» . Разработчик рук .
- ^ «Кортекс-А72» . Разработчик рук .
- ^ «Процессор Cortex-A32 – ARM» . Проверено 18 декабря 2016 г.
- ^ Браш, Дэвид (2 декабря 2014 г.). «Архитектура ARMv8-A и ее постоянное развитие» . Проверено 23 января 2015 г.
- ^ «Игнорирование верхнего байта (TBI)» . ВикиЧип .
- ^ Браш, Дэвид (5 января 2016 г.). «Эволюция архитектуры ARMv8-A» . Проверено 7 июня 2016 г.
- ^ «Масштабируемое векторное расширение для архитектуры ARMv8» . Арм Сообщество . 22 августа 2016 года . Проверено 8 июля 2018 г.
- ^ Jump up to: а б «Серия выпусков 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's Frontier первым преодолел потолок эксафлопа» . Топ500 . 30 мая 2022 г. Проверено 30 мая 2022 г.
- ^ «⚙ D71712 Реализация нисходящего SVE/SVE2 (LLVM)» . Reviews.llvm.org .
- ^ Дэвид Браш (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 Architecture» . сообщество.arm.com . 2 ноября 2017 года . Проверено 15 июня 2019 г.
- ^ «Изучение машинного обучения скалярного произведения» . сообщество.arm.com . 6 декабря 2017 года . Проверено 15 июня 2019 г.
- ^ «ARM готовит поддержку ARMv8.4-A для компилятора GCC — Phoronix» . www.phoronix.com . Проверено 14 января 2018 г.
- ^ Jump up to: а б с д «Расширения и возможности 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 . 5 августа 2019 года . Проверено 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 г.
- ^ Jump up to: а б с «Arm выпускает SVE2 и TME для архитектуры A-профиля — Блог процессоров — Процессоры — Сообщество Arm» . сообщество.arm.com . 18 апреля 2019 года . Проверено 25 мая 2019 г.
- ^ Jump up to: а б «Выравнивание поддержки Arm SVE2 для GCC 10, LLVM Clang 9.0 – Phoronix» . www.phoronix.com . Проверено 26 мая 2019 г.
- ^ «Раскрытие возможностей данных с помощью Arm CCA» . сообщество.arm.com . 23 июня 2021 г. Проверено 27 июля 2021 г.
- ^ «Arm представляет свою конфиденциальную вычислительную архитектуру» . Викичип-предохранитель . 23 июня 2021 г. Проверено 27 июля 2021 г.
- ^ «Обновление архитектуры профиля Arm A 2019» . сообщество.arm.com . 25 сентября 2019 года . Проверено 26 сентября 2019 г.
- ^ «Примечания к выпуску LLVM 11.0.0» . Releases.llvm.org . Проверено 11 марта 2021 г.
- ^ «Расширения BFloat16 для ARMv8-A» . сообщество.arm.com . 29 августа 2019 года . Проверено 30 августа 2019 г.
- ^ Вайдманн, Мартин (21 сентября 2020 г.). «Развитие архитектуры Arm A-профиля 2020» . сообщество.arm.com . РУКА . Проверено 28 сентября 2022 г.
- ^ «Масштабируемое матричное расширение для архитектуры ARMv9-A» . сообщество.arm.com . 14 июля 2021 г. Проверено 27 июля 2021 г.
- ^ Вайдманн, Мартин (8 сентября 2021 г.). «Развитие архитектуры Arm A-профиля 2021» . сообщество.arm.com . РУКА . Проверено 28 сентября 2022 г.
- ^ «Что нового в LLVM 15? — Блог «Архитектура и процессоры» — Блоги сообщества Arm — Сообщество Arm» . 27 февраля 2023 г. Проверено 15 апреля 2023 г.
- ^ «Развитие архитектуры Arm A-Profile 2022 — Блог об архитектурах и процессорах — Блоги сообщества Arm — Сообщество Arm» . сообщество.arm.com . 29 сентября 2022 г. Проверено 9 декабря 2022 г.
- ^ Фрумусану, Андрей (3 сентября 2020 г.). «ARM анонсировала Cortex-R82: первый 64-битный процессор реального времени» . АнандТех .
- ^ «Дополнение к справочному руководству по архитектуре Arm — Armv8, для профиля архитектуры Armv8-R AArch64» . Арм, ООО