La evolución de la arquitectura de CPUs, especialmente en el segmento de cores de alta eficiencia o 'density-optimized', busca resolver el problema fundamental de maximizar el rendimiento por vatio y por área de silicio. En un contexto donde la ley de Moore se ralentiza y la heterogeneidad computacional es la norma, la capacidad de un SoC para integrar múltiples cores eficientes junto a cores de alto rendimiento es crucial. El Arm Cortex A725 representa la última iteración en esta estrategia, enfocándose en la eficiencia y la densidad para complementar los cores de alto rendimiento (X-series) en diseños big.LITTLE o híbridos.

Históricamente, los cores 'little' o de eficiencia han evolucionado desde diseños in-order muy simples hasta arquitecturas out-of-order con capacidades significativas. Esta transición permite a los cores de eficiencia explotar el paralelismo a nivel de instrucción (ILP) de manera más efectiva, reduciendo la penalización de latencia y mejorando el throughput en cargas de trabajo multithreaded. La relevancia actual de estos cores se magnifica con la proliferación de dispositivos móviles, edge computing y servidores que priorizan la eficiencia energética, donde un gran número de cores eficientes puede superar a un menor número de cores de alto rendimiento en términos de rendimiento total y eficiencia.

Arquitectura del Sistema

El Cortex A725 es un core out-of-order de 5-wide, con una capacidad de reordenamiento de 224 entradas en el Reorder Buffer (ROB), un incremento significativo respecto a las 160 entradas del A710. Se conecta al resto del sistema a través de la DynamIQ Shared Unit 120 (DSU-120) de Arm, que actúa como interconexión a nivel de clúster y alberga la caché L3 compartida, utilizando rutas de lectura y escritura de 256 bits.

El frontend de instrucción del A725 puede entregar 5 macro-operaciones (MOPs) por ciclo, eliminando la caché de MOPs presente en cores anteriores como el A710. Esta decisión se basa en un esquema de predecode que almacena 5 bits de datos 'sideband' junto a cada instrucción AArch64 de 32 bits en la caché de instrucciones, mitigando los costos de decodificación. La etapa de rename/allocate maneja 5 MOPs por ciclo, implementando renaming de registros y optimizaciones como la eliminación de movimientos a cero (zeroing idiom) y, parcialmente, la eliminación de movimientos (move elimination).

El motor de ejecución cuenta con cuatro pipes para operaciones enteras, cada uno alimentado por una cola de scheduling de 20 entradas, y dos pipes para operaciones de punto flotante y vectoriales, cada uno con una cola de scheduling de 16 entradas. La unidad de carga/almacenamiento (Load/Store Unit) tiene tres pipes de Address Generation Unit (AGU), todos capaces de manejar cargas y dos de ellos capaces de manejar almacenamientos. El subsistema de memoria incluye una L1 DTLB de 48 entradas (incremento desde 32 en A710) y una L1 ITLB de 32 entradas (reducción desde 48 en A710), ambas fully associative. La L2 TLB ofrece 1536 entradas en su configuración estándar. La caché L1D es de 64 KB, 4-way set associative, con una latencia de 4 ciclos, y la caché L2 es de 512 KB (en la implementación de Nvidia), 8-way set associative, con una latencia de 9 ciclos, utilizando una política de reemplazo 'dynamic biased'.

CapaTecnologíaJustificación
compute Arm Cortex A725 Core de CPU out-of-order optimizado para densidad y eficiencia energética, utilizado en configuraciones big.LITTLE o híbridas. vs Arm Cortex A710, Arm Neoverse N2, Intel Skymont E-Core, AMD Zen (versiones de bajo consumo) 5-wide out-of-order, 224-entry Reorder Buffer, 64KB L1D, 512KB L2 (Nvidia GB10 implementation)
compute Arm DynamIQ Shared Unit 120 (DSU-120) Interconexión a nivel de clúster para los cores Arm y controlador de la caché L3 compartida. vs Otros diseños de coherencia de caché a nivel de clúster 256-bit read/write paths, integra L3 cache
storage L1 Data Cache (L1D) Caché de primer nivel para datos, crucial para la latencia de acceso a memoria. vs Diferentes tamaños, asociatividades o políticas de reemplazo 64 KB, 4-way set associative, pseudo-LRU, VIPT, 4-cycle load-to-use latency
storage L2 Cache Caché de segundo nivel, proporciona un balance entre capacidad y latencia. vs Diferentes tamaños, asociatividades o políticas de reemplazo 512 KB (Nvidia GB10), 8-way set associative, dynamic biased replacement, 9-cycle latency
storage Translation Lookaside Buffer (TLB) Caché para traducciones de direcciones virtuales a físicas, acelerando el acceso a memoria. vs Diferentes tamaños, asociatividades o particiones entre ITLB/DTLB L1 DTLB: 48 entries, fully associative; L1 ITLB: 32 entries, fully associative; L2 TLB: 1536 entries, 6-way set associative

Trade-offs

Ganancias
  • Rendimiento por vatio y por área de silicio
  • Capacidad de reordenamiento (ROB entries)
  • Eficiencia del branch predictor en cargas de trabajo complejas
  • Cobertura de L1 DTLB
Costes
  • Latencia de BTB L1
  • Tamaño de BTB L1 y L2
  • Eliminación de MOP cache
  • Capacidad de fusión de NOPs en el frontend
  • Soporte para vectorización (FP/vector register file entries)
  • Cobertura de L1 ITLB

Fundamentos Teóricos

El diseño de cores out-of-order se basa en principios fundamentales de la arquitectura de computadoras, muchos de los cuales fueron formalizados en la década de 1960 y 1970. El concepto de ejecución out-of-order y renaming de registros para eliminar dependencias falsas (RAW, WAR, WAW) fue introducido por Robert Tomasulo con el algoritmo de Tomasulo en el IBM System/360 Model 91 (1967). Este algoritmo permite que las instrucciones se ejecuten tan pronto como sus operandos estén disponibles, en lugar de seguir un orden estrictamente secuencial.

La predicción de ramas, un componente crítico para el rendimiento en pipelines profundos, se apoya en trabajos como los de James E. Smith (1981) sobre predictores de ramas dinámicos. La evolución de los Branch Target Buffers (BTBs) y los Return Stacks son aplicaciones directas de estas investigaciones. La gestión de la jerarquía de memoria, incluyendo caches y Translation Lookaside Buffers (TLBs), se basa en principios de localidad temporal y espacial, y en algoritmos de reemplazo de caché como LRU (Least Recently Used) o sus variantes pseudo-LRU, estudiados extensivamente desde los primeros días de la computación.