slide1 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
ARQUITECTURAS PARALELAS Computación de altas prestaciones Idoia Cearreta idoia.cearreta@ehu.es PowerPoint Presentation
Download Presentation
ARQUITECTURAS PARALELAS Computación de altas prestaciones Idoia Cearreta idoia.cearreta@ehu.es

Loading in 2 Seconds...

play fullscreen
1 / 93

ARQUITECTURAS PARALELAS Computación de altas prestaciones Idoia Cearreta idoia.cearreta@ehu.es - PowerPoint PPT Presentation


  • 96 Views
  • Uploaded on

ARQUITECTURAS PARALELAS Computación de altas prestaciones Idoia Cearreta idoia.cearreta@ehu.es www.sc.ehu.es/arpar K onputagailuen A rkitektura eta T eknologia saila I nformatika F akultatea – E uskal H erriko U nibertsitatea. ARQUITECTURAS PARALELAS. 0. Introducción.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'ARQUITECTURAS PARALELAS Computación de altas prestaciones Idoia Cearreta idoia.cearreta@ehu.es' - eros


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide1
ARQUITECTURAS PARALELAS
  • Computación de altas prestaciones
  • Idoia Cearreta
  • idoia.cearreta@ehu.es
  • www.sc.ehu.es/arpar
  • Konputagailuen Arkitektura eta Teknologia saila
  • Informatika Fakultatea – Euskal Herriko Unibertsitatea

Arquitecturas Paralelas 12-13

slide2

ARQUITECTURAS PARALELAS

  • 0. Introducción.
  • 1. Computadores vectoriales.
  • 2.Computadores paralelos (conceptos básicos).
  • 3. Coherencia de los datos (SMP).
  • 4. Sincronización de procesos (SMP).
  • 5. Consistencia de la memoria.
  • 6. Red de comunicación. Paso de mensajes.
  • 7.Coherencia de los datos (DSM).
  • 8. Paralelización de bucles, reparto de tareas.
  • 9. Computadores paralelos de alta velocidad. Programación paralela: OpenMP yMPI (introd.).
slide3
0. Introducción

Arquitecturas Paralelas 12-13

introducci n
Introducción

La evolución de los computadores se basa principalmente en tres factores:

 avances en la tecnología electrónica

 avances enel diseño de laarquitectura de sistemas

 avances en el desarrollo desoftware de sistemas

Arquitecturas Paralelas 12-13

introducci n1
Introducción

Avances en la tecnología electrónica

número de transistores > 1.000 M

frecuencia del reloj > 1 GHz

velocidad de conmutación

 tecnología de empaquetamiento

 capacidad de memoria

 tiempos de comunicación entre elementos/chips

Arquitecturas Paralelas 12-13

introducci n2
Introducción

Avances en la arquitectura de sistemas

 arquitecturas RISC

 jerarquía de memoria

unidades funcionales específicas

registros

segmentación (ILP)

desorden (Tomasulo)

superescalares - VLIW / ejecución especulativa

multithreading

multicore on chip

Arquitecturas Paralelas 12-13

introducci n3
Introducción

Avances en el software de sistemas

OpenMP

MPI

UPC

OpenCL / Cuda

...

list scheduling

loop unrolling

software pipelining

trace scheduling

EPIC...

Arquitecturas Paralelas 12-13

introducci n4
Introducción

Velocidad de cálculo del procesador escalar:

> 1 Gflop/s109 operaciones de coma flotante por segundo

Recordad:

Mega (M) 106 Giga (G) 109 Tera (T) 1012 Peta (P) 1015

micro (µ) 10-6 nano (n) 10-9 pico (p) 10-12 femto (f) 10-15

Dicha velocidad no es suficiente para algunas aplicaciones técnicas/científicas: meteorología, genética, astrofísica, aeronaútica, geofísica, bases de datos grandes...

Arquitecturas Paralelas 12-13

introducci n5
Introducción

Hennessy – Patterson, 4. ed.

20% anual

52% anual

Arquitecturas Paralelas 12-13

introducci n6
Introducción

Solución: paralelismo

- Multicore(2-8 procesadores por chip)

- muchos (?) procesadores trabajando conjuntamente

P = 10.000 proc. >> 10.000 GF/s??

 ¿Cómo utilizar P procesadores?

una red / mera repetición /

sistema paralelo

Arquitecturas Paralelas 12-13

introducci n7

Flujo de datos

1n

SIMD

Procesadores en array

Computadores vectoriales

1

Flujo de

instrucciones

MIMD

memoria compartida

memoria privada

n

Introducción

Clasificación de Flynn

SISD

Arquitecturas Paralelas 12-13

slide12
1.Computadores vectoriales

- Introducción

- Dependencias de datos

- Dependencias estructurales

- Medidas de rendimiento

- Técnicas de compilación

Arquitecturas Paralelas 12-13

cv introducci n

Código escalar

CV: introducción

do i = 0, N-1

C(i) = A(i) + B(i)

enddo

buc: FLD F1,A(R1)

FLD F2,B(R1)

FADD F3,F2,F1

FST C(R1),F3

ADDI R1,R1,#8

SUBI R2,R2,#1

BNZ R2,buc

TE≈ 7Nciclos

Arquitecturas Paralelas 12-13

cv introducci n1

Código vectorial

LV V1,A(R1)

LV V2,B(R1)

ADDV V3,V2,V1

SV C(R1),V3

CV: introducción

