AC20101-c14-12oct2010-Repaso_Datapath_Pipeline

Download Report

Transcript AC20101-c14-12oct2010-Repaso_Datapath_Pipeline

ISI374 – Arquitectura de Computadores
Clase 14: Repaso (Diseño del microprocesador,
segmentación)
Departamento de Ingeniería de Sistemas
Universidad de Antioquia
2010-1
2
La CPU en el modelo de von Neumann

Procesador (CPU)
ISI374 - Arquitectura de Computadores (2010-1)

Ruta de datos (datapath)
»

Porción del procesador que corresponde al HW necesario para ejecutar las
operaciones que él demanda
Unidad de control
»
Porción del procesador (también en HW) que le indica al datapath lo que debe hacer
3
ISI374 - Arquitectura de Computadores (2010-1)
Implementación básica MIPS
Subconjunto de la arquitectura MIPS (suficiente para ilustrar los principios
que orientan el diseño de un datapath y una unidad de control para cualquiera
otra ISA)

Instrucciones de acceso a memoria
Load word, lw
 Store word, sw


Instrucciones aritmético-lógicas
Suma, add
 Resta, sub
 AND lógica, and
 OR lógica, or
 Set on less than, slt


Instrucciones de salto
Branch if equal, beq
 Jump, j

4
Diseño del procesador monociclo
ISI374 - Arquitectura de Computadores (2010-1)
Cinco pasos para diseñar un procesador:
1.
Analizar la arquitectura del conjunto de instrucciones (ISA)

2.
3.
4.
5.
Para conocer los requerimientos del datapath
Establecer los componentes del datapath y elegir el esquema de reloj
Ensamblar el datapath satisfaciendo los requerimientos
Analizar la implementación de las instrucciones para determinar las señales
de control que tendrán efecto sobre el flujo de datos
Construir la lógica de control
ISI374 - Arquitectura de Computadores (2010-1)
5
Datapath con la unidad de control
6
Control de la ALU
ISI374 - Arquitectura de Computadores (2010-1)

Las líneas de control de la ALU se pueden generar usando una pequeña
unidad de control (ALU control) que tiene como entradas el campo funct de
6 bits de la instrucción y un campo de control de 2 bits al que llamaremos
ALUop
Los valores de ALUop se generan en la unidad de control principal
 El uso de varios niveles de control permite reducir el tamaño de la unidad de
control principal (potencialmente incrementando su velocidad)

opcode
ALUOp
Operación
funct
Función ALU
Control ALU
lw
00
load word
XXXXXX
add
0010
sw
00
store word
XXXXXX
add
0010
beq
01
branch equal
XXXXXX
subtract
0110
add
100000
add
0010
subtract
100010
subtract
0110
AND
100100
AND
0000
OR
100101
OR
0001
set-on-less-than
101010
set-on-less-than
0111
Tipo R
10
7
ISI374 - Arquitectura de Computadores (2010-1)
Control de la ALU

Tabla de verdad para las líneas de control de la ALU (Operation), cuyas
entradas son ALUop y el campo funct

Una posible implementación:
8
Función de control para el procesador MIPS monociclo
La función de control se puede definir mediante una tabla de verdad
 Las salidas son las líneas de control y las entradas son el campo opcode de la
instrucción
ISI374 - Arquitectura de Computadores (2010-1)

9
ISI374 - Arquitectura de Computadores (2010-1)
Datapath y unidad de control con instrucción jump
10
Desventajas del procesador monociclo

El ciclo de reloj debe contener la instrucción más lenta
Muy problemático si las instrucciones fueran más complejas (Ej: punto flotante)
 Muchos tipos de instrucciones soportarían un ciclo de reloj inferior
ISI374 - Arquitectura de Computadores (2010-1)

Viola el principio de diseño “Hacer el caso común más rápido”
 El costo de la implementación hardware puede ser alto porque muchas
