AArch64 o ARM64 es el estado de ejecución de 64 bits de la familia de arquitectura ARM . Se introdujo por primera vez con la arquitectura Armv8-A y tuvo muchas actualizaciones de extensión. [1]
ARM-A (arquitectura de aplicación)
Anunciado en octubre de 2011, [2] ARMv8-A representa un cambio fundamental en la arquitectura ARM. Agrega un estado de ejecución de 64 bits opcional, denominado "AArch64", y el nuevo conjunto de instrucciones asociado "A64", además de un estado de ejecución de 32 bits, "AArch32", que admite el "A32" de 32 bits (original 32 -bit Arm) y conjuntos de instrucciones "T32" (Thumb/Thumb-2). Los últimos conjuntos de instrucciones proporcionan compatibilidad en el espacio de usuario con la arquitectura ARMv7-A de 32 bits existente. ARMv8-A permite ejecutar aplicaciones de 32 bits en un sistema operativo de 64 bits y que un sistema operativo de 32 bits esté bajo el control de un hipervisor de 64 bits . [3] ARM anunció sus núcleos Cortex-A53 y Cortex-A57 el 30 de octubre de 2012. [4] Apple fue el primero en lanzar un núcleo compatible con ARMv8-A ( Cyclone ) en un producto de consumo ( iPhone 5S ). AppliedMicro , utilizando una FPGA , fue el primero en realizar una demostración de ARMv8-A. [5] El primer SoC ARMv8-A de Samsung es el Exynos 5433 utilizado en el Galaxy Note 4 , que presenta dos grupos de cuatro núcleos Cortex-A57 y Cortex-A53 en una configuración big.LITTLE ; pero se ejecutará sólo en modo AArch32. [6]
ARMv8-A incluye VFPv3/v4 y SIMD avanzado (Neon) como características estándar tanto en AArch32 como en AArch64. También agrega instrucciones de criptografía que admiten AES , SHA-1 / SHA-256 y aritmética de campos finitos . [7]
Un procesador ARMv8-A puede admitir uno o ambos AArch32 y AArch64; puede admitir AArch32 y AArch64 en niveles de excepción más bajos y solo AArch64 en niveles de excepción más altos. [8] Por ejemplo, ARM Cortex-A32 solo admite AArch32, [9] ARM Cortex-A34 solo admite AArch64, [10] y ARM Cortex-A72 admite tanto AArch64 como AArch32. [11] Un procesador ARMv9-A debe admitir AArch64 en todos los niveles de excepción y puede admitir AArch32 en EL0. [8]
Convenciones de nombres
64 bits:
Estado de ejecución: AArch64.
Conjuntos de instrucciones: A64.
32 bits:
Estado de ejecución: AArch32.
Conjuntos de instrucciones: A32 + T32.
Ejemplo: ARMv8-R, Cortex-A32. [12]
Características de AArch64
Nuevo conjunto de instrucciones, A64:
Tiene 31 registros de 64 bits de uso general.
Tiene un registro dedicado de cero o de puntero de pila (SP) (según la instrucción).
Ya no se puede acceder directamente al contador de programa (PC) como registro.
Las instrucciones todavía tienen 32 bits de longitud y son en su mayoría iguales que A32 (con las instrucciones LDM/STM y la mayor parte de la ejecución condicional eliminada).
Tiene cargas/tiendas emparejadas (en lugar de LDM/STM).
Sin predicación para la mayoría de las instrucciones (excepto las ramas).
La mayoría de las instrucciones pueden aceptar argumentos de 32 o 64 bits.
Se supone que las direcciones son de 64 bits.
SIMD avanzado(Neón) mejorado:
Tiene registros de 32 × 128 bits (antes 16), también accesibles a través de VFPv4.
Las instrucciones de cifrado/descifrado AES y hash SHA-1/SHA-2 también utilizan estos registros.
Un nuevo sistema de excepción:
Menos registros y modos bancarizados.
Traducción de memoria de direcciones virtuales de 48 bits basada en la extensión de direcciones físicas grandes (LPAE) existente, que fue diseñada para ampliarse fácilmente a 64 bits.
Extensión: sugerencia de recopilación de datos (ARMv8.0-DGH).
AArch64 se introdujo en ARMv8-A y se incluye en versiones posteriores de ARMv8-A. También se introdujo en ARMv8-R como opción, tras su introducción en ARMv8-A; no está incluido en ARMv8-M.
Formatos de instrucción
El código de operación principal para seleccionar a qué grupo pertenece una instrucción A64 se encuentra en los bits 25 a 28.
ARMv8.1-A
En diciembre de 2014, se anunció ARMv8.1-A, [13] una actualización con "beneficios incrementales sobre v8.0". Las mejoras se dividieron en dos categorías: cambios en el conjunto de instrucciones y cambios en el modelo de excepción y traducción de memoria.
Las mejoras del conjunto de instrucciones incluyeron lo siguiente:
Un conjunto de instrucciones de lectura y escritura atómicas AArch64.
Adiciones al conjunto de instrucciones SIMD avanzado para AArch32 y AArch64 para permitir oportunidades para algunas optimizaciones de biblioteca:
Firmado Saturación Redondeo Duplicación Multiplicación Acumulación, devolviendo la mitad superior.
Firmado Saturación Redondeo Duplicación Multiplicación Resta, devolviendo la mitad superior.
Las instrucciones se agregan en formas vectoriales y escalares.
Un conjunto de instrucciones de carga y almacenamiento de AArch64 que pueden proporcionar un orden de acceso a la memoria limitado a regiones de direcciones configurables.
Las instrucciones CRC opcionales en v8.0 se convierten en un requisito en ARMv8.1.
Las mejoras para el modelo de excepción y el sistema de traducción de memoria incluyeron lo siguiente:
Un nuevo bit de estado Acceso privilegiado nunca (PAN) proporciona control que impide el acceso privilegiado a los datos del usuario a menos que se habilite explícitamente.
Un rango VMID aumentado para virtualización; Admite una mayor cantidad de máquinas virtuales.
Soporte opcional para la actualización de hardware del indicador de acceso a la tabla de páginas y la estandarización de un mecanismo de bits sucios opcional, actualizado por hardware.
Las extensiones de host de virtualización (VHE). Estas mejoras mejoran el rendimiento de los hipervisores de tipo 2 al reducir la sobrecarga de software asociada con la transición entre los sistemas operativos host e invitado. Las extensiones permiten que el sistema operativo host se ejecute en EL2, a diferencia de EL1, sin modificaciones sustanciales.
Un mecanismo para liberar algunos bits de la tabla de traducción para el uso del sistema operativo, cuando el sistema operativo no necesita soporte de hardware.
El byte superior se ignora para el etiquetado de memoria. [14]
ARMv8.2-A
En enero de 2016, se anunció ARMv8.2-A. [15] Sus mejoras se dividieron en cuatro categorías:
Scalable Vector Extension (SVE) es "una extensión opcional de la arquitectura ARMv8.2-A y más reciente" desarrollada específicamente para la vectorización de cargas de trabajo científicas informáticas de alto rendimiento . [16] [17] La especificación permite implementar longitudes de vectores variables de 128 a 2048 bits. La extensión es complementaria y no reemplaza a las extensiones NEON .
Ya se ha implementado una variante SVE de 512 bits en la supercomputadora Fugaku utilizando el procesador ARM Fujitsu A64FX ; esta computadora [18] fue la supercomputadora más rápida del mundo durante dos años, desde junio de 2020 [19] hasta mayo de 2022. [20] El procesador AWS Graviton3 ARM implementó una versión más flexible, 2x256 SVE .
SVE es compatible con el compilador GCC , donde GCC 8 admite la vectorización automática [17] y GCC 10 admite los intrínsecos de C. A partir de julio de 2020 [actualizar], LLVM y clang admiten los elementos intrínsecos de C e IR. La propia bifurcación de LLVM de ARM admite la vectorización automática. [21]
ARMv8.3-A
En octubre de 2016, se anunció ARMv8.3-A. Sus mejoras se dividieron en seis categorías: [22]
Autenticación de puntero [23] (solo AArch64); extensión obligatoria (basada en un nuevo cifrado de bloque, QARMA [24] ) a la arquitectura (los compiladores necesitan explotar la característica de seguridad, pero como las instrucciones están en el espacio NOP, son compatibles con versiones anteriores, aunque no brindan seguridad adicional en chips más antiguos).
Virtualización anidada (solo AArch64).
Compatibilidad avanzada con números complejos SIMD (AArch64 y AArch32); por ejemplo, rotaciones en múltiplos de 90 grados.
Nueva instrucción FJCVTZS ( Conversión de JavaScript de punto flotante a punto fijo con signo, redondeo hacia cero). [25]
Un cambio en el modelo de coherencia de la memoria (solo AArch64); para admitir el modelo RCpc (procesador consistente en versiones consistentes) más débil (no predeterminado) de C++11 / C11 (el modelo de consistencia predeterminado de C++11/C11 ya era compatible con ARMv8 anterior).
Compatibilidad con mecanismos de identificación para cachés más grandes visibles para el sistema (AArch64 y AArch32).
La arquitectura ARMv8.3-A ahora es compatible con (al menos) el compilador GCC 7. [26]
ARMv8.4-A
En noviembre de 2017, se anunció ARMv8.4-A. Sus mejoras se clasifican en estas categorías: [27] [28] [29]
En septiembre de 2018, se anunció ARMv8.5-A. Sus mejoras se clasifican en estas categorías: [30] [31] [32]
Extensión de etiquetado de memoria (MTE) (AArch64). [33]
Branch Target Indicators (BTI) (AArch64) para reducir "la capacidad de un atacante para ejecutar código arbitrario". Al igual que la autenticación de puntero, las instrucciones relevantes no funcionan en versiones anteriores de ARMv8-A.
Instrucciones del generador de números aleatorios: "proporciona números aleatorios verdaderos y deterministas que se ajustan a diversos estándares nacionales e internacionales".
El 2 de agosto de 2019, Google anunció que Android adoptaría Memory Tagging Extension (MTE). [34]
En marzo de 2021, se anunció ARMv9-A. La base de ARMv9-A son todas las características de ARMv8.5. [35] [36] [37] ARMv9-A también agrega:
Extensión vectorial escalable 2 (SVE2). SVE2 se basa en la vectorización escalable de SVE para aumentar el paralelismo de nivel de datos (DLP) de grano fino , para permitir realizar más trabajo por instrucción. SVE2 tiene como objetivo llevar estos beneficios a una gama más amplia de software, incluidos DSP y código SIMD multimedia, que actualmente utilizan Neon. [38] Los códigos de desarrollo LLVM / Clang 9.0 y GCC 10.0 se actualizaron para admitir SVE2. [38] [39]
Extensión de Memoria Transaccional (TME). Siguiendo las extensiones x86 , TME ofrece soporte para Hardware Transactional Memory (HTM) y Transactional Lock Elision (TLE). TME tiene como objetivo brindar concurrencia escalable para aumentar el paralelismo de nivel de subprocesos (TLP) de grano grueso , para permitir que se realice más trabajo por subproceso. [38] Los códigos de desarrollo LLVM / Clang 9.0 y GCC 10.0 se actualizaron para admitir TME. [39]
Instrucciones de manipulación de matrices SIMD, BFDOT, BFMMLA, BFMLAL y BFCVT.
Mejoras para virtualización, gestión de sistemas y seguridad.
Y las siguientes extensiones (para las que LLVM 11 ya agregó soporte [43] ):
Virtualización de contadores mejorada (ARMv8.6-ECV).
Trampas de grano fino (ARMv8.6-FGT).
Virtualización de monitores de actividad (ARMv8.6-AMU).
Por ejemplo, trampas detalladas, instrucciones de espera de evento (WFE), EnhancedPAC2 y FPAC. Las extensiones bfloat16 para SVE y Neon son principalmente para uso de aprendizaje profundo. [44]
ARMv8.7-A y ARMv9.2-A
En septiembre de 2020, se anunció ARMv8.7-A. Sus mejoras se clasifican en estas categorías: [30] [45]
Extensión de matriz escalable (SME) (solo ARMv9.2). [46] SME agrega nuevas características para procesar matrices de manera eficiente, tales como:
Almacenamiento de azulejos de matriz.
Transposición matricial sobre la marcha.
Cargar/almacenar/insertar/extraer vectores de mosaicos.
Producto exterior matricial de vectores SVE.
"Modo streaming" SVE.
Soporte mejorado para conexión en caliente PCIe (AArch64).
Carga atómica de 64 bytes y almacenamiento en aceleradores (AArch64).
Esperar instrucción (WFI) y Esperar evento (WFE) con tiempo de espera (AArch64).
Grabación de registro de sucursal (solo ARMv9.2).
ARMv8.8-A y ARMv9.3-A
En septiembre de 2021, se anunciaron ARMv8.8-A y ARMv9.3-A. Sus mejoras se clasificaron en estas categorías: [30] [47]
Interrupciones no enmascarables (AArch64).
Instrucciones para optimizar las operaciones de estilo memcpy() y memset() (AArch64).
Mejoras en PAC (AArch64).
Ramas condicionales insinuadas (AArch64).
LLVM 15 es compatible con ARMv8.8-A y ARMv9.3-A. [48]
ARMv8.9-A y ARMv9.4-A
En septiembre de 2022, se anunciaron ARMv8.9-A y ARMv9.4-A, que incluyen: [49]
Mejoras en la arquitectura del sistema de memoria virtual (VMSA).
Dirección indirecta de permisos y superposiciones.
Endurecimiento de la traducción.
Tablas de traducción de 128 bits (solo ARMv9).
Extensión de matriz escalable 2 (SME2) (solo ARMv9).
Instrucciones multivectoriales.
Predicados multivectoriales.
Compresión de peso 2b/4b.
1b redes binarias.
Captura previa de rango.
Pila de control protegida (GCS) (solo ARMv9).
Computación confidencial.
Contextos de cifrado de memoria.
Asignación de dispositivos.
ARM-R (arquitectura en tiempo real)
Se agregó compatibilidad opcional con AArch64 al perfil Armv8-R, y el primer núcleo de Arm que lo implementó fue el Cortex-R82. [50] Agrega el conjunto de instrucciones A64, con algunos cambios en las instrucciones de barrera de memoria. [51]
Referencias
^ "Descripción general". Conozca la arquitectura: comprensión de las extensiones Armv8.x y Armv9.x .
^ "ARM revela detalles técnicos de la próxima versión de la arquitectura ARM" (Presione soltar). Portabrazos . 27 de octubre de 2011. Archivado desde el original el 1 de enero de 2019 . Consultado el 20 de septiembre de 2013 .
^ Grisenthwaite, Richard (2011). "Vista previa de la tecnología ARMv8-A" (PDF) . Archivado desde el original (PDF) el 11 de noviembre de 2011 . Consultado el 31 de octubre de 2011 .
^ "ARM lanza la serie Cortex-A50, los procesadores de 64 bits con mayor eficiencia energética del mundo" (Presione soltar). Portabrazos . Consultado el 31 de octubre de 2012 .
^ "AppliedMicro presenta el primer núcleo ARM v8 de 64 bits del mundo" (Presione soltar). Microaplicado. 28 de octubre de 2011 . Consultado el 11 de febrero de 2014 .
^ "El Exynos 5433 de Samsung es un SoC ARM A57/A53". AnandTech . Consultado el 17 de septiembre de 2014 .
^ "Manual de referencia técnica del procesador ARM Cortex-A53 MPCore: extensión de criptografía". BRAZO . Consultado el 11 de septiembre de 2016 .
^ ab "Impacto de los niveles de excepción implementados". Conozca la arquitectura: modelo de excepción AArch64 . Brazo.
^ "Corteza-A32". Desarrollador de brazo .
^ "Cortex-A34". Desarrollador de brazo .
^ "Cortex-A72". Desarrollador de brazo .
^ "Procesador Cortex-A32 - ARM" . Consultado el 18 de diciembre de 2016 .
^ Brash, David (2 de diciembre de 2014). "La arquitectura ARMv8-A y su desarrollo continuo" . Consultado el 23 de enero de 2015 .
^ "Ignorar el byte superior (TBI)". WikiChip .
^ Brash, David (5 de enero de 2016). "Evolución de la arquitectura ARMv8-A" . Consultado el 7 de junio de 2016 .
^ "La extensión vectorial escalable sve para la arquitectura ARMv8 a". Comunidad de brazos . 22 de agosto de 2016 . Consultado el 8 de julio de 2018 .
^ ab "Serie de lanzamientos de GCC 8 - Cambios, nuevas funciones y correcciones - Proyecto GNU - Free Software Foundation (FSF)". gcc.gnu.org . Consultado el 9 de julio de 2018 .
^ "Fujitsu completa el prototipo de CPU de supercomputadora Post-K y comienza las pruebas de funcionalidad - Fujitsu Global". www.fujitsu.com (Comunicado de prensa) . Consultado el 8 de julio de 2018 .
^ "La japonesa Fugaku gana el título de supercomputadora más rápida del mundo" (Presione soltar). www.riken.jp. 23 de junio de 2020 . Consultado el 7 de diciembre de 2020 .
^ "La frontera de ORNL es la primera en romper el techo de exaflop". Top500 . 30 de mayo de 2022 . Consultado el 30 de mayo de 2022 .
^ "⚙ D71712 Implementación de SVE/SVE2 descendente (LLVM)". reseñas.llvm.org .
^ David Brash (26 de octubre de 2016). "Arquitectura ARMv8-A: adiciones de 2016".
^ . "[Ping~,AArch64] Agregar soporte de línea de comandos para -march=armv8.3-a". La extensión de autenticación de puntero se define como una extensión obligatoria en ARMv8.3-A y no es opcional.
^ "Qualcomm publica un documento técnico que detalla la autenticación de puntero en ARMv8.3". 10 de enero de 2017.
^ "Instrucciones de punto flotante A64: FJCVTZS". arm.com . Consultado el 11 de julio de 2019 .
^ "Serie de lanzamientos de GCC 7: cambios, nuevas funciones y correcciones". Ahora se admite la arquitectura ARMv8.3-A. Se puede utilizar especificando la opción -march=armv8.3-a. [..] La opción -msign-return-address= se admite para habilitar la protección de la dirección de retorno mediante extensiones de autenticación de puntero ARMv8.3-A.
^ "Presentación de las extensiones de 2017 a Arm Architecture". comunidad.arm.com . 2 de noviembre de 2017 . Consultado el 15 de junio de 2019 .
^ "Explorando el aprendizaje automático de productos punto". comunidad.arm.com . 6 de diciembre de 2017 . Consultado el 15 de junio de 2019 .
^ "ARM prepara compatibilidad con ARMv8.4-A para el compilador GCC: Phoronix". www.phoronix.com . Consultado el 14 de enero de 2018 .
^ abcd "Extensiones y funciones ARMv8.x y ARMv9.x". Conozca la arquitectura: comprensión de las extensiones ARMv8.x y ARMv9.x .
^ "Anuncio de Arm Architecture ARMv8.5-A - Blog de procesadores - Procesadores - Comunidad Arm". comunidad.arm.com . Consultado el 26 de abril de 2019 .
^ "Manual de referencia de arquitectura Arm ARMv8, para perfil de arquitectura ARMv8-A". Desarrollador ARM . Consultado el 6 de agosto de 2019 .
^ "Arquitectura Arm MTE: mejora de la seguridad de la memoria". comunidad.arm.com . 5 de agosto de 2019 . Consultado el 27 de julio de 2021 .
^ "Adopción de la extensión Arm Memory Tagging en Android". Blog de seguridad en línea de Google . Consultado el 6 de agosto de 2019 .
^ "La solución de Arm para las necesidades futuras de inteligencia artificial, seguridad e informática especializada es la v9". Brazo | La Arquitectura para el Mundo Digital . Consultado el 27 de julio de 2021 .
^ Schor, David (30 de marzo de 2021). "Arm lanza ARMv9". Fusible WikiChip . Consultado el 27 de julio de 2021 .
^ Frumusanu, Andrei. "Arm anuncia la arquitectura ARMv9: SVE2, seguridad y la próxima década". www.anandtech.com . Consultado el 27 de julio de 2021 .
^ abc "Arm lanza SVE2 y TME para arquitectura de perfil A - Blog de procesadores - Procesadores - Comunidad Arm". comunidad.arm.com . 18 de abril de 2019 . Consultado el 25 de mayo de 2019 .
^ ab "Alineación de compatibilidad con Arm SVE2 para GCC 10, LLVM Clang 9.0 - Phoronix". www.phoronix.com . Consultado el 26 de mayo de 2019 .
^ "Desbloquear el poder de los datos con Arm CCA". comunidad.arm.com . 23 de junio de 2021 . Consultado el 27 de julio de 2021 .
^ "Arm presenta su arquitectura informática confidencial". Fusible WikiChip . 23 de junio de 2021 . Consultado el 27 de julio de 2021 .
^ "Actualización de la arquitectura del perfil Arm A 2019". comunidad.arm.com . 25 de septiembre de 2019 . Consultado el 26 de septiembre de 2019 .
^ "Notas de la versión LLVM 11.0.0". lanzamientos.llvm.org . Consultado el 11 de marzo de 2021 .
^ "Extensiones BFloat16 para ARMv8-A". comunidad.arm.com . 29 de agosto de 2019 . Consultado el 30 de agosto de 2019 .
^ Weidmann, Martin (21 de septiembre de 2020). "Desarrollos de arquitectura Arm A-Profile 2020". comunidad.arm.com . BRAZO . Consultado el 28 de septiembre de 2022 .
^ "Extensión de matriz escalable para la arquitectura ARMv9-A". comunidad.arm.com . 14 de julio de 2021 . Consultado el 27 de julio de 2021 .
^ Weidmann, Martin (8 de septiembre de 2021). "Desarrollos de arquitectura Arm A-Profile 2021". comunidad.arm.com . BRAZO . Consultado el 28 de septiembre de 2022 .
^ "¿Qué hay de nuevo en LLVM 15? - Blog de arquitecturas y procesadores - Blogs de Arm Community - Arm Community". 27 de febrero de 2023 . Consultado el 15 de abril de 2023 .
^ "Desarrollos de arquitectura Arm A-Profile 2022 - Blog de arquitecturas y procesadores - Blogs de Arm Community - Arm Community". comunidad.arm.com . 29 de septiembre de 2022 . Consultado el 9 de diciembre de 2022 .
^ Frumusanu, Andrei (3 de septiembre de 2020). "ARM anunció Cortex-R82: primer procesador en tiempo real de 64 bits". AnandTech .
^ "Suplemento del manual de referencia de arquitectura de Arm: Armv8, para el perfil de arquitectura Armv8-R AArch64". brazo ltd.