do i = 0, N-1

C(i) = A(i) + B(i)

enddo

Vectores:

- Dirección de comienzo

- longitud

- paso (stride)

2000 – 2008 – 2016 – 2024 – ... – 2120

dir. com. = 2000 / longitud = 16 / paso = 8

Arquitecturas Paralelas 12-13

cv introducci n2

N

x

CV: introducción

LV V1,A(R1)

BD L AM M M M E

AMM M M E

AMM M M E

... ... ... ...

AMM M M E

BD L AM M M M E E ... ... E

Arquitecturas Paralelas 12-13

cv introducci n3

LV V1,A(R1)

LV V2,B(R1)

ADDV V3,V2,V1

SV C(R1),V3

BD L AMMMME ... ... E

BD LAMMMME ... ... E

BD .... LAAE ... ... E

BDLAM...L MMME.... ...E

N

ti

CV: introducción

BDLAM.... .L MMME...... E

N = 128, ti = 14

TE = 896 ciclos

Tv = 142 ciclos

Tv≈ ti + Nciclos

TE ≈ 7N ciclos

≈ /6

Arquitecturas Paralelas 12-13

cv introducci n4

LV V1,A(R1)

LV V2,B(R1)

ADDV V3,V2,V1

SV C(R1),V3

BD L AMMMME ... ... E

BD LAMMMME ... ... E

BD .... LAAE ... ... E

BDLAM...L MMME.... ...E

CV: introducción

Problemas

Memoria: segmentada / núm. buses / módulos

Unidades funcionales: segmentadas / muchas

Reg. vectoriales: tamaño / cantidad / acceso

Arquitecturas Paralelas 12-13

cv introducci n5
CV: introducción

Problemas

Programas: ¿Todo operaciones vectoriales?

¿Se pueden vectorizar siempre?

do i = 0, N-1

A(i) = A(i) + 1

enddo

¡Hay que desordenarel código original!

escalarmente: L0 +0 S0 / L1 +1 S1 / ... / LN-1 +N-1 SN-1

vectorialmente: L0 L1 ... LN-1 / +0 +1 ... +N-1 / S0 S1 ... SN-1

Arquitecturas Paralelas 12-13

cv introducci n6

Unidad funcional

Reg.

Reg.

Procesador escalar (completo)

Memoria

(op.)

Control del procesador vectorial

Unidad de direcciones (datos)

CV: introducción

Esquema lógico de arquitectura vectorial (tomasulo)

Arquitecturas Paralelas 12-13

cv introducci n7
CV: introducción

Lenguaje máquina

LV Vi,A(Rj) Vi:= M(A+Rj)

SV A(Rj),Vi M(A+Rj):= Vi

OPV Vi,Vj,Vk Vi:= Vj OP Vk

OPVS Vi,Vj,Fk Vi:= Vj OP Fk

OPVI Vi,Vj,#k Vi:= Vj OP #k

VL→ longitud del vector VS→ paso del vector

MOVI VL,#64

MOVI VS,#8

LV V1,A(R1)

Arquitecturas Paralelas 12-13

cv dependencias de datos
CV: dependencias de datos

Cuando una instrucción necesita el resultado de una instrucción previa

LV V1,A(R1)

ADDVI V2,V1,#1

SV A(R1),V2

do i = 0, N-1

A(i) = A(i) + 1

enddo

- esperar a que el vector completo esté en un registro y leer a continuación

- hacer cortocircuitoE → L, y leer los operandos tan pronto como se pueda: ENCADENAMIENTO (chaining)

Arquitecturas Paralelas 12-13

cv dependencias de datos1

LV

ADDVI

N

SV

N

N

CV: dependencias de datos

Sin encadenamiento

LV V1,A(R1)

ADDVI V2,V1,#1

SV A(R1),V2

BD L AM M M M E ... E

BD . . . . . ...L A A E ... E

BDLAM.. ... . . . . . . L M M M E .. . E

TV = 13 + 3N

Arquitecturas Paralelas 12-13

cv dependencias de datos2

LV V1,A(R1)

ADDVI V2,V1,#1

SV A(R1),V2

BD L AM M M M E ... ... ... ...E

LV

ADDVI

SV

N

CV: dependencias de datos

Con encadenamiento

BD . . .

L A A E ... ... ... E

BDLAM.. .

L M M M E ... ...E

Tv = 13 + N

Arquitecturas Paralelas 12-13

cv dependencias de datos3

BD L AM M M M E ... ... ... ... E

BDL AMM M M E ... ... ... ... E

CV: dependencias de datos

Encadenaminto con dos instrucc.: C = A + B

LV V1,A(R1)

LV V2,B(R1)

ADDV V3,V2,V1

SV C(R1),V3

BD . . . .

L A A E ... ... ... E

BDLAM.. . .

L M M M E ... ...E

En general, un operando de la unidad funcional (bus) y el otro del banco de registros (se está escribiendo o está escrito)

Arquitecturas Paralelas 12-13

cv dependencias de datos4
CV: dependencias de datos

Tablas de ejecución (A=A+1)

Sin encadenamiento

inic. lat. dato 1 dato N

LV V1,A(R1)

ADDVI V2,V1,#1

SV A(R1),V2

3

3

6+1

6+N

6+N+1

2

9+N+1

9+2N

9+2N+1

3

13+2N+1

13+3N

Con encadenamiento

inic. lat. dato 1 dato N

