Segmentación de Instrucciones (Pipelining): Optimización del Rendimiento en Arquitectura de CPU
Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones
Escrito el en
español con un tamaño de 4,19 KB
Segmentación de Instrucciones (Pipelining)
Estrategia y Fundamentos de la Segmentación de Cauce
La segmentación de cauce (pipelining) es una forma particularmente efectiva de organizar el hardware de la CPU para realizar más de una operación al mismo tiempo. Consiste en descomponer el proceso de ejecución de las instrucciones en fases o etapas que permitan una ejecución simultánea.
Se hace referencia a segmentación de cauce cuando se aceptan nuevas entradas antes de que algunas entradas aceptadas con anterioridad aparezcan como salidas. En el procesamiento de una instrucción, hay períodos en los que no se accede a la memoria principal. Este tiempo podría utilizarse en captar la siguiente instrucción en paralelo con la ejecución de la actual. A esto se llama precaptación de instrucción.
Fases del Cauce de Instrucción
Para conseguir una mayor aceleración, el cauce debe tener varias etapas. Un modelo común de descomposición incluye:
- Captación de instrucción (Instruction Fetch).
- Decodificación de instrucción (Decodificar la instrucción, calcular operandos, captar operandos).
- Ejecución de instrucción (Instruction Execute).
- Escritura de resultado (Write Back).
Con esta descomposición, las diversas etapas tendrán casi igual duración. Sin embargo, este diagrama supone que cada instrucción recorre las seis etapas del cauce, cuando no siempre se dará este caso. Por ejemplo, una instrucción de carga no necesita escribir resultados.
Desafíos y Limitaciones del Pipelining
El diseño ideal de cauce supone que todas las etapas pueden funcionar en paralelo y que no hay conflictos de memoria. Sin embargo, la mayoría de los sistemas de memoria no permiten que se acceda simultáneamente a la memoria.
Problemas de Control y Dependencia
Otra dificultad es la instrucción de bifurcación condicional, que puede invalidar varias captaciones de instrucción. Un último problema es que la etapa de calcular operandos puede depender del contenido de un registro que podría verse alterado por una instrucción previa que aún esté en el cauce.
Factores que Reducen el Rendimiento
Hay dos factores que frustran este patrón de diseño de altas prestaciones:
- En cada etapa del cauce, hay algún gasto extra debido a la transferencia de datos de búfer a búfer, lo que puede prolongar el tiempo de ejecución total de una instrucción aislada.
- La cantidad de lógica de control necesaria para manejar dependencias de memoria y registros, y para optimizar el uso del cauce, aumenta con el número de etapas.
Atascos y Riesgos en el Cauce (Pipeline Hazards)
Los atascos de un cauce son las situaciones que impiden a la siguiente instrucción ejecutarse en el ciclo que le corresponde.
Riesgos Estructurales
Son provocados por conflictos por los recursos, cuando dos instrucciones necesitan utilizar el mismo recurso hardware en el mismo ciclo (por ejemplo, dos accesos simultáneos a memoria).
Soluciones a Riesgos Estructurales:
- Replicación de unidades funcionales.
- Utilización de cachés diferenciadas de datos e instrucciones.
Riesgos por Dependencia de Datos
Ocurren cuando los operandos fuente o destino de una instrucción no están disponibles en el momento en que se necesitan (por ejemplo, una instrucción intenta leer un registro que una instrucción anterior aún no ha escrito).
Soluciones a Riesgos por Dependencia de Datos:
- Adelantamiento de operandos (Forwarding o Bypassing).
- Inserción de instrucciones NOP (No Operation).
- Reordenación de código.
Riesgos por Dependencia de Control
Surgen de la necesidad de tomar una decisión basada en los resultados de una instrucción (como una bifurcación) mientras las otras instrucciones se están ejecutando. Esto puede llevar a que se carguen instrucciones incorrectas en el cauce.