unidades funcionales tienen que replicarse (debido a que la misma unidad no
puede usarse más de una vez en el mismo ciclo de reloj)
 Sin embargo, es un diseño simple y fácil de comprender


Soluciones alternativas:

Reducir el ciclo de reloj y hacer que cada instrucción se ejecute en varios ciclos
»

Solapar la ejecución de varias instrucciones elevando la utilización del hardware y
el rendimiento
»

Procesador multi-ciclo
Segmentación (pipelining)
Buscar y ejecutar varias instrucciones a la vez
»
Procesadores superescalares
11
Segmentación: analogía con una lavandería
ISI374 - Arquitectura de Computadores (2010-1)




La segmentación no reduce la latencia
de una tarea, sino que eleva el
throughput de un proceso completo
Varias tareas operan simultáneamente
usando recursos diferentes
La rata del pipeline está limitada por la
etapa más lenta
Etapas desequilibradas del pipeline
reducen el speedup

Speedup potencial: número de etapas
del pipe

El speedup se reduce porque hay que
llenar (fill) y vaciar (flush) el pipeline
6 PM 7
8
9
10
Time
T
a
s
k
O
r
d
e
r
30 30 30 30 30 30 30
A
B
C
D
12
ISI374 - Arquitectura de Computadores (2010-1)
Pasos en la ejecución de una instrucción MIPS
1.
2.
3.
IF: (Instruction Fetch) Búsqueda de la instrucción, actualización del PC
ID: (Instruction Decode) Decodificación de la instrucción, lectura del banco
de registros
EX: (Execution)


4.
MEM: (Memory)


5.
Instrucción de acceso a memoria: Cálculo de la dirección
Instrucción aritmético-lógica: Cálculo de la operación
Load: Lectura de la memoria de datos
Store: Escritura de la memoria de datos
WB: (Write Back) Escritura del resultado en el banco de registros
13
Procesador MIPS segmentado
Tendremos cinco etapas, una por cada paso de ejecución de una instrucción
 Cada etapa del pipeline se completa en un ciclo de reloj
 Cada instrucción toma el mismo número de etapas (5) para ejecutarse,
aunque algunas de ellas estén inactivas algunas veces
 Mejora el throughput aunque la latencia de cada instrucción no se reduce
ISI374 - Arquitectura de Computadores (2010-1)

cc 1
Instr. i
Instr. i+1
Instr. i+2
Instr. i+3
Instr. i+4
IF
cc 2
cc 3
cc 4
cc 5
cc 6
cc 7
cc 8
cc 9
Una vez el pipeline
está lleno, se finaliza
una instrucción cada
ciclo (CPI = 1)
ID
EX
MEM WB
IF
ID
EX
MEM WB
IF
ID
EX
MEM WB
IF
ID
EX
MEM WB
IF
ID
EX
Time
MEM WB
14
Representación gráfica del pipeline

Útil para:
Saber cuántos ciclos de reloj toma la ejecución de un código
 Saber qué hace una unidad funcional en un ciclo determinado
 Si ocurre un riesgo (hazard), saber porqué y saber cómo resolverlo
ISI374 - Arquitectura de Computadores (2010-1)

15
Riesgos (Hazards)
ISI374 - Arquitectura de Computadores (2010-1)

El principio de la segmentación es simple pero su implementación introduce
una serie de problemas
Riesgos (Hazards)
Situaciones en las cuales la próxima instrucción no puede ejecutarse en el
siguiente ciclo de reloj
 Pueden obligar a detener (stall) el pipeline, evitando que se logre el speedup
ideal



Los riesgos se pueden resolver esperando, pero será el controlador del pipeline
quien los detecte y resuelva
Tipos:
Riesgos estructurales (Structural hazards)
 Riesgos de datos (Data hazards)
 Riesgos de control (Control hazards)

16
Riesgos estructurales

¿Qué sucede con los accesos al banco de registros?
ISI374 - Arquitectura de Computadores (2010-1)