LV V1,A(R1)

ADDVI V2,V1,#1

SV A(R1),V2

3

3

6+1

6+N

[7]

2

9+1

9+N

[10]

3

13+1

13+N

Arquitecturas Paralelas 12-13

cv dependencias de datos5

inic. lat. dato 1 dato N

LV V1,A(R1)

LV V2,B(R1)

ADDV V3,V2,V1

SV C(R1),V3

Sin encadenam.

inic. lat. dato 1 dato N

LV V1,A(R1)

LV V2,B(R1)

ADDV V3,V2,V1

SV C(R1),V3

Con encadenam.

CV: dependencias de datos

Tablas de ejecución (C=A+B)

3

3

6+1

6+N

4

3

7+1

7+N

7+N+1

2

10+N+1

10+2N

10+2N+1

3

14+2N+1

14+3N

3

3

6+1

6+N

4

3

7+1

7+N

[8]

2

10+1

10+N

[11]

3

14+1

14+N

Arquitecturas Paralelas 12-13

cv dependencias estructurales
CV: dependencias estructurales

¿Están libres los recursos?

-unidades funcionales

ej: se ocuparán N ciclos

-registros vectoriales

ej: suficientes buses de lectura/escritura

- buses de memoria

-módulos de memoria

Si están ocupados se perderán muchos ciclos (N)

Arquitecturas Paralelas 12-13

cv dependencias estructurales1

LV V1,A(R1)

ADDVI V2,V1,#1

SV A(R1),V2

BD L AM M M M E ... ... ... ... E

BD . . . L A A E ... ... ... . E

LV

ADDVI

SV

CV: dependencias estructurales

Buses de memoria

¿Cuántos buses hay para acceder a memoria?

BDLAM.. . . ?

... .L M M ME ...

bus ocupado

Tv≈2N

Arquitecturas Paralelas 12-13

cv dependencias estructurales2
CV: dependencias estructurales

Un único bus de memoria(A = A + 1)

Con encadenamiento

inic. lat. dato 1 dato N

LV V1,A(R1)

ADDVI V2,V1,#1

SV A(R1),V2

3

3

6+1

6+N

[7]

2

9+1

9+N

[6+N]

3

9+N+1

9+2N

Arquitecturas Paralelas 12-13

cv dependencias estructurales3

3

3

6+1

6+N

6+N

3

9+N+1

9+2N

2

12+N+1

12+2N

3

12+2N+1

12+3N

LV

LV

Tv≈3N

ADDV

SV

CV: dependencias estructurales

Un único bus de memoria(C = A + B)

inic. lat. dato 1 dato N

LV V1,A(R1)

LV V2,B(R1)

ADDV V3,V2,V1

SV C(R1),V3

Con encadenamiento

[10+N]

[9+2N]

Arquitecturas Paralelas 12-13

cv dependencias estructurales4

inic. lat. dato 1 dato N

LV V1,A(R1)

LV V2,B(R1)

ADDV V3,V2,V1

SV C(R1),V3

3

3

6+1

6+N

4

3

7+1

7+N

Con encadenamiento

[8]

2

10+1

10+N

[6+N]

3

9+N+1

9+2N

LV

LV

Tv≈2 N

ADDV

SV

CV: dependencias estructurales

Dos buses de memoria(C = A + B)

Arquitecturas Paralelas 12-13

cv dependencias estructurales5
CV: dependencias estructurales

Módulos de memoria

¿Están libres los módulos de memoria que tenemos que utilizar?

Si no están libres, habrá que esperar antes de ejecutar las instrucciones LV/SV.

Conflictos:

- una instrucción de memoria consigo misma

- una instrucción de memoria con otra(s)

Arquitecturas Paralelas 12-13

cv dependencias estructurales6

4 5 6 7 8 9 10 11 12 13 14 15

m0

m1

m2

m3

CV: dependencias estructurales

Una única operación de memoria

tm = 3 ciclos

nm = 4

s = 1

M M M

M M M

M M M

M M M

M M M

M M M

M M M

M M M

M M M

M M M

M M M

M M M

¿Cuántos módulos se utilizan?

nm / MCD(nm,s)

Por lo tanto, no hay problemas, si

nm / MCD(nm,s) ≥ tm

Arquitecturas Paralelas 12-13

cv dependencias estructurales7

m0 m1 m2 m3

m0 m1 m2 m3

A00 A01 A02 A03

A10 A11 A12 A13

A20 A21 A22 A23

A30 A31 A32 A33

A00 A01 A02 A03

- A10 A11 A12

A13 -A20 A21

A22 A23 -A30

A31 A32 A33 -

CV: dependencias estructurales

Padding

s = 1, sin conflictos

s = 1, sin conflictos

Filas

s = 5, sin conflictos

s = 4, conflictos (mi)

Columnas

s = 5, sin conflictos

s = 6, conflictos

Diagonal p.

s = 3, sin conflictos

s = 4, conflictos

Diagonal m.

Arquitecturas Paralelas 12-13

cv dependencias estructurales8

inic. lat. dato 1 dato N

LV V1,A(R1)

ADDVI V2,V1,#1

SV A(R1),V2

3

3

6+1

6+N

[7]

2

9+1

9+N

[10]

-

- -

M M M

M M M

M M M

M M M

M M M

M M M

M M M

M M M

M M M

M M M

M M M

M M M

M M M

M M M

M M

M

CV: dependencias estructurales

Varias operaciones de memoria

