Paralelismo en monoprocesadores. Procesadores VLIW

Paralelismo en monoprocesadores Procesadores VLIW Profesor: Mag. Marcelo Tosini Cátedra: Arquitectura de Computadoras y técnicas Digitales Carrera: I

11 downloads 92 Views 964KB Size

Recommend Stories


PARALELISMO EN EL PLANO
Apuntes de Geometría C. Penalva; G. Torregrosa PARALELISMO EN EL PLANO Introducción Veamos cómo pueden estar situadas dos rectas distintas en el es

PARALELISMO RECTA RECTA
PARALELISMO RECTA RECTA Dos rectas paralelas en el espacio son tambien paralelas en proyecciones. Si dos rectas son paralelas en el espacio sus proyec

Procesadores AMD
Microprocesador. Chip. Duron. Athlon. Rendimiento. Kernel. Socket

Story Transcript

Paralelismo en monoprocesadores Procesadores VLIW

Profesor: Mag. Marcelo Tosini Cátedra: Arquitectura de Computadoras y técnicas Digitales Carrera: Ingeniería de Sistemas Ciclo: 4º año

Arquitectura VLIW básica • Data de principios de los años 70 • Muy apoyada en la tecnología de compiladores que optimicen el código • Una instrucción especifica varias operacíones agrupadas en un formato largo de instrucción con longitudes desde 128 a 1024 bits • La planificación de ejecución de las operaciones es externa al procesador • El rendimiento del procesador queda determinado por la calidad del compilador

Formato de instrucciones Procesador tradicional

100 inst inst11(op1) (op1) 101 inst 2 (op2) inst 2 (op2) 102 inst inst33(op3) (op3) 103 inst inst44(op4) (op4) 104 inst inst55(op5) (op5) 105 inst inst66(op6) (op6) 106 inst inst77(op7) (op7) 107 inst inst88(op8) (op8) 108 inst inst99(op9) (op9) 109 inst inst10 10(op10) (op10) una instrucción = una operación

Procesador VLIW

100 101 102 103 104 105 106 107 108 109

operación NOP operación operación11 NOP operación55 NOP operación NOP operación22 operación operación33 operación NOP operación operación66 NOP operación77 operación NOP NOP operación44 NOP NOP NOP operación NOP operación88 operación operación10 10 NOP NOP operación NOP NOP operación99 NOP NOP NOP NOP NOP NOP NOP operación NOP operación11 11 operación operación12 12 operación NOP operación14 14 operación operación16 16 NOP operación NOP operación operación13 13 NOP operación15 15 una instrucción = varias operaciones

VLIW vs. Superescalar 32-64 bits FX 1 0 1 2 3 4 5

Dynamic Dynamic scheduler scheduler

FX 2

Superescalar

FP

6

Instruction memory

load/ store

128-512 bits FX 1 0 1

FX 2

2 3 4

FP

5 6

Instruction memory

load/ store

VLIW

VLIW vs. Superescalar Diferente división de tareas entre software (compilador) y hardware (procesador)

Optimización Optimización (compilador) (compilador)

r ala sc re pe Su

Análisis Análisisde de dependencias dependencias (compilador) (compilador)

Planificación Planificaciónyy reserva reservade derecursos recursos (compilador) (compilador)

Análisis Análisisde de dependencias dependencias (procesador) (procesador)

Planificación Planificaciónyy reserva reservade derecursos recursos (procesador) (procesador)

IW VL

programa programa

Ejecución Ejecución (procesador) (procesador)

VLIW vs. Superescalar En VLIW no se puede determinar si hay dependencias en ciertos casos Ejemplo: lw sw

r1, 100(r2) r3, 0(r4)

; si r2 = r4+100, hay dependencia!!!

Procesador Procesadorsuperescalar superescalar comprueba compruebasisila ladirección direcciónr2 r2++100 100es esigual igualaar4 r4++00 ••igual => igual =>secuencializa secuencializalas lasinstrucciones instrucciones ••NO NOigual igual=> =>paraleliza paralelizalas lasinstrucciones instrucciones Procesador ProcesadorVLIW VLIW No Nopuede puededeterminarlo determinarlo=> =>el elcompilador compiladorsiempre siempresecuencializa secuencializa

Arquitectura VLIW: ventajas • La planificación de la ejecución estática de instrucciones es realizada por el compilador: • Menos lógica en la unidad de control del procesador • Mayor frecuencia de reloj (organización mas sencilla) • Mayor disponibilidad de especio para otras unidades (Pe: unidades funcionales) • Es una arquitectura muy difundida en circuitos embebidos • DSP´s • Multimedia (placas de sonido, video, etc.)