Para resolver el riesgo estructural al momento de acceder al banco de registros,
las escrituras se realizan en la primera mitad del ciclo, y las lecturas en la segunda
add $t0, $t1, $t2
Instr. 1
Instr. 2
add $s2, $t0, $s3
Clock
Flanco de reloj que
controla la lectura de operandos del
banco de registros
Flanco de reloj que
controla la escritura de
resultados en el banco
de registros
17
Riesgos de datos
ISI374 - Arquitectura de Computadores (2010-1)

Considere la ejecución segmentada de la siguiente secuencia de instrucciones:
add $t0, $t1, $t2
sub $t3, $t0, $t4
and $t5, $t0, $t6
or $t7, $t0, $t8
nor $t9, $t0, $t9

Las dependencias de datos hacia atrás en el tiempo ocasionan riesgos de datos
18
Adelantamiento (Forwarding, bypassing, short-circuiting)

Técnica hardware para solucionar algunos riesgos de datos
No es necesario esperar a que una instrucción se ejecute por completo para
resolver el riesgo de datos
 Es posible usar un resultado tan pronto como se calcula, sin tener que esperar a
que sea escrito en el banco de registros
 Requiere conexiones extras en el datapath
ISI374 - Arquitectura de Computadores (2010-1)


Los caminos de adelantamiento son válidos si la etapa de destino es posterior en
el tiempo a la etapa de origen
19
Adelantamiento (Forwarding, bypassing, short-circuiting)
ISI374 - Arquitectura de Computadores (2010-1)
Ejemplo 1:
add $t0, $t1, $t2
sub $t3, $t0, $t4
and $t5, $t0, $t6
or $t7, $t0, $t8
nor $t9, $t0, $t9
20
Adelantamiento (Forwarding, bypassing, short-circuiting)
ISI374 - Arquitectura de Computadores (2010-1)
Ejemplo 2:
add $t0, $t1, $t2
lw $t3, 0($t0)
sw $t3, 12($t0)
21
ISI374 - Arquitectura de Computadores (2010-1)
Adelantamiento (Forwarding, bypassing, short-circuiting)

No todos los riesgos de datos pueden resolverse mediante adelantamiento

Riesgo de datos asociado con el uso de LOAD
Pipeline sin detección de riesgo
ld $t1, 0(t0)
sub $t3, $t1, $t2
and $t4, $t1, $t5
or $t6, $t1, $t7
Pipeline con detección de riesgo
ld $t1, 0(t0)
sub $t3, $t1, $t2
and $t4, $t1, $t5
or $t6, $t1,$t7
No es posible el
adelantamiento
22
Reordenamiento de código para evitar paradas del pipe
ISI374 - Arquitectura de Computadores (2010-1)

Ejemplo:
Considere un segmento de código MIPS. Determine los riesgos y reordene el
código para evitar paradas del pipeline
stall
stall
lw
lw
add
sw
lw
add
sw
$t1,
$t2,
$t3,
$t3,
$t4,
$t5,
$t5,
0($t0)
4($t0)
$t1, $t2
12($t0)
8($t0)
$t1, $t4
16($t0)
13 ciclos
lw
lw
lw
add
sw
add
sw
$t1,
$t2,
$t4,
$t3,
$t3,
$t5,
$t5,
0($t0)
4($t0)
8($t0)
$t1, $t2
12($t0)
$t1, $t4
16($t0)
11 ciclos
23
Riesgos de control
17% de las instrucciones MIPS ejecutadas son saltos (bne, beq) (SPECint2006)
 Los saltos determinan el flujo de programa
ISI374 - Arquitectura de Computadores (2010-1)


La siguiente instrucción a ejecutar depende del resultado del salto
beq
instr. 1
instr. 2
instr. 3
instr. 4
24
Riesgos de control
ISI374 - Arquitectura de Computadores (2010-1)
Solución inicial: Stall on branch
Detenerse hasta que la decisión de salto sea tomada para buscar la siguiente
instrucción
 Insertar burbujas (instrucciones nop, No Operation, aquellas que no hacen
nada y sólo ocupan tiempo) para retrasar la búsqueda de la siguiente
instrucción durante 2 ciclos