4 5 6 7 8 910 11 12 13 14 15 16 17 18 19

m0

m1

m2

m3

m4

m5

m6

m7

M M M

M M M

M M M

M M

Arquitecturas Paralelas 12-13

cv dependencias estructurales9
CV: dependencias estructurales

¿Cuántos ciclos hay que esperar hasta que se libere el módulo que se quiere utilizar?

Hay que generar la lista de módulos ocupados:

1.calcular qué módulo va a comenzar a usar la instrucción j (en memoria desde el ciclo inij) en el ciclo inik :

(inik – inij) + módulo de inicioj

2.añadir por delante y por detrás tm-1 módulos

3. Si el módulo que va a utilizar la instrucción k está en la lista, esperar los ciclos indicados por la posición en la lista

Arquitecturas Paralelas 12-13

cv dependencias estructurales10
CV: dependencias estructurales

inic. mod_ocup. t_esp. lat. dato 1 dato N

LV V1,A(R1)

ADDVI V2,V1,#1

SV A(R1),V2

3

3

6+1

6+N

[7]

2

9+1

9+N

3

17+1

17+N

[10]

4

5, 6

- 7 -

0, 1

Arquitecturas Paralelas 12-13

cv dependencias estructurales11
CV: dependencias estructurales

Longitud de los registros (Lmax)

- ¿Qué hacemos si los vectores son más largos?

strip mining

do i = 0, N-1

A(i) = A(i) + 1

enddo

MOVI VS,#1

MOVI R1,#N

mas: MOV VL,R1

LV V1,A(R2)

ADDVI V2,V1,#1

SV A(R2),V2

ADDI R2,R2,#Lmax

SUBI R1,R1,#Lmax

BGTZ R1,mas

Tv =N/Lmax(ti + tbuc) + tv N

TV = 30 + 3N; N = 500; Lmax = 64; tbuc= 10

→ 8×(30+10) + 1.500 = 1.820 (+19%)

Arquitecturas Paralelas 12-13

cv velocidad de c lculo
CV: velocidad de cálculo

Se utilizan tres parámetros para medir la “velocidad”:

- Tiempo de ejecución(en ciclos o en segundos).

- Velocidad de cálculo: número de operaciones de coma flotante que se ejecutan por segundo.

- Factor de aceleración(speed-up): cuántas veces más rápida es la ejecución vectorial que la escalar.

Arquitecturas Paralelas 12-13

cv velocidad de c lculo1

300

Tv

250

200

pendiente = tv

150

100

TV = 30 + 2N

50

ti

N

0

0

25

50

75

100

125

150

CV: velocidad de cálculo

Tiempo de ejecución

esc.: TE = te N

vect.: Tv = ti + tv N

OJO: son ciclos!

Para darlo en segundos hay que multiplicarlo por el periodo (T).

Arquitecturas Paralelas 12-13

cv velocidad de c lculo2

R

R∞

R∞/2

N

N1/2

CV: velocidad de cálculo

Velocidad de cálculo

× OpCF × F MF/s

RV = N / TV = RV = N / (ti + tvN)

R∞ = 1 / tv × OpCF × F

N1/2 → R∞ / 2

N1/2= ti / tv

Arquitecturas Paralelas 12-13

cv velocidad de c lculo3
CV: velocidad de cálculo

Factor de aceleración (speed-up)

KV = TE / TV = te N / (ti + tvN)

K∞ = te / tv

Longitud mínima de vectores

TE = TV

te NV = ti + tv NV → NV = N1/2 / (K∞– 1)

Arquitecturas Paralelas 12-13

cv velocidad de c lculo4
CV: velocidad de cálculo

Influencia del código escalar: ley de Amdahl.

Una parte del código vectorialmente, f, y la otra, 1–f, escalarmente

TVE = f TV + (1-f) TE

KVE = TE / TVE

= TE / (f TV + (1–f) TE)

= KV / (KV – f (KV–1))

Arquitecturas Paralelas 12-13

cv velocidad de c lculo5

16

8

4

2

KB = ∞

CV: velocidad de cálculo

Ley deAmdahl

KVE = KV / (KV – f (KV–1))

Arquitecturas Paralelas 12-13

cv velocidad de c lculo6
CV: velocidad de cálculo

 Ley de Amdahl

Velocidad de cálculo:

RVE = N / TVE = N / (f TV + (1-f) TE) =

= N / (f (ti + tv N) + (1-f) te N) =

= N / (f (ti + tv N) + (1-f) K∞ tv N) [× OpCF × F]

Arquitecturas Paralelas 12-13

cv velocidad de c lculo7

16

ley de Amdahl

14

12

tv = 5 ns

te = 66,6 ns

10

factor de aceleración(normalizado)

8

6

tv= 10 ns

te= 33,3 ns

4

CRAY X-MP

tv = 10 ns

te = 66,6ns

2

0

0

0.2

0.4

0.6

0.8

1

f(factor de vectorización)

CV: velocidad de cálculo

Ley de Amdahl

Arquitecturas Paralelas 12-13

slide47
1.Computadores vectoriales

- Introducción

- Dependencias de datos

- Dependencias estructurales

- Velocidad de cálculo

- Técnicas de compilación

- dependencias de datos

- vectorización

- optimizaciones

Arquitecturas Paralelas 12-13

dependencias de datos
Dependencias de datos

Para poder ejecutar vectorialmente un bucle hay que cambiar el orden original de las instrucciones

