AArch64 o ARM64 es la extensión de 64 bits de la arquitectura ARM .
Se introdujo por primera vez con la arquitectura ARMv8-A .
ARMv8-A
Anunciado en octubre de 2011, [1] ARMv8-A representa un cambio fundamental en la arquitectura ARM. Agrega una arquitectura opcional de 64 bits, denominada "AArch64", y el nuevo conjunto de instrucciones asociado "A64". AArch64 proporciona compatibilidad de espacio de usuario con la arquitectura de 32 bits existente ("AArch32" / ARMv7-A) y el conjunto de instrucciones ("A32"). El conjunto de instrucciones Thumb de 16-32 bits se denomina "T32" y no tiene contraparte de 64 bits. 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 . [2] ARM anunció sus núcleos Cortex-A53 y Cortex-A57 el 30 de octubre de 2012. [3] Apple fue la primera en lanzar un núcleo compatible con ARMv8-A ( Apple A7 ) en un producto de consumo ( iPhone 5S ). AppliedMicro , usando un FPGA , fue el primero en hacer una demostración de ARMv8-A. [4] El primer SoC ARMv8-A de Samsung es el Exynos 5433 utilizado en el Galaxy Note 4 , que cuenta con dos grupos de cuatro núcleos Cortex-A57 y Cortex-A53 en una configuración big.LITTLE; pero se ejecutará solo en modo AArch32. [5]
Tanto para AArch32 como para AArch64, ARMv8-A hace estándar VFPv3 / v4 y SIMD avanzado (Neon). También agrega instrucciones de criptografía que admiten AES , SHA-1 / SHA-256 y aritmética de campo finito . [6]
Convenciones de nombres
- 64 + 32 bits
- Arquitectura: AArch64
- Especificación: ARMv8-A
- Conjuntos de instrucciones: A64 + A32
- Sufijos: v8-A
- 32 + 16 (pulgar) bit
- Arquitectura: AArch32
- Especificación: ARMv8-R / ARMv7-A
- Conjuntos de instrucciones: A32 + T32
- Sufijos: -A32 / -R / v7-A
- Ejemplo: ARMv8-R, Cortex-A32 [7]
Características de AArch64
- Nuevo conjunto de instrucciones, A64
- Tiene 31 registros de 64 bits de uso general.
- Tiene un registro de puntero de pila o cero dedicado (SP) (según la instrucción).
- Ya no se puede acceder directamente al contador de programas (PC) como un registro.
- Las instrucciones siguen teniendo una longitud de 32 bits y casi lo mismo que A32 (con las instrucciones LDM / STM y la mayoría de las ejecuciones condicionales descartadas).
- 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 (en lugar de 16), también accesibles a través de VFPv4.
- Admite formato de punto flotante de doble precisión .
- Totalmente compatible con IEEE 754 .
- Las instrucciones de cifrado / descifrado AES y hash SHA-1 / SHA-2 también utilizan estos registros.
- Un nuevo sistema de excepciones
- Menos registros y modos bancarizados.
- Traducción de memoria de direcciones virtuales de 48 bits basada en la Ampliación de dirección física grande (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. AArch64 no se incluye en ARMv8-R o ARMv8-M, porque ambas son arquitecturas de 32 bits.
ARMv8.1-A
En diciembre de 2014, se anunció ARMv8.1-A, [8] 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 la traducción de la 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 de SIMD avanzado para AArch32 y AArch64 para permitir oportunidades para algunas optimizaciones de biblioteca:
- Firmado Saturación Redondeo Duplicar Multiplicar Acumular, Regresar Alta Mitad.
- Firmado Saturación Redondeo Duplicar Multiplicar Restar, Devolver la mitad alta.
- Las instrucciones se agregan en forma vectorial y escalar.
- Un conjunto de instrucciones de carga y almacenamiento AArch64 que pueden proporcionar un orden de acceso a la memoria que está 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 de acceso privilegiado nunca (PAN) proporciona un control que evita el acceso privilegiado a los datos del usuario a menos que se habilite explícitamente.
- Un mayor rango de VMID 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 bit sucio, actualizado por hardware opcional.
- 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 al realizar 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, donde el sistema operativo no necesita el soporte de hardware.
- Byte superior ignorado para etiquetado de memoria . [9]
ARMv8.2-A
En enero de 2016, se anunció ARMv8.2-A. [10] Sus mejoras se clasificaron en cuatro categorías:
- Procesamiento de datos de punto flotante de media precisión opcional (ya se admitía la media precisión, pero no para el procesamiento, solo como formato de almacenamiento).
- Mejoras en el modelo de memoria
- Introducción de la extensión de confiabilidad, disponibilidad y capacidad de servicio (extensión RAS)
- Introducción de la elaboración de perfiles estadísticos
Extensión vectorial escalable (SVE)
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 . [11] [12] La especificación permite implementar longitudes de vector variables de 128 a 2048 bits. La extensión es complementaria y no reemplaza a las extensiones NEON .
Ya se implementó una variante SVE de 512 bits en la supercomputadora Fugaku utilizando el procesador ARM Fujitsu A64FX . Su objetivo es ser la supercomputadora de mayor rendimiento del mundo con "el objetivo de comenzar a operar en su totalidad alrededor de 2021". [13]
SVE es compatible con el compilador GCC , con GCC 8 que admite la vectorización automática [12] y GCC 10 que admite intrínsecos C. A partir de julio de 2020, LLVM y clang admiten intrínsecos C e IR. La propia bifurcación de ARM de LLVM admite la vectorización automática. [14]
ARMv8.3-A
En octubre de 2016, se anunció ARMv8.3-A. Sus mejoras se dividieron en seis categorías: [15]
- Autenticación de puntero [16] (solo AArch64); extensión obligatoria (basada en un nuevo cifrado de bloque, QARMA [17] ) 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 proporcionan seguridad adicional en chips más antiguos).
- Virtualización anidada (solo AArch64)
- Soporte avanzado de 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 en punto fijo con signo , redondeando hacia cero). [18]
- Un cambio en el modelo de coherencia de la memoria (solo AArch64); para admitir el modelo RCpc (versión consistente del procesador coherente con la versión) más débil (no predeterminado) de C ++ 11 / C11 (el modelo de consistencia C ++ 11 / C11 predeterminado ya era compatible con ARMv8 anterior).
- Soporte de mecanismo de identificación para cachés visibles del sistema más grandes (AArch64 y AArch32)
La arquitectura ARMv8.3-A ahora es compatible con (al menos) el compilador GCC 7. [19]
ARMv8.4-A
En noviembre de 2017, se anunció ARMv8.4-A. Sus mejoras se incluyeron en estas categorías: [20] [21] [22]
- "Extensiones criptográficas SHA3 / SHA512 / SM3 / SM4 "
- Soporte de virtualización mejorado
- Capacidades de particionamiento y monitoreo de memoria (MPAM)
- Un nuevo estado seguro de EL2 y monitores de actividad
- Instrucciones de productos escalares enteros firmados y sin firmar (SDOT y UDOT).
ARMv8.5-A
En septiembre de 2018 se anunció ARMv8.5-A. Sus mejoras se incluyeron en estas categorías: [23] [24]
- Extensión de etiquetado de memoria (MTE),
- Indicadores de destino de rama (BTI) para reducir "la capacidad de un atacante para ejecutar código arbitrario",
- Instrucciones del generador de números aleatorios: "proporcionar números aleatorios deterministas y verdaderos de conformidad con varios estándares nacionales e internacionales"
El 2 de agosto de 2019, Google anunció que Android adoptaría Memory Tagging Extension (MTE). [25]
ARMv8.6-A
En septiembre de 2019, se anunció ARMv8.6-A. Agrega: [26]
- Multiplicación de matriz general (GEMM)
- Bfloat16 formato de apoyo
- Instrucciones de manipulación de matriz SIMD, BFDOT, BFMMLA, BFMLAL y BFCVT
- mejoras para la virtualización, la gestión del sistema y la seguridad
- y las siguientes extensiones (que LLVM 11 ya agregó soporte para [27] ):
- Virtualización de contador 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 Wait-for-Event (WFE), EnhancedPAC2 y FPAC. Las extensiones Bfloat16 para SVE y Neon son principalmente para uso de aprendizaje profundo. [28]
Características futuras de la arquitectura ARM
En mayo de 2019, ARM anunció su próxima Scalable Vector Extension 2 (SVE2) y Transactional Memory Extension (TME). [29]
Extensión vectorial escalable 2 (SVE2)
SVE2 se basa en la vectorización escalable de SVE para un mayor paralelismo de nivel de datos (DLP) de grano fino , para permitir que se realice 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 . [29] Los códigos de desarrollo LLVM / Clang 9.0 y GCC 10.0 se actualizaron para admitir SVE2. [30]
Extensión de memoria transaccional (TME)
Después de las extensiones x86 , TME brinda 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 subproceso (TLP) de grano grueso , para permitir que se realice más trabajo por subproceso. [29] Los códigos de desarrollo LLVM / Clang 9.0 y GCC 10.0 se actualizaron para admitir TME. [30]
ARMv8-R (arquitectura en tiempo real)
Se agregó soporte opcional AArch64 al perfil ARMv8-R, y el primer núcleo ARM que lo implementó fue el Cortex-R82. [31] Agrega el conjunto de instrucciones A64, con algunos cambios en las instrucciones de la barrera de memoria. [32]
Referencias
- ^ "ARM revela detalles técnicos de la próxima versión de la arquitectura ARM" (Comunicado de prensa). Arm Holdings . 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) . 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" (comunicado de prensa). Arm Holdings . Consultado el 31 de octubre de 2012 .
- ^ "AppliedMicro presenta el primer núcleo ARM v8 de 64 bits del mundo" (comunicado de prensa). AppliedMicro. 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 .
- ^ "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 .
- ^ "TBI" .
- ^ 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" . Arm Community . 22 de agosto de 2016 . Consultado el 8 de julio de 2018 .
- ^ a b "Serie de versiones 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 superordenador post-K, comienza las pruebas de funcionalidad - Fujitsu Global" . www.fujitsu.com (Comunicado de prensa) . Consultado el 8 de julio de 2018 .
- ^ "⚙ D71712 Implementación Downstream SVE / SVE2 (LLVM)" . reviews.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 coma flotante A64: FJCVTZS" . arm.com . Consultado el 11 de julio de 2019 .
- ^ "Serie de versiones 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 = es compatible para habilitar la protección de la dirección de retorno usando extensiones de autenticación de puntero ARMv8.3-A.
- ^ "Introduciendo las extensiones de 2017 a la Arquitectura Arm" . community.arm.com . Consultado el 15 de junio de 2019 .
- ^ "Exploración del aprendizaje automático de productos escalares" . community.arm.com . Consultado el 15 de junio de 2019 .
- ^ "Soporte ARM Preps ARMv8.4-A para compilador GCC - Phoronix" . www.phoronix.com . Consultado el 14 de enero de 2018 .
- ^ "Arm Architecture Armv8.5-A Anuncio - Blog de procesadores - Procesadores - Comunidad de Arm" . community.arm.com . Consultado el 26 de abril de 2019 .
- ^ Ltd, Arm. "Arm Architecture Reference Manual Armv8, para perfil de arquitectura Armv8-A" . Desarrollador ARM . Consultado el 6 de agosto de 2019 .
- ^ "Adopción de la extensión de etiquetado de memoria de brazo en Android" . Blog de seguridad en línea de Google . Consultado el 6 de agosto de 2019 .
- ^ "Actualización de la arquitectura del perfil Arm A 2019" . community.arm.com . Consultado el 26 de septiembre de 2019 .
- ^ "Notas de la versión LLVM 11.0.0" . releases.llvm.org . Consultado el 11 de marzo de 2021 .
- ^ "Extensiones BFloat16 para Armv8-A" . community.arm.com . Consultado el 30 de agosto de 2019 .
- ^ a b c "Arm lanza SVE2 y TME para arquitectura de perfil A - Blog de procesadores - Procesadores - Comunidad de Arm" . community.arm.com . Consultado el 25 de mayo de 2019 .
- ^ a b "Arm SVE2 Support Aligning For GCC 10, LLVM Clang 9.0 - Phoronix" . www.phoronix.com . Consultado el 26 de mayo de 2019 .
- ^ 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 la arquitectura Arm - Armv8, para el perfil de la arquitectura Armv8-R AArch64" . Arm Ltd.