Guía · RISC-V

Cómo funciona un pipeline de 5 etapas

Latencia frente a rendimiento, cuántos ciclos tarda una secuencia, por qué la ganancia real es menor que el número de etapas y qué rompe el ritmo ideal.

Revisada el con las herramientas del sitio.

En un procesador monociclo cada instrucción se ejecuta entera en un único ciclo de reloj, así que el ciclo debe ser tan largo como la instrucción más lenta. Segmentar consiste en partir ese trabajo en etapas separadas por registros, de modo que mientras una instrucción está en EX la siguiente ya se está decodificando y otra se está buscando en memoria.

Latencia y rendimiento

Hay que distinguir dos medidas. La latencia es lo que tarda una instrucción desde que se busca hasta que escribe su resultado: en un pipeline de 5 etapas son 5 ciclos, y no mejora. El rendimiento (throughput) es cuántas instrucciones terminan por unidad de tiempo: en el caso ideal, una por ciclo. La segmentación mejora el rendimiento, no la latencia.

Cuántos ciclos tarda una secuencia

Etapa123456789
IFI0I1I2I3I4————
ID—I0I1I2I3I4———
EX——I0I1I2I3I4——
MEM———I0I1I2I3I4—
WB————I0I1I2I3I4
Cinco instrucciones independientes. Con forwarding: 9 ciclos, 0 burbujas, 0 instrucciones descartadas. I0 = addi t0, zero, 1 · I1 = addi t1, zero, 2 · I2 = addi t2, zero, 3 · I3 = addi t3, zero, 4 · I4 = addi t4, zero, 5

La primera instrucción necesita 5 ciclos para recorrer las etapas; a partir de ahí termina una en cada ciclo. Para N instrucciones y k etapas, sin riesgos:

ciclos = k + (N − 1) = N + 4   (k = 5)

Con N = 5 salen 9 ciclos, como en el diagrama. El CPI (ciclos por instrucción) de esta secuencia es 9 / 5 = 1,8, pero se acerca a 1 cuando N crece, porque los 4 ciclos de llenado se reparten entre más instrucciones.

Por qué la ganancia no llega a 5

Supongamos estos retardos para cada etapa (son valores de ejemplo, no de un procesador concreto):

IFIDEXMEMWBSumaMáximo
200 ps150 ps200 ps200 ps100 ps850 ps200 ps

El procesador monociclo necesita un ciclo de 850 ps. En el segmentado, el ciclo lo marca la etapa más lenta: 200 ps. Para un millón de instrucciones, el monociclo tarda 850 µs y el segmentado unos 200 µs (1 000 004 ciclos × 200 ps). La mejora es 850 / 200 = 4,25, no 5, porque las etapas no están equilibradas: ID y WB desperdician parte de su ciclo. En la práctica los registros entre etapas añaden además un pequeño retardo a cada ciclo.

Qué necesita cada etapa

  • IF lee la instrucción en la dirección del PC y calcula PC + 4.
  • ID decodifica los campos y lee rs1 y rs2 del banco de registros.
  • EX hace la operación en la ALU, calcula la dirección de un acceso a memoria o evalúa la condición de un salto.
  • MEM lee o escribe la memoria de datos (solo cargas y almacenamientos).
  • WB escribe el resultado en rd.

Todo lo que una instrucción necesita en etapas posteriores (el valor de los registros leídos, el número de rd, el resultado de la ALU…) viaja con ella en los registros de segmentación IF/ID, ID/EX, EX/MEM y MEM/WB.

Lo que rompe el ritmo ideal

El pipeline solo termina una instrucción por ciclo si nada le obliga a detenerse. Hay tres tipos de riesgo:

  • Estructurales: dos etapas necesitan el mismo recurso en el mismo ciclo. Con memorias de instrucciones y datos separadas, como supone el simulador, no se dan.
  • De datos: una instrucción necesita un resultado que la anterior aún no ha escrito. Se tratan en la guía de riesgos RAW.
  • De control: tras un salto, el pipeline ya ha buscado instrucciones que quizá no deban ejecutarse.

Este es el coste de un salto en el modelo del simulador, que resuelve los saltos en EX y los trata como tomados:

Etapa12345678910
IFI0I1I2I3I2I3————
ID—I0I1I2FLUSHI2I3———
EX——I0I1FLUSHFLUSHI2I3——
MEM———I0I1FLUSHFLUSHI2I3—
WB————I0I1FLUSHFLUSHI2I3
Con forwarding: 10 ciclos, 0 burbujas, 2 instrucciones descartadas. I0 = addi t0, t0, -1 · I1 = bne t0, zero, loop · I2 = addi a0, a0, 1 · I3 = addi a1, a1, 1

Cuando bne llega a EX, las dos instrucciones siguientes ya están en ID e IF y se descartan (FLUSH): 4 instrucciones que deberían tardar 8 ciclos tardan 10. Los procesadores reales reducen esta penalización resolviendo el salto antes o prediciendo si se tomará.

Practica lo que has leído

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

Referencias

  • D. A. Patterson, J. L. Hennessy — Computer Organization and Design RISC-V Edition: The Hardware/Software Interface (Morgan Kaufmann) — capítulo del procesador: pipeline de 5 etapas, riesgos de datos y de control, forwarding y detección de carga-uso
  • S. L. Harris, D. Harris — Digital Design and Computer Architecture: RISC-V Edition (Morgan Kaufmann) — lógica combinacional, mapas de Karnaugh, decodificador de 7 segmentos y microarquitectura RISC-V