escalarmente: L0 +0 S0 / L1 +1 S1 / ... / LN-1 +N-1 SN-1

vectorialmente: L0L1 ... LN-1 / +0 +1 ... +N-1 / S0 S1 ... SN-1

Ojo: se pueden desordenar las instrucciones, pero hay que respetar las dependencias de datos entre instrucciones!

Arquitecturas Paralelas 12-13

dependencias de datos1

dependencia

RAW(Rango-Dominio)

(i)A =

...

(j) = A

antidependencia

WAR(Dominio-Rango)

(i) = A

...

(j)A =

dependencia de salida

WAW(Rango-Rango)

(i)A =

...

(j)A =

ij

ij

i j

Dependencias de datos

dependencias reales

dependencias de “nombres”

Recordad: una dependencia implica un determinado orden entre las operaciones.

Arquitecturas Paralelas 12-13

dependencias de datos2
Dependencias de datos
  • Dado que trabajaremos con bucles las dependencias de datos se pueden dar entre instrucciones de cualquier iteración.
  • Si hay una dependencia entre las instrucciones de las iteraciones i1 e i2, diremos que hay una dependencia a distancia i2 – i1.

 Las dependencias se representan mediante dos grafos: grafo de dependencias y espacio de iteraciones.

Arquitecturas Paralelas 12-13

dependencias de datos3

A(2) = B(2) + 2

C(2) = A(0) + A(3)

A(3) = B(3) + 2

C(3) = A(1) + A(4)

A(4) = B(4) + 2

C(4) = A(2) + A(5)

A(5) = B(5) + 2

C(5) = A(3) + A(6)

i=2

1

i=3

A,2

2

A,1

i=4

i

Espacio de iteraciones

i=5

Dependencias de datos

do i = 2, N-2

1 A(i) = B(i) + 2

2 C(i) = A(i-2) + A(i+1)

enddo

  • Bucles de una dimensión

Grafo de dependencias

Arquitecturas Paralelas 12-13

dependencias de datos4

j

i

A(0,1)

1

A,(2,-1)

2

Dependencias de datos

Vectores de dos dimensiones

do i = 2, N-1

do j = 1, N-2

1 A(i,j) = A(i,j-1) * 2

2 C(i,j) = A(i-2,j+1) + 1

enddo

enddo

Arquitecturas Paralelas 12-13

dependencias de datos5

1

A,2

2

C,0

A,0

C,1

3

B,1

4

D,29

B,1

5

Dependencias de datos

Otro ejemplo

do i = 2, N-31

1 A(i) = B(i) + 2

2 C(i) = A(i-2)

3 D(i+1) = C(i) + C(i+1)

4 B(i+1) = B(i) + 1

5 D(i+30) = A(i)

enddo

Arquitecturas Paralelas 12-13

vectorizaci n
Vectorización

 Veamos mediante unos ejemplos cómo generar el código vectorial

Ejemplo 1

MOVI VL,#N

MOVI VS,#1

LV V1,B(R1)

LV V2,C(R1)

ADDV V3,V1,V2

SV A(R1),V3

do i = 0, N-1

A(i) = B(i) + C(i)

enddo

Arquitecturas Paralelas 12-13

vectorizaci n1

1

i

A,0

2

Vectorización

Ejemplo 2

MOVI VL,#N

MOVI VS,#1

LV V1,B(R1)

LV V2,C(R1)

ADDV V3,V1,V2

SV A(R1),V3

LV V2,A(R1)

SV D(R1),V3

MOVI VL,#N

MOVI VS,#1

LV V1,B(R1)

LV V2,C(R1)

ADDV V3,V1,V2

SV A(R1),V3

SV D(R1),V3

do i = 0, N-1

A(i) = B(i) + C(i)

D(i) = A(i)

enddo

Arquitecturas Paralelas 12-13

vectorizaci n2

1

i

A,1

2

Vectorización

Ejemplo 3

MOVI VL,#N-1

MOVI VS,#1

LV V1,B+1(R1)

LV V2,C+1(R1)

ADDV V3,V1,V2

SV A+1(R1),V3

LV V4,A(R1)

SV D+1(R1),V4

do i = 1, N-1

A(i) = B(i) + C(i)

D(i) = A(i-1)

enddo

Arquitecturas Paralelas 12-13

vectorizaci n3

MOVI VL,#N-1

MOVI VS,#1

LV V2,B(R1)

LV V3,C(R1)

ADDV V4,V2,V3

SV A(R1),V4

LV V1,A+1(R1)

SV D(R1),V1

MOVI VL,#N-1

MOVI VS,#1

LV V1,A+1(R1)

SV D(R1),V1

LV V2,B(R1)

LV V3,C(R1)

ADDV V4,V2,V3

SV A(R1),V4

1

i

A,1

2

Vectorización

Ejemplo 4

do i = 0, N-2

A(i) = B(i) + C(i)

D(i) = A(i+1)

enddo

Arquitecturas Paralelas 12-13

vectorizaci n4

1

1

A,0

A,3

2

B,1

Vectorización

Ejemplo 5

do i = 1, N-1

A(i) = B(i-1) + 1

B(i) = A(i)

enddo

do i = 3, N-1

A(i) = A(i-3) * 3

enddo

Arquitecturas Paralelas 12-13

vectorizaci n5

s=1

A

Vectorización

Ejemplo 6: vectores de dos dimensiones (filas)

