AArch64

núcleo de arquitectura de 64 bits de ARM

AArch64 o ARM64 es la extensió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]

Plataforma Armv8-A con Cortex-A57 / A53 MPCore grande. PEQUEÑO chip de CPU

ARM-A (arquitectura de aplicación) editar

Anunciado en octubre de 2011, 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. 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. 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.[3]

ARMv8-A implementa el estándar VFPv3/v4 y SIMD (Neon) avanzado 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.[4]

Convenciones de nombres editar

  • 64 + 32 bits:
    • Arquitectura: AArch64.
    • Especificación: ARMv8-A.
    • Conjuntos de instrucciones: A64 + A32.
    • Sufijos: v8-A
  • 32 + 16 bits (Thumb):
    • Arquitectura: AArch32.
    • Especificación: ARMv8-R / ARMv7-A.
    • Conjuntos de instrucciones: A32 + T32.
    • Sufijos: -A32 / -R / v7-A.
    • Ejemplo: ARMv8-R, Cortex-A32.[5]

Características de AArch64 editar

  • Nuevo conjunto de instrucciones, A64:
    • Tiene 31 registros de 64 bits de uso general.
    • Tiene un registro cero o de puntero de pila (SP) dedicado (según la instrucción).
    • Ya no se puede acceder directamente al contador de programa (PC) como registro.
    • Las instrucciones aún son 32 bits de largo y casi igual que A32 (con instrucciones LDM/STM y la mayor parte de la ejecución condicional eliminada).
      • Tiene carga/almacenamiento 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 (Neon) mejorado:
    • Tiene registros de 32 × 128 bits (antes 16), también accesibles a través de VFPv4.
    • Admite formato de coma 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 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 editar

El código de operación principal para seleccionar a qué grupo pertenece una instrucción A64 se encuentra en los bits 25-28.

Formatos de instriucción de A64
Type Bit
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
Reservado 0 opPlantilla:Sub 0 0 0 0 opPlantilla:Sub
SME 1 opPlantilla:Sub 0 0 0 0 Varía
Unallocated 0 0 0 1
SVE 0 0 1 0 Varía
No asignado 0 0 1 1
Procesamiento de datos: PC-rel inmediato. op immPlantilla:Sub 1 0 0 0 0 immPlantilla:Sub Rd
Procesamiento de Datos — Otros Inmediatos sf 1 0 0 01-11 Rd
Ramas + Instrucciones del sistema op0 1 0 1 op1 op2
Instrucciones carga/almacenamiento op0 1 op1 0 op2 op3 op4
Procesamiento de datos — Registros sf op0 op1 1 0 1 op2 op3
Procesamiento de datos: punto flotante y SIMD op0 1 1 1 op1 op2 op3

ARMv8.1-A editar

En diciembre de 2014, se anunció ARMv8.1-A,[6]​ 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 forma vectorial y escalar.
  • 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 Privileged Access Never (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.
  • Byte superior ignorado para etiquetado de memoria.[7]

ARMv8.2-A editar

En enero de 2016, se anunció ARMv8.2-A.[8]​ Sus mejoras se dividieron en cuatro categorías:

  • Procesamiento de datos de coma 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 perfiles estadísticos.

Extensión vectorial escalable (SVE) editar

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.[9][10]​ 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 Fujitsu A64FX ARM; esta computadora fue la supercomputadora más rápida del mundo durante dos años, desde junio de 2020 hasta mayo de 2022.[11]​ El procesador ARM AWS Graviton3 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[10]​ y GCC 10 admite los intrínsecos de C. A julio de 2020, LLVM y clang admiten elementos intrínsecos de C e IR. La propia bifurcación de ARM de LLVM admite la vectorización automática.[12]

ARMv8.3-A editar

En octubre de 2016, se anunció ARMv8.3-A. Sus mejoras se dividieron en seis categorías:[13]

  • Autenticación de puntero[14]​ (solo AArch64); extensión obligatoria (basada en un nuevo cifrado de bloque, QARMA)[15]​ 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).[16]
  • 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. [17]

ARMv8.4-A editar

En noviembre de 2017, se anunció ARMv8.4-A. Sus mejoras se clasifican en estas categorías:[18][19][20]

  • Extensiones criptográficas SHA3 / SHA512 / SM3 / SM4.
  • Soporte de virtualización mejorado.
  • Capacidades de partición y monitoreo de memoria (MPAM).
  • Un nuevo estado seguro EL2 y monitores de actividad.
  • Instrucciones de producto escalar entero con y sin signo (SDOT y UDOT).

