View
234
Download
0
Category
Preview:
Citation preview
Cap. 6: Pipelining.
EncauzamientoEncauzamiento de procesadoresNormalmente traducido como segmentación.
Una técnica que mejora ostensiblemente la productividad.
Paralelismo a nivel de instrucciones (ILP)Overview: De este capítulo, sólo estamos interesados en los conceptos.
Pipelining.
Traducción:
Segmentación. Usada en la versión española del libro de texto –la más usada.
Encauzamiento. Usada traducciones de otros libros sobre computadores –¿La más apropiada?
Pipelining: Concepto
Técnica de mejora del rendimiento del procesador:
Permite la ejecución de varias instrucciones al mismo tiempo.
Incrementa la productividad del procesador
Pero, el tiempo empleado por cualquier instrucción es el mismo que en el procesador no encauzado.
Estructuras básicas: Unidad de memoria dividida en datos e instrucciones
MIPS
PC
Memoria de datoslw $t1, 0($t0)lw $t2, 4($t0)add $t3, $t1, $t2sw $t3, 12($t0)lw $t4, 8($t0)add $t5, $t1, $t4sw $t5, 16($t0)...
Memoria de instrucciones
IR
InstrucciónRF Dato
0x001010000x000000000x00ff00000xffffff000x000000000xffffffff...
Clk
Estructuras básicas
Cola prioritaria: Las instrucciones
se ejecutan en su orden natural
5 etapas La mejora
productividad obtenida tiende a ser x5.
Pero, surgen conflictos entre las instrucciones
Estructurales De datos De control
MIPSPC
lw $t1, 0($t0)lw $t2, 4($t0)add $t3, $t1, $t2sw $t3, 12($t0)lw $t4, 8($t0)add $t5, $t1, $t4sw $t5, 16($t0)...
Memoria de instrucciones
Instrucción
Clk
IF ID EX MEM WB
Cola de instrucciones
Las instrucciones de ejemplo base para este
capítulo. lw, sw, add, sub, and, or, slt y beq. En principio, asumiremos que todas
ellas son ejecutadas en 5 fases. La pipa (La cola de instrucciones):
5 etapas. Mejora de velocidad = x5. Mas fases Mas mejora de velocidad
Es necesario un compromiso
La ruta de datos uniciclo encauzada
Instructionmemory
Address
4
32
0
Add Addresult
Shiftleft 2
Instruction
Mux
0
1
Add
PC
0Writedata
Mux
1Registers
Readdata 1
Readdata 2
Readregister 1
Readregister 2
16Sign
extend
Writeregister
Writedata
ReaddataAddress
Datamemory
1
ALUresult
Mux
ALUZero
IF: Instruction fetch ID: Instruction decode/register file read
EX: Execute/address calculation
MEM: Memory access WB: Write back
Ejejmplo de ejecución encauzada
¿Ves un “bug” en este diseño?
Este computador no es funcionalmente equivalente al computador uniciclo conocido
¿Cómo arreglamos el “bug”?
IM Reg DM RegALU
IM Reg DM RegALU
CC 1 CC 2 CC 3 CC 4 CC 5 CC 6 CC 7
Time (in clock cycles)
lw $2, 200($0)
lw $3, 300($0)
Programexecutionorder(in instructions)
lw $1, 100($0) IM Reg DM RegALU
Solución al “bug” anterior
Instructionmemory
Address
4
32
0
Add Addresult
Shiftleft 2
Inst
ruct
ion
IF/ID EX/MEM MEM/WB
Mux
0
1
Add
PC
0Writedata
Mux
1Registers
Readdata 1
Readdata 2
Readregister 1
Readregister 2
16Sign
extend
Writeregister
Writedata
Readdata
1
ALUresult
Mux
ALUZero
ID/EX
Datamemory
Address
Etapas de la pipa desacopladas entre sí mediante registros de pipa:
Deben ser de suficiente ancho
128, 97, 64, ... Pero, todavía existe
un “bug” en el diseño ¿?
Pensemos en una instrucción lw
¿A qué registro se transfiere el dato procedente de la memoria?
Registros inter-fase:La instrucción “conserva” el registro de destino
para usarlo en su 5ª fase
Instructionmemory
Address
4
32
0
Add Addresult
Shiftleft 2
Inst
ruct
ion
IF/ID EX/MEM MEM/WB
Mux
0
1
Add
PC
0
Address
Writedata
Mux
1Registers
Readdata 1
Readdata 2
Readregister 1
Readregister 2
16Sign
extend
Writeregister
Writedata
Readdata
Datamemory
1
ALUresult
Mux
ALUZero
ID/EX
•A medida que una instrucciónprogresa en suejecución, lleva consigo la información necesariapara su ejecucióncompleta.
•Esta informaciónse pasa de una fase a la siguiente,a través de los registros inter-fase
Diseño de la unidad de control
Necesitamos generar el conjunto de microórdenes que controlen cada etapa de la pipa.
¿En qué instante deben estar listas? Las microórdenes serán generadas
cuando conozcamos la clase de instrucción de la que se trata...
Detección de conflictos entre instrucciones.
IM Reg
IM Reg
CC 1 CC 2 CC 3 CC 4 CC 5 CC 6
Time (in clock cycles)
sub $2, $1, $3
Programexecutionorder(in instructions)
and $12, $2, $5
IM Reg DM Reg
IM DM Reg
IM DM Reg
CC 7 CC 8 CC 9
10 10 10 10 10/– 20 – 20 – 20 – 20 – 20
or $13, $6, $2
add $14, $2, $2
sw $15, 100($2)
Value of register $2:
DM Reg
Reg
Reg
Reg
DM
Adelantamiento de resultados.
(Forwarding)
IM Reg
IM Reg
CC 1 CC 2 CC 3 CC 4 CC 5 CC 6
Time (in clock cycles)
sub $2, $1, $3
Programexecution order(in instructions)
and $12, $2, $5
IM Reg DM Reg
IM DM Reg
IM DM Reg
CC 7 CC 8 CC 9
10 10 10 10 10/– 20 – 20 – 20 – 20 – 20
or $13, $6, $2
add $14, $2, $2
sw $15, 100($2)
Value of register $2 :
DM Reg
Reg
Reg
Reg
X X X – 20 X X X X XValue of EX/MEM :X X X X – 20 X X X XValue of MEM/WB :
DM
Conflictos de datos y detenciones de la pipa.
Un caso de conflicto no resoluble mediante forwarding es una instrucción que lee un registro seguida de una instrucción que carga ese registro.
La pipa debe ser detenida temporalmente (stall)
Pipa detenida: Reg/load.
lw $2, 20($1)
Programexecutionorder(in instructions)
and $4, $2, $5
or $8, $2, $6
add $9, $4, $2
slt $1, $6, $7
Reg
IM
Reg
Reg
IM DM
CC 1 CC 2 CC 3 CC 4 CC 5 CC 6Time (in clock cycles)
IM Reg DM RegIM
IM DM Reg
IM DM Reg
CC 7 CC 8 CC 9 CC 10
DM Reg
RegReg
Reg
bubble
Fallos debidos a instrucciones de salto condicional.(Fallos de control) Al principio de la presentación hemos
asumido que todas las instrucciones se ejecutan en 5 etapas.
beq $1, $3, 7 también se ejecuta en 5 etapas En la etapa MEM se toma la decisión (branch) ¿Qué ocurre con las instrucciones
inmediatamente siguientes si de hecho se produce el salto condicional?
Deben ser descartadas... Un ejemplo:
Vaciado de la pipa debido a un salto condicional
ejecutado
Reg
Reg
CC 1
Time (in clock cycles)
40 beq $1, $3, 7
Programexecutionorder(in instructions)
IM Reg
IM DM
IM DM
IM DM
DM
DM Reg
Reg Reg
Reg
Reg
RegIM
44 and $12, $2, $5
48 or $13, $6, $2
52 add $14, $2, $2
72 lw $4, 50($7)
CC 2 CC 3 CC 4 CC 5 CC 6 CC 7 CC 8 CC 9
Reg
Saltos condicionales en la pipa
¿Asumir que no se producirán? Cuando no acertemos habrá que vaciar la pipa.
¿Observar los condicionales a ver si en el pasado se produjo el salto? Branch target buffer (BTB).
Más trucos con los condicionales: Branch delay slot
La instrucción que sigue al condicional se ejecuta siempre.
Acortar las fases de un salto Menos instrucciones que descartar si el salto se produce.
Branch delay slot
a. From before b. From target c. From fall through
sub $t4, $t5, $t6
…
add $s1, $s2, $s3
if $s1 = 0 then
add $s1, $s2, $s3
if $s1 = 0 then
add $s1, $s2, $s3
if $s1 = 0 then
sub $t4, $t5, $t6add $s1, $s2, $s3
if $s1 = 0 then
sub $t4, $t5, $t6
add $s1, $s2, $s3
if $s2 = 0 then
BecomesBecomesBecomes
Delay slot
Delay slot
Delay slot
sub $t4, $t5, $t6
if $s2 = 0 then
add $s1, $s2, $s3
Excepciones y pipelining
Las excepciones tienen lugar con la pipa llena de instrucciones ¿Cómo afecta esto al resto de instrucciones que
están en el medio? ¿Vaciar la pipa? A veces es tan complicado saber la instrucción
origen de la excepción que las excepciones se manejan con imprecisión.
Peticiones de i/o, invocación de servicios del SO, instrucción no definida, overflow, fallo h/w.
Procesadores superescalares.
Superescalar Comenzar mas de una instrucción
en cada ciclo de reloj. El procesador puede planificar la
ejecución de código para que resulte más eficiente -“al vuelo”.
Ejecución especulativa de condicionales sujeta a predicción de saltos.
Recommended