do i = 0, N-1

do j = 0, M-1

A(i,j) = B(i,j) + C(i,j)

enddo

enddo

MOVI R2,#N

MOVI VL,#M

MOVI VS,#1

buc: LV V1,B(R1)

LV V2,C(R1)

ADDV V3,V1,V2

SV A(R1),V3

ADDI R1,R1,#M

SUBI R2,R2,#1

BNZ R2,buc

0,0 0,1 ... 0,M-1

1,0 1,1 ... 1,M-1

... ... ... ...

N-1,0 N-1,1 ... N-1,M-1

Arquitecturas Paralelas 12-13

vectorizaci n6

A

s=M

Vectorización

Ejemplo 6: vectores de dos dimensiones (columnas)

do i = 0, N-1

do j = 0, M-1

A(i,j) = B(i,j) + C(i,j)

enddo

enddo

MOVI R2,#M

MOVI VL,#N

MOVI VS,#M

buc: LV V1,B(R1)

LV V2,C(R1)

ADDV V3,V1,V2

SV A(R1),V3

ADDI R1,R1,#1

SUBI R2,R2,#1

BNZ R2,buc

0,0 0,1 ... 0,M-1

1,0 1,1 ... 1,M-1

... ... ... ...

N-1,0 N-1,1 ... N-1,M-1

Arquitecturas Paralelas 12-13

vectorizaci n7
Vectorización
  • Condición para poder vectorizar un bucle:
  • Las dependencias entre instrucciones no forman ciclos en el grafo de dependencias

En general, algunas instrucciones de un bucle se pueden ejecutar de manera vectorial pero puede que otras no(“fisión”):

Arquitecturas Paralelas 12-13

vectorizaci n8

B,0

1

B,1

2

Vectorización

do i = 1, N-1

A(i) = B(i)

B(i) = B(i-1)

enddo

MOVI VL,#N-1

MOVI VS,#1

LV V1,B+1(R1)

SV A+1(R1),V1

MOVI R3,#N-1

buc: LD F1,B(R2)

ST B+1(R2),F1

ADDI R2,R2,#1

SUBI R3,R3,#1

BNZ R3,buc

Arquitecturas Paralelas 12-13

test de dependencias

a*i+b

c*i+d

i

L2

L1

d-b

Z→no hay depend.

MCD(c,a)

Test de dependencias

¿Quién se encarga del análisis de dependencias? Elprogramador o el compilador.

Automáticamente, sólofunciones lineales de los índices de los bucles

do i = L1, L2

X(a*i+b) =

= X(c*i+d)

enddo

Arquitecturas Paralelas 12-13

test de dependencias1

i

i

i

L1

L2

L1

L2

L1

L2

Test de dependencias

Arquitecturas Paralelas 12-13

test de dependencias2
Test de dependencias

do i = 1, 100

A(2*i) = ...

... = A(2*i+1)

enddo

(1 – 0) / MCD(2, 2) = 1/2 → no

do i = 5, 100

A(i-5) = ...

... = A(2*i+90)

enddo

(90 – (-5)) / MCD(2, 1) = 95 → ¿si?

wr:A0...A95

rd: A100...A290

Arquitecturas Paralelas 12-13

test de dependencias3
Test de dependencias

do i = 1, 100

A(3*i+100) = ...

... = A(2*i-1)

enddo

((-1) – 100) / MCD(2, 3) = 101 → ¿si?

wr:A103...A400

rd:A1...A199

i=1, wrA103; i=52, rdA103

do i = 1, 100

A(6*i+3) = ...

... = A(3*i+81)

enddo

(81 – 3) / MCD(3, 6) = 26 → ¿si?

wr:A9...A603

rd:A84...A381

i=14, wrA84; i=1, rdA84

i=26, wrA159; i=26, rdA159

i=27, wrA165; i=28, rdA165

Arquitecturas Paralelas 12-13

test de dependencias4
Test de dependencias

¡Ojo! el paso de los accesos a memoria puede indicarse en dos sitios: en la definición de los límites del bucle o en el índice de acceso al vector.

Antes de aplicar la prueba MCD hay que normalizar los bucles (paso del bucle a 1).

do i = 1, 100,2

A(i) = ...

B(2*i+5) = ...

enddo

dok = 1, 50

A(2*k-1) = ...

B(4*k+3) = ...

enddo

Arquitecturas Paralelas 12-13

vectorizaci n9
Vectorización

Resumiendo

Para saber si los bucles se pueden ejecutar vectorialmente hay que analizar dependencias entre instrucciones

El análisis de dependencias lo hará el compilador vectorial cuando el paso de los accesos sea constante

Se puede utilizar la prueba MCD para saber si no puede haber dependencia

Las instrucciones se pueden vectorizar si no están dentro de un ciclo de dependencias

Arquitecturas Paralelas 12-13

optimizaciones
Optimizaciones
  • El análisis automático de dependencias no es sencillo. Si el compilador no puede decidir si existe o no dependencia, supondrá por si acaso que hay dependencia.

Por otro lado, es muy importante que el factorde vectorización sea alto(Amdahl).

Por lo tanto, se suelen aplicar diferentes transformaciones u optimizaciones para facilitar el proceso de vectorización.

Las optimizaciones principales son las siguientes:

Arquitecturas Paralelas 12-13

optimizaciones1

L+1

L+2

L+1

