- Ports/aarch64
- Содержание
- Портирование Sisyphus на платформу AArch64 (ARM64) [ править ]
- Состояние [ править ]
- Тестирование [ править ]
- Подготовка [ править ]
- сеть [ править ]
- Запуск [ править ]
- Далее [ править ]
- AArch64 — AArch64
- СОДЕРЖАНИЕ
- ARMv8-A
- Соглашения об именах
- Возможности AArch64
- Форматы инструкций
- ARMv8.1-A
- ARMv8.2-А
- Масштабируемое векторное расширение (SVE)
- ARMv8.3-А
- ARMv8.4-А
- ARMv8.5-А
- ARMv8.6-A
- ARMv9-A
- ARMv8-R (архитектура реального времени)
Ports/aarch64
Содержание
Портирование Sisyphus на платформу AArch64 (ARM64) [ править ]
Состояние [ править ]
На июнь 2018 года — официально поддерживаемая первичная архитектура; репозиторий доступен на FTP и зеркалах и может быть подключен к apt при помощи такой строчки в /etc/apt/sources.list :
Тестирование [ править ]
Далее предполагается использование в качестве хост-системы ALT Linux Sisyphus (нужен свежий qemu с qemu-system-aarch64 , можно задействовать LiveCD); для других вариантов могут понадобиться изменения процедуры.
Подготовка [ править ]
Установите qemu-system >= 2.0.0-alt1:
Скачайте архив и распакуйте в удобное место (требуется не менее четырёх гигабайт свободного пространства):
Далее предполагается путь к полученному каталогу
/virt64 , который следует зафиксировать и в стартовом скрипте:
сеть [ править ]
Поднимите bridge-интерфейс для сетевой работы на свободном ethernet (в архивной конфигурации предполагается eth1, при необходимости поправьте в файле options ):
Запуск [ править ]
Можно запускать эмулятор:
После успешного завершения загрузки наблюдаем следующее приглашение:
Входим как root без пароля, при желании добавляем публичную часть нужного ssh-ключа в /root/.ssh/authorized_keys , осматриваемся. Если поднялась сеть, должен работать apt .
Далее [ править ]
Далее можно, например, запустить установленную SambaDC или же поставить Xfce:
с тем, чтобы завести непривилегированного пользователя и от его имени запустить графическое приложение:
и с внешней системы (из-под X-сессии):
Если идти с того же хоста, где запущен qemu с aarch64-средой, может понадобиться сперва добавить маршрут через интерфейс, отличающийся от указанного в качестве базового для macvtap (HOST в /etc/net/ifaces/qbox0/options ) и через который доступна та же сеть (например, wlan0 на своём ноутбуке):
Источник
AArch64 — AArch64
AArch64 или ARM64 — это 64-битное расширение архитектуры ARM .
Впервые он был представлен с архитектурой ARMv8-A .
СОДЕРЖАНИЕ
ARMv8-A
Анонсированный в октябре 2011 года, ARMv8-A представляет собой фундаментальное изменение архитектуры ARM. Он добавляет дополнительную 64-битную архитектуру под названием «AArch64» и связанный с ней новый набор инструкций «A64». AArch64 обеспечивает совместимость в пространстве пользователя с существующей 32-битной архитектурой («AArch32» / ARMv7-A) и набором инструкций («A32»). 16-32-битный набор инструкций Thumb упоминается как «T32» и не имеет 64-битного аналога. ARMv8-A позволяет выполнять 32-битные приложения в 64-битной ОС, а 32-битные ОС находятся под управлением 64-битного гипервизора . ARM анонсировала свои ядра Cortex-A53 и Cortex-A57 30 октября 2012 года. Apple первой выпустила ядро, совместимое с ARMv8-A ( Apple A7 ), в потребительском продукте ( iPhone 5S ). AppliedMicro , использующий FPGA , был первым, кто продемонстрировал ARMv8-A. Первым ARMv8-A SoC от Samsung является Exynos 5433, используемый в Galaxy Note 4 , который имеет два кластера из четырех ядер Cortex-A57 и Cortex-A53 в конфигурации big.LITTLE; но он будет работать только в режиме AArch32.
Как для AArch32, так и для AArch64, ARMv8-A делает VFPv3 / v4 и расширенный стандарт SIMD (Neon). Он также добавляет инструкции криптографии, поддерживающие AES , SHA-1 / SHA-256 и арифметику с конечным полем .
Соглашения об именах
- 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.
Возможности 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-разрядными архитектурами.
Форматы инструкций
Основной код операции для выбора группы, к которой принадлежит инструкция A64, находится в битах 25–28.
Тип | Немного | |||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
31 год | 30 | 29 | 28 год | 27 | 26 год | 25 | 24 | 23 | 22 | 21 год | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
Зарезервированный | op0 | 0000 | op1 | Непосредственная константа 16 бит | ||||||||||||||||||||||||||||
Нераспределенный | 0001 | |||||||||||||||||||||||||||||||
Инструкции по SVE | 0010 | |||||||||||||||||||||||||||||||
Нераспределенный | 0011 | |||||||||||||||||||||||||||||||
Обработка данных — Немедленное PC-rel. | op | Immlo | 10000 | имми | Rd | |||||||||||||||||||||||||||
Обработка данных — непосредственное прочее | нф | 100 | 01-11 | Rd | ||||||||||||||||||||||||||||
Филиалы + Системные инструкции | op0 | 101 | op1 | op2 | ||||||||||||||||||||||||||||
Инструкции по загрузке и сохранению | op0 | 1 | op1 | 0 | op2 | op3 | op4 | |||||||||||||||||||||||||
Обработка данных — Регистрация | нф | op0 | op1 | 101 | op2 | op3 | ||||||||||||||||||||||||||
Обработка данных — с плавающей точкой и SIMD | op0 | 111 | op1 | op2 | op3 |
ARMv8.1-A
В декабре 2014 года было объявлено об обновлении ARMv8.1-A с «дополнительными преимуществами по сравнению с v8.0». Усовершенствования делятся на две категории: изменения набора инструкций и изменения модели исключений и преобразование памяти.
Усовершенствования набора инструкций включали следующее:
- Набор атомарных инструкций чтения-записи AArch64.
- Дополнения к набору инструкций Advanced SIMD для AArch32 и AArch64, чтобы обеспечить возможности для оптимизации некоторых библиотек:
- Знаковое округление с насыщением, удвоение, умножение, накопление, возврат высокой половины.
- Знаковое округление с насыщением, удвоение, умножение, вычитание, возвращение высокой половины.
- Инструкции добавляются в векторной и скалярной формах.
- Набор инструкций загрузки и сохранения AArch64, которые могут обеспечивать порядок доступа к памяти, ограниченный настраиваемыми адресными областями.
- Необязательные инструкции CRC в v8.0 становятся обязательными в ARMv8.1.
Улучшения для модели исключений и системы перевода памяти включали следующее:
- Новый бит состояния Privileged Access Never (PAN) обеспечивает контроль, который предотвращает привилегированный доступ к пользовательским данным, если он явно не включен.
- Увеличенный диапазон VMID для виртуализации; поддерживает большее количество виртуальных машин.
- Необязательная поддержка аппаратного обновления флага доступа к таблице страниц и стандартизация необязательного, обновляемого оборудования, механизма грязных битов.
- Расширения хоста виртуализации (VHE). Эти усовершенствования повышают производительность гипервизоров 2-го типа за счет снижения накладных расходов на программное обеспечение, связанных с переходом между хостовой и гостевой операционными системами. Расширения позволяют ОС хоста работать на EL2, а не на EL1, без существенных изменений.
- Механизм для освобождения некоторых битов таблицы трансляции для использования операционной системой, когда аппаратная поддержка не требуется ОС.
- Игнорирование старшего байта для тегирования памяти .
ARMv8.2-А
В январе 2016 года был анонсирован ARMv8.2-A. Его улучшения делятся на четыре категории:
- Необязательная обработка данных с плавающей запятой половинной точности (половинная точность уже поддерживалась, но не для обработки, а как формат хранения).
- Улучшения модели памяти
- Внедрение расширения надежности, доступности и удобства обслуживания (расширение RAS)
- Введение статистического профилирования
Масштабируемое векторное расширение (SVE)
Расширение Scalable Vector Extension (SVE) — это «дополнительное расширение архитектуры ARMv8.2-A и новее», разработанное специально для векторизации научных рабочих нагрузок высокопроизводительных вычислений . Спецификация позволяет реализовать переменную длину вектора от 128 до 2048 бит. Расширение дополняет, но не заменяет расширения NEON .
512-битный вариант SVE уже реализован на суперкомпьютере Fugaku с использованием процессора Fujitsu A64FX ARM. Он нацелен на то, чтобы стать самым производительным суперкомпьютером в мире с «целью начать полноценную работу примерно в 2021 году».
SVE поддерживается компилятором GCC , при этом GCC 8 поддерживает автоматическую векторизацию, а GCC 10 поддерживает встроенные функции C. По состоянию на июль 2020 года LLVM и clang поддерживают встроенные функции C и IR. Собственный форк LLVM от ARM поддерживает автоматическую векторизацию.
ARMv8.3-А
В октябре 2016 года был анонсирован ARMv8.3-A. Его улучшения делятся на шесть категорий:
- Аутентификация указателя (только AArch64); обязательное расширение (на основе нового блочного шифра, QARMA ) для архитектуры (компиляторы должны использовать функцию безопасности, но, поскольку инструкции находятся в пространстве NOP, они обратно совместимы, хотя и не обеспечивают дополнительной безопасности на старых микросхемах).
- Вложенная виртуализация (только AArch64)
- Расширенная поддержка комплексных номеров SIMD (AArch64 и AArch32); например, повороты, кратные 90 градусам.
- Новая инструкция FJCVTZS ( преобразование JavaScript с плавающей запятой в знаковую фиксированную точку, округление в сторону нуля).
- Изменение модели согласованности памяти (только AArch64); для поддержки (не по умолчанию) более слабой модели RCpc (согласованный с выпуском процессора) модели C ++ 11 / C11 ( модель согласованности C ++ 11 / C11 по умолчанию уже поддерживалась в предыдущей версии ARMv8).
- Поддержка механизма ID для больших видимых системой кешей (AArch64 и AArch32)
Архитектура ARMv8.3-A теперь поддерживается (по крайней мере) компилятором GCC 7.
ARMv8.4-А
В ноябре 2017 года был анонсирован ARMv8.4-A. Его улучшения попали в следующие категории:
- «Расширения шифрования SHA3 / SHA512 / SM3 / SM4 «
- Улучшенная поддержка виртуализации
- Возможности разделения и мониторинга памяти (MPAM)
- Новые мониторы состояния и активности Secure EL2
- Инструкции знакового и беззнакового целочисленного скалярного произведения (SDOT и UDOT).
ARMv8.5-А
В сентябре 2018 года был анонсирован ARMv8.5-A. Его улучшения попали в следующие категории:
- Расширение тегов памяти (MTE)
- Индикаторы цели ветвления (BTI) для уменьшения «способности злоумышленника выполнить произвольный код»,
- Инструкции генератора случайных чисел — «предоставление детерминированных и истинных случайных чисел, соответствующих различным национальным и международным стандартам»
2 августа 2019 года Google объявил, что Android примет расширение Memory Tagging Extension (MTE).
ARMv8.6-A
В сентябре 2019 года был анонсирован ARMv8.6-A. Он добавляет:
- Общее матричное умножение (GEMM)
- Формат Bfloat16 поддержка
- Инструкции по манипулированию матрицей SIMD, BFDOT, BFMMLA, BFMLAL и BFCVT
- улучшения для виртуализации, системного управления и безопасности
- и следующие расширения (которые в LLVM 11 уже добавлена поддержка):
- Расширенная виртуализация счетчиков (ARMv8.6-ECV)
- Мелкозернистые ловушки (ARMv8.6-FGT)
- Мониторы активности виртуализации (ARMv8.6-AMU)
Например, мелкие прерывания, инструкции ожидания события (WFE), EnhancedPAC2 и FPAC. Расширения Bfloat16 для SVE и Neon в основном предназначены для глубокого обучения.
ARMv9-A
В марте 2021 года был анонсирован ARMv9-A. Базовый уровень ARMv9-A — это все функции ARMv8.5. ARMv9-A также добавляет:
- Масштабируемое векторное расширение 2 (SVE2). SVE2 основан на масштабируемой векторизации SVE для повышенного параллелизма на уровне данных (DLP) , что позволяет выполнять больше работы за одну инструкцию. SVE2 стремится предоставить эти преимущества более широкому спектру программного обеспечения, включая DSP и мультимедийный код SIMD, которые в настоящее время используют Neon . В LLVM / Clang 9.0 и GCC коды 10,0 развития были обновлены для поддержки SVE2.
- Расширение транзакционной памяти (TME). Вслед за расширениями x86 TME обеспечивает поддержку аппаратной транзакционной памяти (HTM) и исключения транзакционных блокировок (TLE). TME нацелена на обеспечение масштабируемого параллелизма для увеличения общего параллелизма на уровне потоков (TLP) , чтобы можно было выполнять больше работы в каждом потоке. В LLVM / Clang 9.0 и GCC коды 10,0 развития были обновлены для поддержки TME.
- Конфиденциальная вычислительная архитектура (CCA)
- Расширение масштабируемой матрицы (SME). SMX добавляет новые функции для эффективной обработки матриц, такие как:
- Матричное хранилище плитки
- Транспонирование матрицы на лету
- Загрузка / сохранение / вставка / извлечение векторов тайлов
- Матричное внешнее произведение векторов SVE
- «Потоковый режим» SVE
ARMv8-R (архитектура реального времени)
В профиль ARMv8-R была добавлена дополнительная поддержка AArch64, причем первым ядром ARM, реализующим ее, было Cortex-R82. Он добавляет набор инструкций A64 с некоторыми изменениями в инструкциях по ограничению памяти.
Источник