Las arquitecturas segmentadas son un modelo de organización de computadoras que surge como respuesta a la necesidad de mejorar el rendimiento de los procesadores sin aumentar excesivamente su complejidad ni el costo del hardware.
El principio básico es el de la segmentación (pipelining):
Dividir la ejecución de una instrucción en varias etapas que se solapan en el tiempo, de manera similar a una línea de ensamblaje en una fábrica.
De este modo, mientras una instrucción está siendo decodificada, otra puede estar ejecutándose y otra más puede estar siendo cargada de memoria, lo que permite aprovechar mejor los recursos de la CPU.
Una instrucción completa se divide en una serie de etapas (fetch, decode, execute, etc.).
Cada etapa está a cargo de un segmento o unidad funcional del procesador.
Varias instrucciones pueden estar en diferentes etapas de ejecución al mismo tiempo.
Aunque varían según el diseño del procesador, las etapas más comunes son:
IF (Instruction Fetch): Búsqueda de la instrucción en memoria.
ID (Instruction Decode): Decodificación de la instrucción y preparación de operandos.
EX (Execute): Ejecución de la operación en la ALU o unidad funcional.
MEM (Memory Access): Acceso a memoria si se necesita (lectura/escritura).
WB (Write Back): Escritura del resultado en un registro.
Mayor rendimiento: se aumenta el throughput (número de instrucciones completadas por unidad de tiempo).
Mejor aprovechamiento de hardware, ya que varias unidades trabajan simultáneamente.
Permite aumentar la frecuencia de reloj en procesadores modernos.
Aunque mejora el rendimiento, la segmentación introduce nuevos problemas llamados hazards (riesgos de ejecución):
Hazards estructurales: ocurren cuando dos instrucciones compiten por el mismo recurso (ej. acceso simultáneo a memoria).
Hazards de datos: aparecen cuando una instrucción depende del resultado de otra que aún no ha terminado.
Ejemplo: ADD R1, R2, R3 seguido de SUB R4, R1, R5.
Hazards de control: se presentan en saltos condicionales y bifurcaciones (branches).
El procesador no sabe qué instrucción cargar hasta conocer el resultado de la condición.
Soluciones:
Uso de técnicas de forwarding (reenvío de resultados).
Inserción de burbujas (pausas) en el pipeline.
Predicción de saltos en procesadores modernos.
Existen varias formas de aplicar segmentación en las arquitecturas de cómputo:
Las instrucciones pasan de una etapa a la siguiente de manera secuencial.
Ejemplo: el pipeline de 5 etapas del procesador MIPS.
Varios pipelines trabajan en paralelo para ejecutar múltiples instrucciones al mismo tiempo.
Ejemplo: procesadores Intel Pentium, AMD Ryzen.
Incluye técnicas como ejecución fuera de orden (Out-of-Order Execution).
Permite que la CPU reordene instrucciones para evitar bloqueos.
Procesadores con muchas etapas (10 o más) para alcanzar frecuencias de reloj muy altas.
Ejemplo: Intel Pentium 4 con 20 etapas de pipeline.
MIPS R2000/R3000 Pipeline clásico de 5 etapas.
Intel Pentium (1993) Dos pipelines (U y V) en paralelo.
Intel Pentium 4 (2000) Pipeline profundo de 20 etapas.
ARM Cortex-A Segmentación avanzada con predicción de saltos.
Procesadores modernos x86 y ARM Superescalares, segmentados y con ejecución fuera de orden.
Las arquitecturas segmentadas representan una evolución sobre los modelos clásicos, al introducir el paralelismo a nivel de instrucción.
Gracias a la segmentación:
Los procesadores modernos pueden ejecutar millones de instrucciones por segundo.
Se optimiza el uso de hardware y se reduce el tiempo de ejecución.
Aunque introduce problemas como hazards, estos se resuelven con técnicas avanzadas (forwarding, predicción, ejecución fuera de orden).