Optimizaciones
  • 1Sustitución global hacia adelante
  • Para facilitar el análisis de dependencias hay que sustituir todas las definiciones llevadas a cabo.

NP1 = L+1

NP2 = L+2

...

do i = 1, L

B(i) = A(NP1) + C(i)

A(i) = A(i) – 1

do j = 1, L

D(j,NP1) = D(j-1,NP2)*C(j) +1

enddo

enddo

Arquitecturas Paralelas 12-13

optimizaciones2
Optimizaciones
  • 2Variables de inducción
  • Dentro del bucle hay que sustituir las variables que van modificándose en progresión aritmética.

j = 2

k = 2

do i = 1, L

j = j + 5

R(k) = R(j) + 1

k = k + 3

enddo

i = 1 2 3 4 5 ...

j = 7 12 17 22 27 ...

k = 2 5 8 11 14 ...

do i = 1, L

R(3*i-1) = R(5*i+2) + 1

enddo

j = 5*i+2

k = 3*i-1

¡Ojo!: valor final de i, j y k !!!

Arquitecturas Paralelas 12-13

optimizaciones3

0

1

A,1

A,0

1

A,1

2

A,0

2

Optimizaciones

3Antidependencias

do i = 0, N-2

A(i) = B(i) + C(i)

D(i) = A(i) + A(i+1)

enddo

do i = 0, N-2

[T(i)] = A(i+1)

A(i) = B(i) + C(i)

D(i) = A(i) + [T(i)]

enddo

T,0

Arquitecturas Paralelas 12-13

optimizaciones4

A,0

A,1

1

2

Optimizaciones

3Antidependencias

MOVI VL,#N-1

MOVI VS,#1

(2/0) LV V1,A+1(R1)

(1) LV V2,B(R1)

LV V3,C(R1)

ADDV V4,V3,V2

SV A(R1),V4

(2) ADDV V5,V1,V4

SV D(R1),V5

do i = 0, N-2

A(i) = B(i) + C(i)

D(i) = A(i) + A(i+1)

enddo

Arquitecturas Paralelas 12-13

optimizaciones5

0

1

T,0

T,0

A,0

1

A,2

2

A,2

2

Optimizaciones

4Dependencias de salida

do i = 0, N-3

A(i) = B(i) + C(i)

A(i+2) = A(i) * D(i)

enddo

do i = 0, N-3

[T(i)] = B(i) + C(i)

A(i+2) = [T(i)] * D(i)

A(i) = [T(i)]

enddo

Arquitecturas Paralelas 12-13

optimizaciones6

1

2

Optimizaciones

4 Dependencias de salida

MOVI VL,#N-2

MOVI VS,#1

(1) LV V1,B(R1)

LV V2,C(R1)

ADDV V3,V2,V1

(2) LV V4,D(R1)

MULV V5,V3,V4

SV A+2(R1),V5

(1/3) SV A(R1),V3

do i = 0, N-3

A(i) = B(i) + C(i)

A(i+2) = A(i) * D(i)

enddo

A,0

A,2

Arquitecturas Paralelas 12-13

optimizaciones7

1

A,(0,1)

j

i

Optimizaciones

5 Intercambio de bucles

do i = 0, N-1

do j = 1, N-1

A(i,j) = A(i,j-1) + 1

enddo

enddo

no

do j = 1, N-1

do i = 0, N-1

A(i,j) = A(i,j-1) + 1

enddo

enddo

Arquitecturas Paralelas 12-13

optimizaciones8

j

i

1

A (0,1)

2

B (1,-1)

Optimizaciones

5 Intercambio de bucles

do i = 1, N-1

do j = 1, N-2

A(i,j) = B(i-1,j+1) + 1

B(i,j) = A(i,j-1)

enddo

enddo

Arquitecturas Paralelas 12-13

optimizaciones9
Optimizaciones

5 Intercambio de bucles

Se pueden intercambiar los bucles si en los nuevos vectores de distancia de las dependencias, el primer componente que no es 0 es positivo

Por ejemplo,

(0, 1) → (1, 0) sí se puede

(1, -1) → (-1, 1) no se puede

Arquitecturas Paralelas 12-13

optimizaciones10

A,(1,0)

j

1

i

2

B,(0,1)

Optimizaciones

5 Intercambio de bucles

A veces hay que combinar el intercambio y la fisión:

do i = 1, N-1

do j = 1, N-1

A(i,j) = A(i-1,j) + 1

B(i,j) = B(i,j-1) * 2

enddo

enddo

Arquitecturas Paralelas 12-13

optimizaciones11
Optimizaciones

5 Intercambio de bucles

En otros casos merece la pena realizar el intercambio de bucles por cuestiones de eficiencia.

A0,0 ... A0,9

... ...

... ...

... ...

A99,0 .. A99,9

do i = 0, 99

do j = 0, 9

A(i,j) = A(i,j) + 1

enddo

enddo

Arquitecturas Paralelas 12-13

optimizaciones12

(i)

(i)

(i)

(i)

Optimizaciones
  • 6 Expansión escalar

La utilización de escalares dentro del bucle impide vectorizarlo.

do i = 0, N-1

suma = A(i) + B(i)

C(i) = suma * suma

D(i) = suma * 2

enddo

¡Ojo!, al final:

suma = suma(N-1)

Arquitecturas Paralelas 12-13

optimizaciones13
Optimizaciones
  • 7 Fusión de bucles

Si se puede, es conveniente juntar dos bucles en uno.