ARMv8.5-A y ARMv9.0-A editar

En septiembre de 2018, se anunció ARMv8.5-A. Sus mejoras se clasifican en estas categorías:[21][22][23]

  • Extensión de etiquetado de memoria (MTE) (AArch64).[24]
  • 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).[25]

En marzo de 2021, se anunció ARMv9-A. La base de ARMv9-A son todas las características de ARMv8.5.[26][27][28]​ 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 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.[29][30]
  • 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.[29]​ Los códigos de desarrollo LLVM / Clang 9.0 y GCC 10.0 se actualizaron para admitir TME.[30]
  • Arquitectura informática confidencial (CCA).[31][32]

ARMv8.6-A y ARMv9.1-A editar

En septiembre de 2019, se anunció ARMv8.6-A. Sus mejoras se clasifican en estas categorías:[21][33]

  • Multiplicación matricial general (GEMM).
  • Soporte del formato Bfloat16 .
  • 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): [34]
    • 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.[35]

ARMv8.7-A y ARMv9.2-A editar

En septiembre de 2020, se anunció ARMv8.7-A. Sus mejoras se clasifican en estas categorías:[21][36]

  • Extensión de matriz escalable (SME) (solo ARMv9.2). [37]​ SME agrega nuevas funcionalidades 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 editar

En septiembre de 2021, se anunciaron ARMv8.8-A y ARMv9.3-A. Sus mejoras se clasificaron en estas categorías:[21][38]

  • 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.[39]

ARMv8.9-A y ARMv9.4-A editar

En septiembre de 2022, se anunciaron ARMv8.9-A y ARMv9.4-A, que incluyen:[40]

  • 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) editar

Se agregó compatibilidad opcional con AArch64 al perfil Armv8-R, y el primer núcleo de Arm que lo implementó fue el Cortex-R82.[41]​ Agrega el conjunto de instrucciones A64, con algunos cambios en las instrucciones de la barrera de memoria.[42]