Arquitectura VLIW: Limitaciones • Tamaño del código • Mucho desperdicio de memoria por instrucciones NOP • Compatibilidad de código objeto • Hay que recompilar todo el código fuente para cada nueva versión de procesador • Baja ocupación de las unidades funcionales • Conflictos en el acceso al banco de registros desde varias unidades • Conflictos de predicción estática de accesos a memoria • Imposibilidad de determinación de latencias en caso de posibles fallos en accesos a Ram o caché • Dificultades en la predicción estática de saltos

Tamaño del código nop

adda

nop

nop

load

nop

addb

mul

store

sub

nop

nop

nop

nop

addc

nop

nop

nop

nop

nop

A

B

Formato de instrucción VLIW desempaquetado •útil para ejecución en las UF

C

D

Formato de instrucción VLIW empaquetado •útil para almacenar en la memoria

1 B 0 A

adda store

0 A 1 B

load sub

0 C 1 C

addb addc

1 D 1 A

0

Separador de instrucciones VLIW (1 = última instrucción)

B

Unidad funcional en la que se ejecutará la instrucción

mul nop

Tamaño del código En qué momento se descomprimen las instrucciones de memoria? • Carga en la I-Caché • Transferencia de bloques a la cache es lenta (bus de acceso a RAM cuello de botella) • El algoritmo de compresión puede ser complejo ya que se dispone de tiempo • se ocupa mucho especio de cache si las instrucciones están descomprimidas • Lectura de la I-Caché (Fetching) • En la caché se mantienen las instrucciones empaquetadas •La descompresión en la etapa de fetching puede ser lenta (agrega una o más etapas de segmentación al proceso)

Ocupación de las unidades funcionales Meta principal: Mantener ocupadas todas las unidades funcionales Problema: Para N unidades funcionales usables en cada ciclo de reloj • Se leen 2 operandos fuente por unidad • Se escribe un resultado por unidad

UF1 Register Bank

UF2 … UFn

Ocupación de las unidades funcionales Arquitectura del banco de registros • Área banco de registros ≈ cuadrado del número de puertos (de entrada o salida) • Diseño limitado por el número de puertos read1 A read1 B

read1 A

write1

read1 B

read2 A

write1

read2 B write2 Dout2 B

Dout2 A

Dout1 B

Dout1 A

Dout1 B

Dout1 A

Ocupación de las unidades funcionales Arquitectura del banco de registros • Tiempo de acceso al banco de registros proporcional al número de registros • Al crecer las áreas de celda básica y decodificadores hay mayores retardos

• A partir de aproximadamente 20 puertos (I/O) la velocidad se degrada bastante • Aproximadamente 14 lecturas y 7 escrituras => hasta 7 unidades funcionales como máximo

Ocupación de las unidades funcionales Optimización de la arquitectura del banco de registros • Particionar el banco de registros en bancos locales a cada unidad funcional y con canales de comunicación globales Bus global

Banco Bancode de registros registros

Banco Bancode de registros registros

Banco Bancode de registros registros

Banco Bancode de registros registros

UF1 UF1

UF2 UF2

UF3 UF3

UFn UFn

Planificación del compilador • La eficiencia del compilador influye mucho en el rendimiento final de la arquitectura Rendimiento alcanzado por los compiladores actuales es inferior al rendimiento potencial máximo que alcanza la arquitectura • Código generado por el compilador muy dependiente de la arquitectura VLIW de destino Ante actualizaciones de hardware es necesario reescribir el compilador (mayores costos de actualización) • Para optimizar mejor el código es útil que el programador ayude al compilador Lenguajes deben usar meta comandos (pragmas) especiales

Planificación del compilador Optimizaciones del compilador: Análisis global del código • Modificación del código fuente para incrementar el paralelismo a nivel de instrucción • Aplicación de técnicas usadas para superescalares: • • • •

Desenrollamiento de lazos Segmantación de software Actualización de referencias Renombre de registros

Planificación del compilador Ejemplo: Suma de un valor a un arreglo

En ensamblador:

lazo:

ld addd sd subi bnez

for (i=10; i>0; i--) x[i] = x[i] + s;

f0, 0(r1) f4, f0, f2 f4, 0(r1) r1, r1, #8 r1, lazo