do i = 0, N-1

A(i) = B(i) + C(i)

enddo

do i = 0, N-1

D(i) = E(i) * 5

enddo

do i = 0, N-1

A(i) = B(i) + C(i)

D(i) = E(i) * 5

enddo

¡Ojo! hay que respetar el significado (dependencias!)

Arquitecturas Paralelas 12-13

optimizaciones14
Optimizaciones
  • 7 Fusión de bucles

do i = 0, N-2

A(i) = B(i) + C(i)

enddo

do i = 0, N-2

D(i) = A(i+1) + 1

enddo

do i = 0, N-2

A(i) = B(i) + C(i)

D(i) = A(i+1) + 1

enddo

No son iguales

Arquitecturas Paralelas 12-13

optimizaciones15
Optimizaciones

8 Colapso de bucles

Convertir el bucle de dos dimensiones en un bucle de 1 sola dimensión para procesar vectores más largos

float A(10,10)

do i = 0, 9

do j = 0, 9

A(i,j) = A(i,j) * 2.0

enddo

enddo

float A(10,10)

do i = 0, 99

A(i) = A(i) * 2.0

enddo

Arquitecturas Paralelas 12-13

optimizaciones16
Optimizaciones

Recordar que tras la finalización del bucle (aunque se haya utilizado alguna optimización) hay que restaurar:

  • Índices

Variables de inducción

Variables temporales

Escalares…

Arquitecturas Paralelas 12-13

registros de m scara
Registros de máscara
  • Ocurre a menudo que solo se procesan unos elementos del vector para hacer algunos cálculos

do i = 0, N-1

if (B(i)>5) A(i) = A(i) + 1

enddo

Solución habitual: máscaras(VM, vector mask)

registro binario VM : 1 – hay que procesarlo

0 – hay que enmascarar

Arquitecturas Paralelas 12-13

registros de m scara1
Registros de máscara
  •  Primero se genera la máscara, normalmente tras una operación de comparación; luego, se ejecuta la operación vectorial teniendo en cuenta el registro de máscara.

MOVI VL,#N

MOVI VS,#1

MOVI F1,#5

LV V1,B(R1)

SGTVS V1,F1

LV V2,A(R1)

ADDVI V3,V2,#1

SV A(R1),V3

CVM

- Para cargar VM(comparación):

SxxV V1,V2

SxxVS V1,F1

- Para inicializar VM (bits a 1)

CVM

- Para contar 1s en VM:

POP R1,VM

Arquitecturas Paralelas 12-13

vectores de ndice

s=3

5

14

4

1

8

Vectores de índice
  • Hasta el momento hemos procesado vectores de paso constante (VS).
  • LV V1,A(R1)VL componentes, a distancia VS, a partir de la direcciónA+R1

En algunos casos hay que procesar vectores con paso variable.

¿Cómo?

Arquitecturas Paralelas 12-13

vectores de ndice1
Vectores de índice
  •  Para procesar vectores de paso variable, se utilizan vectores de índice (y como modo de direccionamiento el indexado):

LVI V1,A(V2)V2 es el registro de índices e indica las posiciones de los componentes que hay que procesar

SVI A(V2),V1

CVI V1,R1 0, R1,2R1... generar el vector de índices (accesos frecuentes)

Arquitecturas Paralelas 12-13

vectores de ndice2
Vectores de índice
  •  En general, el tiempo de ejecución de estas operaciones es mayor (no se llega a un componente por ciclo) que el de los accesos normales (paso constante).

MOVI VL,#M+1

MOVI R1,#1

CVI V4,R1

MULV V5,V4,V4

LVI V1,B(V5)

ADDVI V2,V1,#1

SVIA(V5),V2

do i = 0, M

A(i*i) = B(i*i) + 1

enddo

Arquitecturas Paralelas 12-13

vectores de ndice3

VM = 1 0 0 1 1 1 0 1

V2 = 0 3 4 5 7

R1 = 5

Vectores de índice
  • Direccionamiento indexado mediante“maskaras”

MOVI VL,#N

MOVI VS,#1

MOVI F1,#5

LV V1,B(R1)

SGTVS V1,F1

MOVI R2,#1

CVI V2,R2

POP R1,VM

MOV VL,R1

CVM

LVI V3,A(V2)

ADDVI V4,V3,#1

SVI A(V2),V4

do i = 0, N-1

if (B(i)>5) A(i) = A(i) + 1

enddo

Arquitecturas Paralelas 12-13

resumen
Resumen
  •  Los procesadores vectoriales son arquitecturas para procesar vectores de manera eficiente. Tienen las siguientes características:

▪ Lenguaje máquina específico para procesar un vector mediante una única instrucción.

▪ Gran ancho de banda para lectura/escritura en memoria.

▪ Unidades funcionales segmentadas (muchas).

▪ La ejecución de las instrucciones se encadena.

▪ Buenos compiladores para generar código vectorial.

Arquitecturas Paralelas 12-13

resumen1
Resumen
  • Hasta hace “poco”, los supercomputadores eran computadores vectoriales, pero hoy las máquinas rápidas son de tipo MIMD.
  • Pueden ser nodos de sistemas paralelos MIMD especializados en calculo vectorial.

Todos los procesadores actuales cuentan con operaciones “vectoriales” en el conjunto de instrucciones.Por ejemplo (PA-RISC): FMAC, multiply-accumulate

Arquitecturas Paralelas 12-13