Из Википедии, бесплатной энциклопедии
  (Перенаправлено с ARM64 )
Перейти к навигации Перейти к поиску

AArch64 или ARM64 - это 64-битное расширение архитектуры ARM .

Платформа ARMv8-A с процессором Cortex A57 / A53 MPCore big.LITTLE

Впервые он был представлен с архитектурой 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 , использующий ПЛИС , был первым, кто продемонстрировал 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-битного.

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 (Release Consistent processor Consistent) модели 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
  • улучшения для виртуализации, системного управления и безопасности

Например, мелкие прерывания, инструкции ожидания события (WFE), EnhancedPAC2 и FPAC. Расширения Bfloat16 для SVE и Neon в основном предназначены для глубокого обучения. [27]

Будущие особенности архитектуры ARM [ править ]

В мае 2019 года ARM анонсировала свои грядущие расширения Scalable Vector Extension 2 (SVE2) и Transactional Memory Extension (TME). [28]

Расширение масштабируемых векторов 2 (SVE2) [ править ]

SVE2 основан на масштабируемой векторизации SVE для повышенного параллелизма на уровне данных (DLP) , что позволяет выполнять больше работы за одну инструкцию. SVE2 стремится предоставить эти преимущества более широкому спектру программного обеспечения, включая DSP и мультимедийный код SIMD, которые в настоящее время используют Neon . [28] LLVM / Clang 9.0 и GCC 10.0 коды разработки были обновлены для поддержки SVE2. [29]

Расширение транзакционной памяти (TME) [ править ]

Вслед за расширениями x86 TME предлагает поддержку аппаратной транзакционной памяти (HTM) и исключения транзакционных блокировок (TLE). TME нацелена на обеспечение масштабируемого параллелизма для повышения уровня крупномасштабного параллелизма на уровне потоков (TLP) , чтобы можно было выполнять больше работы за поток. [28] LLVM / Clang 9.0 и GCC 10.0 коды разработки были обновлены для поддержки TME. [29]

Ссылки [ править ]

  1. ^ «ARM раскрывает технические подробности следующей версии архитектуры ARM» (пресс-релиз). Arm Holdings . 27 октября 2011 года Архивировано из оригинала на 1 января 2019 года . Проверено 20 сентября 2013 года .
  2. ^ Гризентуэйт, Ричард (2011). «Предварительный просмотр технологии ARMv8-A» (PDF) . Проверено 31 октября 2011 года .
  3. ^ «ARM запускает серию Cortex-A50, самые энергоэффективные 64-битные процессоры в мире» (пресс-релиз). Arm Holdings . Проверено 31 октября 2012 года .
  4. ^ «AppliedMicro демонстрирует первое в мире 64-битное ядро ​​ARM v8» (пресс-релиз). AppliedMicro. 28 октября 2011 . Проверено 11 февраля 2014 .
  5. ^ "Exynos 5433 от Samsung - это ARM SoC A57 / A53" . AnandTech . Проверено 17 сентября 2014 года .
  6. ^ "ARM Cortex-A53 MPCore Processor Technical Reference Manual: Cryptography Extension" . ARM . Проверено 11 сентября 2016 года .
  7. ^ "Процессор Cortex-A32 - ARM" . Проверено 18 декабря +2016 .
  8. ^ Дерзкий, Дэвид (2 декабря 2014). «Архитектура ARMv8-A и ее постоянное развитие» . Проверено 23 января 2015 года .
  9. ^ "TBI" .
  10. ^ Дерзкий, Дэвид (5 января 2016). «Эволюция архитектуры ARMv8-A» . Проверено 7 июня +2016 .
  11. ^ "Масштабируемое векторное расширение sve для архитектуры Armv8 a" . Арм Сообщество . 22 августа 2016 . Проверено 8 июля 2018 .
  12. ^ a b «Серия выпусков GCC 8 - Изменения, новые функции и исправления - Проект GNU - Фонд свободного программного обеспечения (FSF)» . gcc.gnu.org . Проверено 9 июля 2018 .
  13. ^ «Fujitsu завершает прототип процессора суперкомпьютера Post-K, начинает функциональные испытания - Fujitsu Global» . www.fujitsu.com (пресс-релиз) . Проверено 8 июля 2018 .
  14. ^ "⚙ D71712 Реализация нисходящего потока SVE / SVE2 (LLVM)" . reviews.llvm.org .
  15. Дэвид Браш (26 октября 2016 г.). «Архитектура ARMv8-A - дополнения 2016 года» .
  16. ^ "[Ping ~, AArch64] Добавить поддержку командной строки для -march = armv8.3-a" . расширение аутентификации указателя определено как обязательное расширение на ARMv8.3-A и не является необязательным
  17. ^ «Qualcomm выпускает технический документ, в котором подробно описывается аутентификация указателя на ARMv8.3» .
  18. ^ "A64 Инструкции с плавающей запятой: FJCVTZS" . arm.com . Дата обращения 11 июля 2019 .
  19. ^ «Серия выпусков GCC 7 - Изменения, новые функции и исправления» . Теперь поддерживается архитектура ARMv8.3-A. Его можно использовать, указав параметр -march = armv8.3-a. [..] Параметр -msign-return-address = поддерживается для включения защиты обратного адреса с помощью расширений аутентификации указателя ARMv8.3-A.
  20. ^ «Представляем расширения архитектуры Arm в 2017 году» . community.arm.com . Проверено 15 июня 2019 .
  21. ^ «Изучение машинного обучения точечного продукта» . community.arm.com . Проверено 15 июня 2019 .
  22. ^ "ARM готовит поддержку ARMv8.4-A для компилятора GCC - Phoronix" . www.phoronix.com . Проверено 14 января 2018 .
  23. ^ "Объявление Arm Architecture Armv8.5-A - Блог процессоров - Процессоры - Сообщество Arm" . community.arm.com . Проверено 26 апреля 2019 .
  24. ^ Ltd, Arm. "Справочное руководство по архитектуре Arm Armv8, для профиля архитектуры Armv8-A" . ARM Разработчик . Дата обращения 6 августа 2019 .
  25. ^ «Внедрение расширения тегов памяти Arm в Android» . Блог Google Online Security . Дата обращения 6 августа 2019 .
  26. ^ "Обновление архитектуры профиля Arm A 2019" . community.arm.com . Проверено 26 сентября 2019 года .
  27. ^ "Расширения BFloat16 для Armv8-A" . community.arm.com . Проверено 30 августа 2019 .
  28. ^ a b c «Arm выпускает SVE2 и TME для архитектуры A-профиля - Блог процессоров - Процессоры - Сообщество Arm» . community.arm.com . Проверено 25 мая 2019 .
  29. ^ a b "Выравнивание поддержки Arm SVE2 для GCC 10, LLVM Clang 9.0 - Phoronix" . www.phoronix.com . Проверено 26 мая 2019 .