Эта статья может быть слишком технической, чтобы ее могло понять большинство читателей . Июнь 2020 г. ) ( Узнайте, как и когда удалить этот шаблон сообщения ) ( |
AArch64 или ARM64 - это 64-битное расширение архитектуры ARM .
Впервые он был представлен с архитектурой ARMv8-A .
ARMv8-A [ править ]
Анонсированный в октябре 2011 года [1] ARMv8-A представляет собой фундаментальное изменение архитектуры ARM. Он добавляет дополнительную 64-битную архитектуру под названием «AArch64» и связанный с ней новый набор инструкций «A64». AArch64 обеспечивает совместимость в пространстве пользователя с существующей 32-битной архитектурой («AArch32» / ARMv7-A) и набором инструкций («A32»). 16-32-битный набор инструкций Thumb упоминается как «T32» и не имеет 64-битного аналога. ARMv8-A позволяет выполнять 32-битные приложения в 64-битной ОС, а 32-битные ОС находятся под управлением 64-битного гипервизора . [2] ARM анонсировала свои ядра Cortex-A53 и Cortex-A57 30 октября 2012 года.[3] Apple первой выпустила ядро, совместимое с ARMv8-A (Apple A7 ) в потребительском продукте ( iPhone 5S ). AppliedMicro , использующий FPGA , был первым, кто продемонстрировал ARMv8-A. [4] Первым ARMv8-A SoC от Samsung является Exynos 5433, используемый в Galaxy Note 4 , который включает два кластера из четырех ядер Cortex-A57 и Cortex-A53 в конфигурации big.LITTLE; но он будет работать только в режиме AArch32. [5]
Как для AArch32, так и для AArch64, ARMv8-A делает VFPv3 / v4 и расширенный стандарт SIMD (Neon). Он также добавляет инструкции криптографии, поддерживающие AES , SHA-1 / SHA-256 и арифметику с конечным полем . [6]
Соглашения об именах [ править ]
- 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 [7]
Особенности AArch64 [ править ]
- Новый набор команд, A64
- Имеет 31 64-битный регистр общего назначения.
- Имеет специальный регистр нуля или указателя стека (SP) (в зависимости от инструкции).
- Счетчик программ (ПК) больше не доступен напрямую как регистр.
- Инструкции по-прежнему имеют длину 32 бита и в основном такие же, как A32 (с удаленными инструкциями LDM / STM и большей частью условного выполнения).
- Имеет парные нагрузки / магазины (вместо LDM / STM).
- Нет предиката для большинства инструкций (кроме веток).
- Большинство инструкций могут принимать 32-битные или 64-битные аргументы.
- Адреса считаются 64-битными.
- Advanced SIMD (Neon) улучшенный
- Имеет 32 × 128-битных регистров (вместо 16), также доступен через VFPv4.
- Поддерживает формат с плавающей запятой двойной точности .
- Полностью соответствует стандарту IEEE 754 .
- Эти регистры также используются в инструкциях шифрования / дешифрования AES и SHA-1 / SHA-2.
- Новая система исключений
- Меньше записанных регистров и режимов.
- Преобразование памяти с 48-битных виртуальных адресов на основе существующего расширения большого физического адреса (LPAE), которое было разработано с возможностью простого расширения до 64-битного.
Расширение: подсказка для сбора данных (ARMv8.0-DGH)
AArch64 был представлен в ARMv8-A и включен в последующие версии ARMV8-A. AArch64 не входит в ARMv8-R или ARMv8-M, поскольку они обе являются 32-разрядными архитектурами.
ARMv8.1-A [ править ]
В декабре 2014 года было объявлено об обновлении ARMv8.1-A [8] с «дополнительными преимуществами по сравнению с v8.0». Усовершенствования делятся на две категории: изменения набора инструкций и изменения модели исключений и преобразование памяти.
Усовершенствования набора инструкций включали следующее:
- Набор атомарных инструкций чтения-записи AArch64.
- Дополнения к набору инструкций Advanced SIMD для AArch32 и AArch64, чтобы обеспечить возможности для оптимизации некоторых библиотек:
- Знаковое насыщение, округление, удвоение, умножение, накопление, возврат высокой половины.
- Знаковое округление с насыщением, удвоение, умножение, вычитание, возвращение высокой половины.
- Инструкции добавляются в векторной и скалярной формах.
- Набор инструкций загрузки и сохранения AArch64, которые могут обеспечивать порядок доступа к памяти, ограниченный настраиваемыми адресными областями.
- Необязательные инструкции CRC в v8.0 становятся обязательными в ARMv8.1.
Улучшения для модели исключений и системы перевода памяти включали следующее:
- Новый бит состояния Privileged Access Never (PAN) обеспечивает контроль, который предотвращает привилегированный доступ к данным пользователя, если он явно не включен.
- Увеличенный диапазон VMID для виртуализации; поддерживает большее количество виртуальных машин.
- Необязательная поддержка аппаратного обновления флага доступа к таблице страниц и стандартизация необязательного, обновляемого оборудования, механизма грязных битов.
- Расширения хоста виртуализации (VHE). Эти усовершенствования повышают производительность гипервизоров 2-го типа за счет снижения накладных расходов на программное обеспечение, связанных с переходом между хостовой и гостевой операционными системами. Расширения позволяют ОС хоста работать на EL2, а не на EL1, без существенных изменений.
- Механизм для освобождения некоторых битов таблицы трансляции для использования операционной системой, когда аппаратная поддержка не требуется ОС.
- Игнорирование старшего байта для тегирования памяти . [9]
ARMv8.2-A [ править ]
В январе 2016 года был анонсирован ARMv8.2-A. [10] Его улучшения делятся на четыре категории:
- Необязательная обработка данных с плавающей запятой половинной точности (половинная точность уже поддерживалась, но не для обработки, а как формат хранения).
- Улучшения модели памяти
- Внедрение расширения надежности, доступности и удобства обслуживания (расширение RAS)
- Введение статистического профилирования
Масштабируемое векторное расширение (SVE) [ редактировать ]
Расширение Scalable Vector Extension (SVE) - это «дополнительное расширение архитектуры ARMv8.2-A и новее», разработанное специально для векторизации научных рабочих нагрузок высокопроизводительных вычислений . [11] [12] Спецификация позволяет реализовать переменную длину вектора от 128 до 2048 бит. Расширение дополняет, но не заменяет расширения NEON .
512-битный вариант SVE уже реализован на суперкомпьютере Fugaku с использованием процессора Fujitsu A64FX ARM. Он нацелен на то, чтобы стать самым производительным суперкомпьютером в мире с «целью начать полноценную работу примерно в 2021 году». [13]
SVE поддерживается компилятором GCC , при этом GCC 8 поддерживает автоматическую векторизацию [12], а GCC 10 поддерживает встроенные функции C. По состоянию на июль 2020 года LLVM и clang поддерживают встроенные функции C и IR. Собственный форк LLVM от ARM поддерживает автоматическую векторизацию. [14]
ARMv8.3-A [ править ]
В октябре 2016 года был анонсирован ARMv8.3-A. Его улучшения делятся на шесть категорий: [15]
- Аутентификация указателя [16] (только AArch64); обязательное расширение (на основе нового блочного шифра, QARMA [17] ) архитектуры (компиляторы должны использовать функцию безопасности, но, поскольку инструкции находятся в пространстве NOP, они обратно совместимы, хотя и не обеспечивают дополнительной безопасности на старых микросхемах).
- Вложенная виртуализация (только AArch64)
- Расширенная поддержка комплексных номеров SIMD (AArch64 и AArch32); например, повороты, кратные 90 градусам.
- Новая инструкция FJCVTZS ( преобразование JavaScript с плавающей точкой в знаковую фиксированную точку, округление в сторону нуля). [18]
- Изменение модели согласованности памяти (только AArch64); для поддержки (не по умолчанию) более слабой модели RCpc (согласованный с выпуском процессора) модели C ++ 11 / C11 ( модель согласованности C ++ 11 / C11 по умолчанию уже поддерживалась в предыдущей версии ARMv8).
- Поддержка механизма ID для больших видимых системой кешей (AArch64 и AArch32)
Архитектура ARMv8.3-A теперь поддерживается (по крайней мере) компилятором GCC 7. [19]
ARMv8.4-A [ править ]
В ноябре 2017 года был анонсирован ARMv8.4-A. Его усовершенствования попали в следующие категории: [20] [21] [22]
- "Расширения шифрования SHA3 / SHA512 / SM3 / SM4 "
- Улучшенная поддержка виртуализации
- Возможности разделения и мониторинга памяти (MPAM)
- Новые мониторы состояния и активности Secure EL2
- Инструкции знакового и беззнакового целочисленного скалярного произведения (SDOT и UDOT).
ARMv8.5-A [ править ]
В сентябре 2018 года был анонсирован ARMv8.5-A. Его улучшения попали в следующие категории: [23] [24]
- Расширение тегов памяти (MTE),
- Индикаторы цели ветвления (BTI) для уменьшения «способности злоумышленника выполнить произвольный код»,
- Инструкции генератора случайных чисел - «предоставление детерминированных и истинных случайных чисел, соответствующих различным национальным и международным стандартам»
2 августа 2019 года Google объявил, что Android примет расширение Memory Tagging Extension (MTE). [25]
ARMv8.6-A [ править ]
В сентябре 2019 года был анонсирован ARMv8.6-A. Он добавляет: [26]
- Общее матричное умножение (GEMM)
- Формат Bfloat16 поддержка
- Инструкции по манипулированию матрицей SIMD, BFDOT, BFMMLA, BFMLAL и BFCVT
- улучшения для виртуализации, системного управления и безопасности
- и следующие расширения (в LLVM 11 уже добавлена поддержка [27] ):
- Расширенная виртуализация счетчиков (ARMv8.6-ECV)
- Мелкозернистые ловушки (ARMv8.6-FGT)
- Мониторы активности виртуализации (ARMv8.6-AMU)
Например, мелкие прерывания, инструкции ожидания события (WFE), EnhancedPAC2 и FPAC. Расширения Bfloat16 для SVE и Neon в основном предназначены для глубокого обучения. [28]
Будущие особенности архитектуры ARM [ править ]
В мае 2019 года ARM анонсировала свои грядущие расширения Scalable Vector Extension 2 (SVE2) и Transactional Memory Extension (TME). [29]
Расширение масштабируемых векторов 2 (SVE2) [ править ]
SVE2 основан на масштабируемой векторизации SVE для повышенного параллелизма на уровне данных (DLP) , что позволяет выполнять больше работы за одну инструкцию. SVE2 стремится предоставить эти преимущества более широкому спектру программного обеспечения, включая DSP и мультимедийный код SIMD, которые в настоящее время используют Neon . [29] LLVM / Clang 9.0 и GCC 10.0 коды разработки были обновлены для поддержки SVE2. [30]
Расширение транзакционной памяти (TME) [ править ]
Вслед за расширениями x86 TME обеспечивает поддержку аппаратной транзакционной памяти (HTM) и исключения транзакционных блокировок (TLE). TME нацелена на обеспечение масштабируемого параллелизма для увеличения общего параллелизма на уровне потоков (TLP) , чтобы можно было выполнять больше работы в каждом потоке. [29] LLVM / Clang 9.0 и GCC 10.0 коды разработки были обновлены для поддержки TME. [30]
ARMv8-R [ править ]
В профиль ARMv8-R была добавлена дополнительная поддержка AArch64, причем первым ядром ARM, реализующим ее, было Cortex-R82. [31] Он добавляет набор инструкций A64.
Ссылки [ править ]
- ^ «ARM раскрывает технические подробности следующей версии архитектуры ARM» (пресс-релиз). Arm Holdings . 27 октября 2011 года Архивировано из оригинала на 1 января 2019 года . Проверено 20 сентября 2013 года .
- ^ Гризентуэйт, Ричард (2011). «Предварительный просмотр технологии ARMv8-A» (PDF) . Проверено 31 октября 2011 года .
- ^ «ARM запускает серию Cortex-A50, самые энергоэффективные 64-битные процессоры в мире» (пресс-релиз). Arm Holdings . Проверено 31 октября 2012 года .
- ^ «AppliedMicro демонстрирует первое в мире 64-битное ядро ARM v8» (пресс-релиз). AppliedMicro. 28 октября 2011 . Проверено 11 февраля 2014 .
- ^ "Exynos 5433 от Samsung - это процессор ARM A57 / A53" . AnandTech . Проверено 17 сентября 2014 года .
- ^ "ARM Cortex-A53 MPCore Processor Техническое справочное руководство: Расширение криптографии" . ARM . Проверено 11 сентября +2016 .
- ^ "Процессор Cortex-A32 - ARM" . Проверено 18 декабря +2016 .
- ^ Дерзкий, Дэвид (2 декабря 2014). «Архитектура ARMv8-A и ее постоянное развитие» . Проверено 23 января 2015 года .
- ^ "TBI" .
- ^ Дерзкий, Дэвид (5 января 2016). «Эволюция архитектуры ARMv8-A» . Проверено 7 июня +2016 .
- ^ "Масштабируемое векторное расширение sve для архитектуры Armv8 a" . Арм Сообщество . 22 августа 2016 . Проверено 8 июля 2018 .
- ^ a b «Серия выпусков GCC 8 - Изменения, новые функции и исправления - Проект GNU - Фонд свободного программного обеспечения (FSF)» . gcc.gnu.org . Проверено 9 июля 2018 .
- ^ "Fujitsu завершает прототип процессора суперкомпьютера Post-K, начинает функциональные испытания - Fujitsu Global" . www.fujitsu.com (пресс-релиз) . Проверено 8 июля 2018 .
- ^ "⚙ D71712 Реализация нисходящего потока SVE / SVE2 (LLVM)" . reviews.llvm.org .
- ↑ Дэвид Браш (26 октября 2016 г.). «Архитектура ARMv8-A - дополнения 2016 года» .
- ^ "[Ping ~, AArch64] Добавить поддержку командной строки для -march = armv8.3-a" .
расширение аутентификации указателя определено как обязательное расширение на ARMv8.3-A и не является необязательным.
- ^ «Qualcomm выпускает технический документ с подробным описанием аутентификации указателя на ARMv8.3» .
- ^ "A64 Инструкции с плавающей запятой: FJCVTZS" . arm.com . Проверено 11 июля 2019 .
- ^ «Серия выпусков GCC 7 - Изменения, новые функции и исправления» .
Теперь поддерживается архитектура ARMv8.3-A.
Его можно использовать, указав параметр -march = armv8.3-a.
[..] Параметр -msign-return-address = поддерживается для включения защиты обратного адреса с помощью расширений аутентификации указателя ARMv8.3-A.
- ^ «Представляем расширения архитектуры Arm в 2017 году» . community.arm.com . Проверено 15 июня 2019 .
- ^ «Изучение машинного обучения точечного продукта» . community.arm.com . Проверено 15 июня 2019 .
- ^ "ARM готовит поддержку ARMv8.4-A для компилятора GCC - Phoronix" . www.phoronix.com . Проверено 14 января 2018 года .
- ^ "Объявление Arm архитектуры Armv8.5-A - Блог процессоров - Процессоры - Сообщество Arm" . community.arm.com . Проверено 26 апреля 2019 .
- ^ Ltd, Arm. "Справочное руководство по архитектуре Arm Armv8, для профиля архитектуры Armv8-A" . ARM Разработчик . Проверено 6 августа 2019 .
- ^ «Внедрение расширения тегов памяти Arm в Android» . Блог Google по онлайн-безопасности . Проверено 6 августа 2019 .
- ^ "Обновление архитектуры профиля Arm A 2019" . community.arm.com . Проверено 26 сентября 2019 года .
- ^ «Примечания к выпуску LLVM 11.0.0» . releases.llvm.org . Проверено 11 марта 2021 .
- ^ "Расширения BFloat16 для Armv8-A" . community.arm.com . Проверено 30 августа 2019 .
- ^ a b c «Arm выпускает SVE2 и TME для архитектуры A-профиля - Блог процессоров - Процессоры - Сообщество Arm» . community.arm.com . Проверено 25 мая 2019 .
- ^ a b "Выравнивание поддержки Arm SVE2 для GCC 10, LLVM Clang 9.0 - Phoronix" . www.phoronix.com . Проверено 26 мая 2019 .
- ^ Frumusanu Андрей (3 сентября 2020). «ARM объявила о выпуске Cortex-R82: первого 64-разрядного процессора реального времени» . AnandTech .