Author
phamquynh
View
230
Download
0
Embed Size (px)
TEMA 3 PROCESADORES VLIW (Very Long
Instruction Word)
• Esta arquitectura de CPU implementa una forma de paralelismo a nivel de instrucción. Es similar a las arquitecturas superescalares, ambas usan varias unidades funcionales (por ejemplo varias ALUs, varios multiplicadores, etc) para lograr ese paralelismo.
PROCESADORES VLIW
• Los procesadores con arquitecturas VLIW se caracterizan, como su nombre indica, por tener juegos de mini-instrucciones muy simples, tipo RISC, pero muy grandes en cuanto al tamaño de la instrucción que las contiene.
PROCESADORES VLIW
• En cada instrucción se especifica el estado de todas y cada una de las unidades funcionales del sistema, con el objetivo de simplificar el diseño del hardware al dejar todo el trabajo de planificar el código en manos del programador/compilador(tiene información comportamiento dinámico del programa: bucles, saltos, condiciones, dependencias de datos…)
PLANIFICACIÓN ESTÁTICA PROCESADOR VLIW
• Para una máquina superescalar "normal“: Se iniciaría simultáneamente la multiplicación (i2) y la suma (i1) en unidades diferentes y, una vez acabada la suma, ejecutaría la multiplicación (i3). Todo este trabajo de planificación lo llevaría a cabo la circuitería interna del microprocesador.
• En una máquina VLIW, toda la planificación anterior la haría el compilador (o el propio programador si programa en ensamblador), y el código resultante sería algo así: – INCONVENIENTES:
• código objeto mayor proc. superescalar (necesidad de introducir NOP)
• No se aprovechan al máximo las unidades funcionales pudiendo estar ociosas (INTENTAR MANIPULAR BUCLES)
Problema 2 1ª semana 2012
PLANIFICACIÓN ESTÁTICA PROCESADOR VLIW
• Los bloques básicos se componen de un grupo de instrucciones que forman una línea de ejecución secuencial (no hay instrucciones de salto salvo en la última)
• La interconexión de las entradas y salidas de los diferentes bloques básicos conforman el diagrama de flujo de control
PLANIFICACIÓN ESTÁTICA PROCESADOR VLIW
• Las instrucciones de cada bloque se combinan para formar instrucciones VLIW. Para ello se recurre al grafo de flujo de datos que tiene asociado cada bloque
Carga/almacenamiento 2 ciclos (segmentada) Coma flotante 3 ciclos (segmentada) Enteras y saltos 1 ciclo
2
3.6 DESENRROLLAMIENTO DE BUCLE (planificación local reordenar un bloque
básico)
APROVECHA EL PARALELISMO DEL CUERPO DEL BUCLE CON RENOMBRAMIENTOS Y AJUSTANDO EL CÓDIGO DE TERMINACIÓN
El código suma una constante (almacenada en F2) a todos los
elementos de un vector almacenado en memoria con elementos de doble
precisión (8 bytes). El índice para acceder a los elementos es R1 que inicialmente está situado en el último elemento del
vector. El último elemento a procesar e encuentra en la posición 8 de la memoria
Renombrado de registros
X[i]=X[i]+a
3.6 DESENRROLLAMIENTO DE BUCLE Agrupación por tipo de operación(para ilustrar mejor el
paralelismo)
3.6 DESENRROLLAMIENTO DE BUCLE
Carga/almacenamiento 2 ciclos (segmentada) Coma flotante 3 ciclos (segmentada) Enteras y saltos 1 ciclo
-40 -32 -24 -16 -8 0
R1
3.6 DESENRROLLAMIENTO
DE BUCLE
Ante un vector de 1000 elementos, el VLIW sin recurrir a planificación local tardaría 6000 ciclos( 1000 iteraciones * 6 ciclos). Por el desenrrollamiento tardaríamos 2250 ciclos (250 iteraciones*9 ciclos)
Sin desenrrollamiento
X[i]=X[i]+a
3.7 SEGMENTACIÓN SOFTWARE (planificación local reordenar un
bloque básico) Es una técnica que intenta
aprovechar el paralelismo a nivel de instrucción en el cuerpo de algunos bucles (igual que el desenrrollamiento de bucles)
• Prólogo: instrucciones de
arranque • Cuerpo del bucle • Epílogo (terminación tras
su finalización)
3.7 SEGMENTACIÓN SOFTWARE (ej2 1ªsemana
2012) • Prólogo: instrucciones de
arranque
• Cuerpo del bucle
• Epílogo (terminación tras su finalización)
Carga/almacenamiento 2 ciclos (segmentada) Coma flotante 3 ciclos (segmentada) Enteras y saltos 1 ciclo
3.7 SEGMENTACIÓN SOFTWARE
Carga/almacenamiento 2 ciclos (segmentada) Coma flotante 3 ciclos (segmentada) Enteras y saltos 1 ciclo
-40(R1) -32(R1) -24(R1) -16(R1) -8(R1) 0(R1)
LOAD SD ADDD
La última posición donde se escribe es en 8
3.7 SEGMENTACIÓN SOFTWARE
{ R1:=R1-8; }
3.7 SEGMENTACIÓN SOFTWARE
{ R1:=R1-8; }
8 16 24 32 40 48
R1
LOAD SD ADDD
3.7 SEGMENTACIÓN SOFTWARE
{ R1:=R1-8; }
8 16 24 32 40 48 0
R1
LOAD SD ADDD
3.8 PLANIFICACIÓN DE TRAZAS
• Selección de traza (selección de la secuencia de ejecución más probable)
• Compactación (minimizar número de operaciones vacías en las instrucciones VLIW)
Técnica de planificación global que trata una secuencia de bloques básicos como si fuesen uno, y a partir de él producir código VLIW más óptimo
3.8 PLANIFICACIÓN DE TRAZAS
Duración: 12 ciclos (1,2,3,4,5,6,7,8,9,10,16,17)*p + 12 ciclos (1,2,3,4,10,11,12,13,14,15,16,17)*(1-p) donde p es la probabilidad de que se cumpla el if
3.8 PLANIFICACIÓN DE TRAZAS Desplazamiento de operaciones entre
bloques
3
3.8 PLANIFICACIÓN
DE TRAZAS
Duración: 10 ciclos (1,2,3,4,5,6,7,8,15,16 )*p+ 15 ciclos (1,2,3,4,5,6,8,9,10,11,12,13,14,15,16) *(1-p) donde p es la probabilidad del if
3.8 PLANIFICACIÓN DE TRAZAS
Duración: 9 ciclos(1,2,3,4,5,6,7,10,11) *p +10 ciclos (1,2,3,4,5,7,8,9,10,11) *(1-p) donde p es la probabilidad de que se cumpla el if
Renombrado de registros (Y[i])
3.9 OPERACIONES CON PREDICADO
Con el objeto de poder tratar operaciones condicionales como cualquier otra instrucción (evitamos las ramas con pequeño bloques básicos a un bloque extendido)
Código intermedio usando predicados
3.9 OPERACIONES CON PREDICADO
Código intermedio
3.9 OPERACIONES CON PREDICADO Código VLIW generado del código intermedio
u.f. operaciones enteras 1 ciclo u.f. operaciones coma flotante 3 ciclos u.f. cargas/almacenamientos 2 ciclos u.f. para saltos 1 hueco de retardo
3.9 OPERACIONES CON PREDICADO Código VLIW con operaciones
condicionadas
u.f. operaciones enteras 1 ciclo u.f. operaciones coma flotante 3 ciclos u.f. cargas/almacenamientos 2 ciclos u.f. para saltos 1 hueco de retardo
3.9 OPERACIONES CON PREDICADO
Ej 3 septiembre
reserva 2013
ADDI R4,Ra,800 ; longitud vector A LD F6,0(Rb); constante b LD F7,0(Rd) ;constante d Inicio: LD F5, 0(Ra) PRED_GT P1,P2,F5,11 LD F8,0(Rx) ADDD F8,F8,F6 (P1) ;se suma b ADDD F8, F8,F7 (P2);se suma d SD 0(Rx),F8 ADDI Ra,Ra,#8 ADDI Rx,Rx,#8 SGE R9,Ra,R4 BNEZ R9,Inicio
Ej 3 septiembre reserva 2013 Apartado b
ADDI R4,Ra,800 ; longitud vector A LD F6,0(Rb); constante b LD F7,0(Rd) ;constante d Inicio: LD F5, 0(Ra) PRED_GT P1,P2,F5,11 LD F8,0(Rx) ADDD F8,F8,F6 (P1) ;se suma b ADDD F8, F8,F7 (P2);se suma d SD 0(Rx),F8 ADDI Ra,Ra,#8 ADDI Rx,Rx,#8 SGE R9,Ra,R4 BNEZ R9,Inicio
Carga/almacenamiento
Coma flotante Entera
LD F6,0(Rb) ADDI R4,Ra,800
LD F7,0(Rd)
LD F5, 0(Ra)
LD F8,0(Rx) PRED_GT P1,P2,F5,11
ADDD F8,F8,F6 (P1)
ADDD F8, F8,F7(P2) ADDI Ra,Ra,#8
ADDI Rx,Rx,#8
SGE R9,Ra,R4
SD 0(Rx),F8 BNEZ R9,Inicio
Ej 3 septiembre reserva 2013
Apartado b optimizado
ADDI R4,Ra,800 ; longitud vector A LD F6,0(Rb); constante b LD F7,0(Rd) ;constante d Inicio: LD F5, 0(Ra) PRED_GT P1,P2,F5,11 LD F8,0(Rx) ADDD F8,F8,F6 (P1) ;se suma b ADDD F8, F8,F7 (P2);se suma d SD 0(Rx),F8 ADDI Ra,Ra,#8 ADDI Rx,Rx,#8 SGE R9,Ra,R4 BNEZ R9,Inicio
Carga/almacenamiento
Coma flotante Entera
LD F6,0(Rb) ADDI R4,Ra,800
LD F7,0(Rd)
LD F5, 0(Ra)
LD F8,0(Rx)
PRED_GT P1,P2,F5,11
ADDD F8,F8,F6 (P1)
ADDD F8, F8,F7(P2) ADDI Ra,Ra,#8
ADDI Rx,Rx,#8
SGE R9,Ra,R4
SD 0(Rx),F8 BNEZ R9,Inicio