; f0 = x[i] ; f4 = f0 + s ; x[i] = f4 ; i-; if i ≠ 0 goto lazo

Suponer un procesador VLIW de 3 unidades funcionales:

load/store load/store&&saltos saltos 2 ciclos de reloj

ALU ALUFX FX

ALU ALUFP FP

2 ciclos de reloj

3 ciclos de reloj

Planificación del compilador Instrucciones VLIW del programa Instr. Instr.

load/store load/store&&saltos saltos

ALU ALUFX FX

ALU ALUFP FP

11

ld ldf0, f0, 0(r1) 0(r1)

nop nop

nop nop

22

nop nop

nop nop

nop nop

33

nop nop

nop nop

addd adddf4, f4,f0, f0,f2 f2

44

nop nop

nop nop

nop nop

55

nop nop

nop nop

nop nop

66

sd sdf4, f4,0(r1) 0(r1)

subi subir1, r1,r1, r1,#8 #8

nop nop

77

nop nop

nop nop

nop nop

88

bnez bnezr1, r1,lazo lazo

nop nop

nop nop

99

nop nop

nop nop

nop nop

Planificación del compilador Replicación de código

lazo:

ld addd sd subi bnez

f0, 0(r1) f4, f0, f2 f4, 0(r1) r1, r1, #8 r1, lazo

lazo:

ld addd sd

f0, 0(r1) f4, f0, f2 f4, 0(r1)

ld addd sd

f0, 0(r1-8) f8, f6, f2 f4, 0(r1-8)

ld addd sd

f0, 0(r1-16) f12, f10, f2 f4, 0(r1-16)

ld addd sd

f0, 0(r1-24) f16, f14, f2 f4, 0(r1-24)

ld addd sd

f0, 0(r1-32) f20, f18, f2 f4, 0(r1-32)

subi bnez

r1, r1, #8 r1, lazo

Planificación del compilador Código VLIW optimizado del programa Instr. Instr.

load/store load/store&&saltos saltos

ALU ALUFX FX

ALU ALUFP FP

11 22

ldldf0, f0,0(r1) 0(r1) ldldf0, f0,0(r1-8) 0(r1-8)

nop nop nop nop

nop nop nop nop

33 44

ldldf0, f0,0(r1-16) 0(r1-16) ldldf0, f0,0(r1-24) 0(r1-24)

nop nop nop nop

addd adddf4, f4,f0, f0,f2 f2 addd adddf8, f8,f6, f6,f2 f2

55 66

ldldf0, f0,0(r1-32) 0(r1-32) sd sdf0, f0,0(r1) 0(r1)

nop nop nop nop

addd adddf12, f12,f10, f10,f2 f2 addd adddf16, f16,f14, f14,f2 f2

77 88

sd sdf0, f0,0(r1-8) 0(r1-8) sd sdf0, f0,0(r1-16) 0(r1-16)

nop nop nop nop

addd adddf20, f20,f18, f18,f2 f2 nop nop

99 10 10

sd sdf0, f0,0(r1-24) 0(r1-24) sd sdf0, f0,0(r1-32) 0(r1-32)

nop nop subi subir1, r1,r1, r1,#8 #8

nop nop nop nop

11 11 12 12

nop nop bnez bnezr1, r1,lazo lazo

nop nop nop nop

nop nop nop nop

13 13

nop nop

nop nop

nop nop

Instrucciones predicadas Ante una bifurcación el compilador asigna a las instrucciones de las dos ramas posibles un predicado a cada una. De esta manera es posible identificar la rama inválida cuando se resuelve la condición del branch Las instrucciones de ambas ramas pueden ejecutarse en paralelo ya que no poseen interdependencias

inst inst11 inst inst22 ifif(cond) (cond) inst inst44 inst inst55 inst inst66 else else inst inst77 inst inst88 inst inst99 Código fuente

sigue: sigue:

inst inst11 inst inst22 br br(cond), (cond),sigue sigue P1 P1: :inst inst44 P1 P1::inst inst55 P1 P1::inst inst66 ….. ….. P2 P2::inst inst77 P2 P2::inst inst88 P2 P2::inst inst99

Código ensamblador

inst inst11

inst inst22

branch branch

P1:inst P1:inst44 P2:inst P2:inst77 P1:inst P1:inst55 P1:inst P1:inst66 P2:inst P2:inst88 P2:inst P2:inst99 Código VLIW predicado

Instrucciones predicadas Ejemplo: ifif(a (a

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.