Referencias editar

  1. «Overview». Learn the architecture: Understanding the Armv8.x and Armv9.x extensions. 
  2. Grisenthwaite, Richard (2011). «ARMv8-A Technology Preview». Archivado desde el original el 11 de noviembre de 2011. Consultado el 31 de octubre de 2011. 
  3. «Samsung's Exynos 5433 is an A57/A53 ARM SoC». AnandTech. Consultado el 17 de septiembre de 2014. 
  4. «ARM Cortex-A53 MPCore Processor Technical Reference Manual: Cryptography Extension». ARM. Consultado el 11 de septiembre de 2016. 
  5. «Cortex-A32 Processor – ARM». Consultado el 18 de diciembre de 2016. 
  6. Brash, David (2 de diciembre de 2014). «The ARMv8-A architecture and its ongoing development». Consultado el 23 de enero de 2015. 
  7. «Top-byte ignore (TBI)». WikiChip. 
  8. Brash, David (5 de enero de 2016). «ARMv8-A architecture evolution». Consultado el 7 de junio de 2016. 
  9. «The scalable vector extension sve for the ARMv8 a architecture». Arm Community (en inglés). 22 de agosto de 2016. Consultado el 8 de julio de 2018. 
  10. a b «GCC 8 Release Series – Changes, New Features, and Fixes – GNU Project – Free Software Foundation (FSF)». gcc.gnu.org (en inglés). Consultado el 9 de julio de 2018. 
  11. «ORNL's Frontier First to Break the Exaflop Ceiling». Top500. 30 de mayo de 2022. Consultado el 30 de mayo de 2022. 
  12. «⚙ D71712 Downstream SVE/SVE2 implementation (LLVM)». reviews.llvm.org. 
  13. David Brash (26 de octubre de 2016). «ARMv8-A architecture – 2016 additions». 
  14. .«[Ping~,AArch64] Add commandline support for -march=armv8.3-a». «pointer authentication extension is defined to be mandatory extension on ARMv8.3-A and is not optional». 
  15. «Qualcomm releases whitepaper detailing pointer authentication on ARMv8.3». 10 de enero de 2017. 
  16. «A64 Floating-point Instructions: FJCVTZS». arm.com. Consultado el 11 de julio de 2019. 
  17. «GCC 7 Release Series – Changes, New Features, and Fixes». «The ARMv8.3-A architecture is now supported. It can be used by specifying the -march=armv8.3-a option. [..] The option -msign-return-address= is supported to enable return address protection using ARMv8.3-A Pointer Authentication Extensions.» 
  18. «Introducing 2017's extensions to the Arm Architecture». community.arm.com (en inglés). 2 de noviembre de 2017. Consultado el 15 de junio de 2019. 
  19. «Exploring dot product machine learning». community.arm.com (en inglés). 6 de diciembre de 2017. Consultado el 15 de junio de 2019. 
  20. «ARM Preps ARMv8.4-A Support For GCC Compiler – Phoronix». www.phoronix.com (en inglés). Consultado el 14 de enero de 2018. 
  21. a b c d «ARMv8.x and ARMv9.x extensions and features». Learn the architecture: Understanding the ARMv8.x and ARMv9.x extensions. 
  22. «Arm Architecture ARMv8.5-A Announcement – Processors blog – Processors – Arm Community». community.arm.com (en inglés). Consultado el 26 de abril de 2019. 
  23. «Arm Architecture Reference Manual ARMv8, for ARMv8-A architecture profile». ARM Developer (en inglés). Consultado el 6 de agosto de 2019. 
  24. «Arm MTE architecture: Enhancing memory safety». community.arm.com (en inglés). 5 de agosto de 2019. Consultado el 27 de julio de 2021. 
  25. «Adopting the Arm Memory Tagging Extension in Android». Google Online Security Blog (en inglés). Consultado el 6 de agosto de 2019. 
  26. «Arm's solution to the future needs of AI, security and specialized computing is v9». Arm | The Architecture for the Digital World (en inglés). Consultado el 27 de julio de 2021. 
  27. Schor, David (30 de marzo de 2021). «Arm Launches ARMv9». WikiChip Fuse (en inglés estadounidense). Consultado el 27 de julio de 2021. 
  28. Frumusanu, Andrei. «Arm Announces ARMv9 Architecture: SVE2, Security, and the Next Decade». www.anandtech.com. Consultado el 27 de julio de 2021. 
  29. a b c «Arm releases SVE2 and TME for A-profile architecture – Processors blog – Processors – Arm Community». community.arm.com (en inglés). 18 de abril de 2019. Consultado el 25 de mayo de 2019. 
  30. a b «Arm SVE2 Support Aligning For GCC 10, LLVM Clang 9.0 – Phoronix». www.phoronix.com. Consultado el 26 de mayo de 2019. 
  31. «Unlocking the power of data with Arm CCA». community.arm.com (en inglés). 23 de junio de 2021. Consultado el 27 de julio de 2021. 
  32. «Arm Introduces Its Confidential Compute Architecture». WikiChip Fuse (en inglés estadounidense). 23 de junio de 2021. Consultado el 27 de julio de 2021. 
  33. «Arm A profile architecture update 2019». community.arm.com (en inglés). 25 de septiembre de 2019. Consultado el 26 de septiembre de 2019. 
  34. «LLVM 11.0.0 Release Notes». releases.llvm.org. Consultado el 11 de marzo de 2021. 
  35. «BFloat16 extensions for ARMv8-A». community.arm.com (en inglés). 29 de agosto de 2019. Consultado el 30 de agosto de 2019. 
  36. Weidmann, Martin (21 de septiembre de 2020). «Arm A-Profile Architecture Developments 2020». community.arm.com. ARM. Consultado el 28 de septiembre de 2022. 
  37. «Scalable Matrix Extension for the ARMv9-A Architecture». community.arm.com (en inglés). 14 de julio de 2021. Consultado el 27 de julio de 2021. 
  38. Weidmann, Martin (8 de septiembre de 2021). «Arm A-Profile Architecture Developments 2021». community.arm.com. ARM. Consultado el 28 de septiembre de 2022. 
  39. «What is New in LLVM 15? - Architectures and Processors blog - Arm Community blogs - Arm Community». 27 de febrero de 2023. Consultado el 15 de abril de 2023. 
  40. «Arm A-Profile Architecture Developments 2022 - Architectures and Processors blog - Arm Community blogs - Arm Community». community.arm.com (en inglés). 29 de septiembre de 2022. Consultado el 9 de diciembre de 2022. 
  41. Frumusanu, Andrei (3 de septiembre de 2020). «ARM Announced Cortex-R82: First 64-bit Real Time Processor». AnandTech. 
  42. «Arm Architecture Reference Manual Supplement - Armv8, for Armv8-R AArch64 architecture profile». Arm Ltd.