En nuestro caso, los saltos toman 3 ciclos de reloj cada uno (el comparador
está en la etapa EX)
25
Riesgos de control
ISI374 - Arquitectura de Computadores (2010-1)
Optimización #1
Insertar un comparador para saltos en la segunda etapa (ID)
 Tan pronto como se decodifica la instrucción de salto, tomar una decisión y
ajustar el nuevo valor del PC

Como el salto se completa en la segunda etapa, sólo se introduce una burbuja
 Los saltos toman 2 ciclos de reloj cada uno (el comparador está en la etapa ID)
 Esto significa que los saltos están inactivos en las etapas 3, 4 y 5 (EX, MEM y WB,
respectivamente)

26
Riesgos de control
ISI374 - Arquitectura de Computadores (2010-1)
Optimización #2. Redefinición de los saltos
Antes:

Si el salto se toma, ninguna de las instrucciones que siguen al salto se ejecutan por
accidente
Ahora:

Se tome o no el salto, la instrucción inmediatamente posterior al salto se ejecuta
(y se denomina branch delay slot, hueco de salto diferido o retardado)

El término delayed branch (salto diferido o retardado) significa que la
instrucción que sigue al salto siempre se ejecuta

Esta optimización es la que emplea MIPS
27
Riesgos de control
ISI374 - Arquitectura de Computadores (2010-1)
Comportamiento del salto diferido (delayed branch)
Es trabajo del compilador lograr que la instrucción que ocupa el hueco
diferido sea válida y útil
28
Riesgos de control
ISI374 - Arquitectura de Computadores (2010-1)
Branch delay slot (Comentarios)
Como la instrucción que sigue al salto siempre se ejecuta:

Escenario del peor caso: insertar una burbuja en el hueco de salto retardado
porque no hay otra alternativa

Escenario del caso más favorable: es posible encontrar una instrucción
anterior al salto que pueda insertarse en el hueco de salto diferido sin que el
flujo de programa se vea afectado
El reordenamiento de instrucciones es una práctica común para acelerar
programas
 El compilador debe ser muy hábil para encontrar las instrucciones adecuadas
 Normalmente el 50% de las veces se hallan estas instrucciones

29
Riesgos de control
Gestión del hueco de salto diferido por parte del compilador
add $s1, $s2, $s3
beq $s2, $zero, LBL
ISI374 - Arquitectura de Computadores (2010-1)

hueco de salto
. . .
LBL:
LBL:
sub
. .
add
beq
hueco de salto
se
transforma
en
beq $s2, $zero, LBL
add $s1, $s2, $s3
. . .
LBL:
$t4, $t5, $t6
.
$s1, $s2, $s3
$s1, $zero, LBL
se
transforma
en
LBL:
sub
LBLx:
. .
add
beq
$t4, $t5, $t6
.
$s1, $s2, $s3
$s1, $zero, LBLx
sub $t4, $t5, $t6

add $s1, $s2, $s3
beq $s1, $zero, LBL
hueco de salto
or $t1, $t2, $t3
. . .
LBL:
sub $t4, $t5, $t6
se
transforma
en
add $s1, $s2, $s3
beq $s1, $zero, LBL
or $t1, $t2, $t3
. . .
LBL:
sub $t4, $t5, $t6
En las dos últimas opciones, la ejecución de la instrucción que se mueve no debe
producir problemas si el salto va en la dirección contraria a la esperada
30
Lecturas recomendadas
ISI374 - Arquitectura de Computadores (2010-1)

Computer organization and design. The hardware/software Interface, 3rd ed.,
Chapter 5. D. Patterson & J. Hennessy. Morgan Kaufmann Publishers