RISC-V · Segmentación

El pipeline de 5 etapas, ciclo a ciclo

Segmentar no hace que una instrucción tarde menos: cada una sigue pasando por cinco etapas. Lo que cambia es que, en el mejor caso, termina una instrucción por ciclo. Esta página explica cómo leer un diagrama de ciclos y cuándo el pipeline tiene que esperar.

Las cinco etapas

  • IF — busca la instrucción en la dirección del PC y avanza el PC.
  • ID — decodifica y lee los registros fuente. Aquí se detectan los riesgos.
  • EX — la ALU calcula el resultado, la dirección de memoria o la condición del salto.
  • MEM — las cargas y almacenamientos acceden a memoria.
  • WB — el resultado se escribe en el registro destino.

Cómo leer el diagrama

Cada fila es una etapa y cada columna un ciclo de reloj; la celda dice qué instrucción ocupa esa etapa en ese ciclo. Con tres instrucciones independientes no hay esperas: la primera termina en el ciclo 5 y después sale una por ciclo.

Etapa1234567
IFI0I1I2————
ID—I0I1I2———
EX——I0I1I2——
MEM———I0I1I2—
WB————I0I1I2
Con forwarding: 7 ciclos, 0 burbujas, 0 instrucciones descartadas. I0 = addi t0, zero, 1 · I1 = addi t1, zero, 2 · I2 = addi t2, zero, 3

Sin riesgos, N instrucciones tardan N + 4 ciclos: 4 para llenar el pipeline y luego una por ciclo. Cualquier ciclo por encima de eso es una penalización, y el diagrama muestra dónde se produce: una burbuja (burb.) es una etapa vacía insertada mientras una instrucción espera en ID, y FLUSH es una instrucción descartada tras un salto.

Simulador de pipeline

Configuración del Procesador

Saltos: se resuelven en EX y se tratan siempre como tomados, así que las dos instrucciones siguientes se descartan (2 ciclos de penalización). El simulador no evalúa la condición ni salta a la etiqueta: después del descarte continúa con la instrucción siguiente al salto.

Ejercicios

Tres situaciones típicas de examen: un riesgo de carga-uso, cómo eliminarlo reordenando y el coste de un salto.

Cuenta los ciclos de un riesgo carga-uso

En el cauce de 5 etapas del simulador, ¿cuántos ciclos tarda esta secuencia con forwarding y sin forwarding? ¿Cuántas burbujas hay con forwarding?

lw   t0, 0(a0)
add  t1, t0, t0
sub  t2, t1, a1
Abrir en la herramienta

Reordenar para eliminar la burbuja

En el orden original (lw, add, addi, sw) hay una burbuja de carga-uso y la secuencia tarda 9 ciclos con forwarding. Aquí addi se ha movido entre lw y add. ¿Cuántos ciclos tarda ahora con forwarding y cuántas burbujas quedan?

lw   t0, 0(a0)
addi t2, a1, 4
add  t1, t0, t0
sw   t1, 0(a2)
Abrir en la herramienta

La penalización de un salto

El simulador resuelve los saltos en EX y los trata como tomados. ¿Cuántos ciclos tarda la secuencia con forwarding y cuántas instrucciones se descartan?

addi t0, t0, -1
bne  t0, zero, loop
addi a0, a0, 1
addi a1, a1, 1
Abrir en la herramienta

El modelo del simulador

Los libros de texto describen varias variantes de este pipeline. El simulador implementa una concreta, y conviene conocerla antes de comparar resultados con tus apuntes:

  • Con forwarding, los resultados se reenvían desde los registros EX/MEM y MEM/WB a la entrada de la ALU. La única espera es el caso carga-uso: 1 burbuja.
  • Sin forwarding, la instrucción dependiente espera en ID hasta que la productora sale de WB. El simulador no modela la escritura en la primera mitad del ciclo y la lectura en la segunda, así que una dependencia entre instrucciones consecutivas cuesta 3 burbujas; en los libros que sí lo modelan cuesta 2.
  • Los saltos condicionales se resuelven en EX y se tratan siempre como tomados: se descartan las 2 instrucciones buscadas detrás. El simulador no evalúa la condición ni sigue la etiqueta; después del descarte continúa con la instrucción siguiente al salto, de modo que el diagrama muestra el coste del salto, no el recorrido real del programa.
  • Conoce las dependencias de las instrucciones aritméticas, lógicas, cargas, almacenamientos, saltos condicionales, lui y auipc. jal, jalr y otras aparecen en el diagrama pero no generan riesgos (la herramienta lo avisa). Se admiten hasta 15 instrucciones.
  • No hay riesgos estructurales: se supone memoria de instrucciones y de datos separadas.

Referencias