Unidad de generación de direcciones
# Unidad de generación de direcciones

La unidad de generación de direcciones (AGU), también conocida como unidad de computo de direcciones (ACU), es una unidad de ejecución dentro de una unidad central de procesamiento (CPU) que calcula las direcciones usadas por la CPU para acceder a la memoria princi
pal. Tendiendo los cálculos de direcciones manejados en circuitos separados que operan en paralelo con el resto de la CPU, el número de ciclos de CPU requeridos para ejecutar varias instrucciones, aumentando el desempeño.
Mientras se ejecutan varias operaciones, las CPUs necesitan calcular direcciones de memoria requeridas para obtener datos de la memoria. Por ejemplo, las posiciones in-memory de elementos array tienen que calcularse antes de que la CPU pueda obtener datos desde las posiciones actuales en memoria. Estos cálculos de direcciones envuelven diferentes operaciones aritméticas sobre enteros, como la suma, resta, operación módulo, o bit shifts. Comúnmente, calcular una dirección de memoria conlleva más de una instrucción con propósito general, que no necesariamente se decodifica y ejecuta rápidamente. Para incorporar una AGU en un diseño de CPU, basta con introducir instrucciones especializadas para el uso de la AGU; varios cálculos de generación de direcciones pueden ser descargados desde el resto de la cpu, y pueden habitualmente ser ejecutadas en un único ciclo de CPU.
Las capacidades de una AGU dependen particularmente de la CPU y su arquitectura. Entonces, algunas AGUs implementan más operaciones de cálculo de direcciones, mientras que otras incluyen instrucciones avanzadas especializadas que pueden operar a la vez. Más aún, algunas arquitecturas de CPU incluyen múltiples AGUs, entonces más de una operación de cálculo de direcciones puede ser ejecutada simultáneamente, trayendo mejoras en el desempeño debido a la naturaleza superescalar del diseño avanzado de CPUs. Por ejemplo, Intel incorpora múltiples AGUs dentro de sus microarquitecturas Sandy Bridge y Haswell, que aumentan el ancho de banda del subsistema de memoria de la CPU, permitiendo múltiples instrucciones de acceso a memorias en paralelo.