Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de...

69
Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos de sincronización - Optimizaciones principales - Reparto de las iteraciones - Secciones paralelas

Transcript of Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de...

Page 1: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas Paralelas IF - EHU

Arquitecturas Paralelas

8. Paralelización de bucles. Reparto de tareas.

- Introducción- Paralelización de bucles- Mecanismos de sincronización- Optimizaciones principales- Reparto de las iteraciones- Secciones paralelas

Page 2: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 28

Identificar qué tareas pueden ejecutarse en paralelo y cuáles no (análisis de dependencias).Sincronizar los procesos.Repartir los procesos a los procesadores.

Objetivo: ejecutar los programas P veces más rápido; caso particular: bucles.

Hacerlo de manera eficiente.

Introducción

Page 3: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 38

Tipos de paralelismo (1)

(a) Paralelismo de datos

do i = 1, 1000 do i = 1001, 2000 do i = 2001, 3000A(i) = func(i) A(i) = func(i) A(i) = func(i)

enddo enddo enddo

P0 P1 P2

do i = 1, 3000A(i) = func(i)

enddo

Introducción

Page 4: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 48

Tipos de paralelismo (1)

(b) Paralelismo de función

Introducción

P0 P1

F1

F2

F3

F4

Page 5: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 58

Tipos de paralelismo (2)

▪ grano fino (fine grain) tareas “pequeñas” / mucha comunicación

▪ grano medio

▪ grano grueso (coarse grain)

tareas “grandes” / poca comunicación

▪ grado de paralelismo

Introducción

Page 6: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 68

¿Dependencias entre tareas?

Sincronización

- global (barreras)- punto a punto (eventos)

Introducción

P0 P1

F1

F2

F3

F4

Page 7: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 78

Dos modelos

▪ Maestro-esclavo

Un thread master genera P threads para ser ejecutados en paralelo, que “mueren” al terminar su tarea.

▪ SPMD (Single-Program-Multiple-Data)

Se ejecutan P copias iguales independientes. Las tareas se diferencian mediante el pid del proceso.

Introducción

Page 8: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 88

Paralelización de bucles

grano fino / medioreparto de iteraciones del bucleanálisis de dependencias

Hacerlo de manera eficiente. ¿El programador o el compilador?

Introducción

Page 9: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 98

Salvo casos muy obvios, la paralelización del código (análisis de dependencias, reparto de tareas, etc.) sigue siendo responsabilidad del programador.

Por ello, vamos a ver algunas de las opciones más habituales a la hora de paralelizar bucles de manera eficiente.

Introducción

Page 10: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 108

Se necesita que una fracción importante del código pueda ejecutarse en paralelo. ¡No olvides la ley de Amdahl!

Paralelizar (como vectorizar) código implica cambiar el orden original de las instrucciones del bucle. Por tanto, tenemos que analizar las dependencias entre las instrucciones del bucle.

Introducción

Page 11: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 118

Ejemplo:

do i = 0, N-1

A(i) = A(i) + 1

enddo

P0: L0 +0 S0P1: L1 +1 S1P2: L2 +2 S2… ...

En paralelo

Introducción

L0 +0 S0 L1 +1 S1 L2 +2 S2 ...

Page 12: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 128Introducción: depend.

dependencia

RAW

i: A =...

j: = A

antidependencia

WAR

i: = A...

j: A =

dependen. de salida

WAW

i: A =...

j: A =

i j i j i j

dependencias verdaderas dependencias de nombre

Page 13: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 138

Bucles

+ Grafo de dependencias+ Distancia de la dependencia

do i = 2, N-21 A(i) = B(i) + 22 C(i) = A(i-2) + A(i+1)

enddo

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

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

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

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

1

2

A, 2

A, 1

Introducción: depend.

Page 14: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 148

do i = 2, N-311 A(i) = B(i) + 22 C(i) = A(i-2)3 D(i+1) = C(i) + C(i+1)4 B(i+1) = B(i) + 15 D(i+30) = A(i)enddo

1

2

3

4

5

A, 0

A, 2

C, 0 C, 1

D, 29

B, 1

B, 1

Introducción: grafos de dep.

Page 15: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 158

+ Espacio de iteraciones

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 enddoenddo

1

2

A 2,-1

A 0,1

i

j

Introducción: grafos de dep.

Page 16: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 168

Test de dependencias: únicamente para funciones lineales del índice del bucle.

do i = L1, L2 X(a*i+b) = = X(c*i+d)enddo

?

L1 L2

i

a*i+b

c*i+d

i1 i2

Introducción: test de dep.

d - bMCD(c,a)

Z → no hay depend.

Page 17: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 178

Paralelizar el código significa repartir tareas (iteraciones de un bucle) a procesadores. Pero hay que respetar las dependencias de datos.

El problema principal son las dependencias de distancia > 0, y sobre todo aquellas que forman ciclos en el grafo de dependencias.

Paralelización de bucles

Page 18: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 188

Siempre es posible ejecutar un bucle en P procesadores, añadiendo sincronización para asegurar que se respetan las dependencias de datos…

… lo que no significa que siempre sea sensato hacerlo, pues hay que tener en cuenta el coste global: cálculo + sincronización (comunicación).

Paralelización de bucles

Page 19: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 198

Objetivos:

Repartir las iteraciones de un bucle entre los procesadores, para que se ejecuten “a la par”.

Siempre que se pueda, que se ejecuten de manera independiente, sin necesidad de sincronizar (dependencias de distancia 0).

En función de las características del sistema (comunicación, reparto de tareas…) intentar que las tareas tengan un cierto tamaño.

Paralelización de bucles

Page 20: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 208

Tal vez sólo se pueda utilizar un número limitado de procesadores.

Atención al rendimiento (p. e., problemas en la cache).

Paralelización de bucles

Page 21: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 218

> Ejemplos

Paralelización de bucles

P0 P1 P2 P3do i = 0, N-1A(i) = A(i) + 1B(i) = A(i) * 2

enddo

Page 22: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 228Paralelización de bucles

> Ejemplos

P0 P1 P2 P3

?

do i = 0, N-2A(i) = B(i) + 1B(i+1) = A(i) * 2

enddo

Page 23: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 238Paralelización de bucles

> Ejemplos

P0 P0P1 P1do i = 0, N-3A(i+2) = A(i) + 1

enddo

Page 24: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 248Paralelización de bucles

> Ejemplos

do i = 0, N-1

do j = 1, M-1

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

enddo

enddo

P0 P1 P2 P3

Page 25: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 258Paralelización de bucles

> Ejemplos

P0

P1

P2

P3

do i = 0, N-1

do j = 1, M-1

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

enddo

enddo

Page 26: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 268

Si todas las dependencias son de distancia 0 (las iteraciones son independientes), éstas se pueden repartir como se quiera entre los procesadores, sin tener que sincronizarlas: doall.

Si hay dependencias entre iteraciones, pero todas van hacia adelante, se pueden sincronizar mediante barreras: forall (o doall + barrier).

Si las dependencias forman ciclos, hay que utilizar sincronización punto a punto: doacross.

Paralelización de bucles

Page 27: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 278

Las iteraciones son independientes, por lo que el reparto puede hacerse como se quiera: doall.

Bucles doall

do i = 0, N-1C(i) = C(i) * C(i)A(i) = C(i) + B(i)D(i) = C(i) / A(i)

enddo

doall i = 0, N-1C(i) = C(i) * C(i)A(i) = C(i) + B(i)D(i) = C(i) / A(i)

enddoall

1

2

3

C, 0

A, 0

i=0 1 2 3

Page 28: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 288

Hay dependencias entre iteraciones, pero todas van “hacia adelante”: forall.

Cada dependencia puede sincronizarse con una barrera: los procesos esperan a que todos hayan ejecutado una determinada instrucción antes de pasar a ejecutar la siguiente.

Hay más sincronización que la estrictamente necesaria, pero es sencillo de implementar.

Bucles forall

Page 29: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 298Bucles forall

do i = 1, N-1C(i) = C(i) * C(i)A(i) = C(i) + B(i)D(i) = C(i-1) / A(i)

enddo

forall i = 1, N-1C(i) = C(i) * C(i)A(i) = C(i) + B(i)BARRERA (...)D(i) = C(i-1) / A(i)

endforall

i=1 2 3 4

barrera

1

2

3

C, 0

A, 0

C, 1

Page 30: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 308Bucles forall

do i = 1, N-1C(i) = C(i) * C(i)A(i) = C(i) + B(i)D(i) = C(i-1) / A(i)

enddo

i=1 2 3 4

barrera

doall i = 1, N-1C(i) = C(i) * C(i)A(i) = C(i) + B(i)

enddoall[ BARERRA (...) ]doall i = 1, N-1D(i) = C(i-1) / A(i)

enddoall

1

2

3

C, 0

A, 0

C, 1

Page 31: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 318

Las dependencias forman ciclos: doacross, sincro-nización punto a punto (productor / consumidor).

Sincronización de las dependencias mediante vectores de eventos:

post(vA,i) → vA(i) := 1

wait(vA,i) → esperar a que vA(i) = 1

Si vA(i) = 0, aún no se ha ejecutado la iteración i de la instrucción que se está sincronizando.

Bucles doacross

Page 32: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 328

do i = 2, N-2A(i) = B(i-2) + 1B(i+1) = A(i-2) * 2

enddo

1

2

A,2B,3 1 1 1 . . .

2 2 2 . . .

1 1 1

2 2 2

i=2 3 4 5 6 7

doacross i = 2, N-2

wait (vB,i-3)A(i) = B(i-2) + 1post (vA,i)

wait (vA,i-2)B(i+1) = A(i-2) * 2post (vB,i)

enddoacross

Bucles doacross

Page 33: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 338

do i = 2, N-2A(i) = B(i-2) + 1B(i+1) = A(i-2) * 2

enddo

doacross i = 2, N-2

wait (vB,i-3)A(i) = B(i-2) + 1post (vA,i)

wait (vA,i-2)B(i+1) = A(i-2) * 2post (vB,i)

enddoacross

1

2

A,2B,3

, 3

Bucles doacross

12 13 14

22 23 24

15 16 17

25 26 27

...

P0 P1 P2

Page 34: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 348

No siempre hay que ejecutar en paralelo

do i = 0, N-2A(i) = B(i) + C(i)B(i+1) = A(i) / 2

enddo

doacross i = 0, N-2wait (vB,i-1)A(i) = B(i) + C(i)B(i+1) = A(i) / 2post (vB,i)

enddoacross

1

2

A,0B,1

12p w 1 2 p w 1 …

??

Bucles doacross

Page 35: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 358

Vectores de eventos en dos dimensiones

Bucles doacross

P0

P1

P2

P3

do i = 0, N-2 do j = 0, N-2 A(i+1,j+1) = A(i+1,j) + 1 B(i,j) = A(i,j)

enddoenddo

doacross i = 0, N-2 do j = 0, N-2

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

post (vA,i,j)

wait (vA,i-1,j-1)

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

enddo

enddoacross

Page 36: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 368

Antidependencias / Dependencias de salida

Si son entre procesos, hay que sincronizarlas.

do i = 0, N-3A(i) = B(i+2) / A(i)B(i) = B(i) + C(i)

enddo doacross i = 0, N-3A(i) = B(i+2) / A(i)post (vB,i)wait (vB,i-2)B(i) = B(i) + C(i)

enddoacross

1

2

B,2

LD B(i+2)post...wait ST B(i)

Otras dependencias

Page 37: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 378

Instrucciones de tipo if

do i = 1, N-1if (B(i) > 0) then

A(i) = A(i) + B(i) C(i) = A(i-1) / 2 endifenddo

doacross i = 1, N-1

if (B(i) > 0) then A(i) = A(i) + B(i) post (vA,i) wait (vA,i-1) C(i) = A(i-1) / 2

endif

enddoacross

else post (vA,i)

endif1

2

A,1

0

Instrucciones if

Page 38: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 388

Cómo sincronizar las instrucciones

• mediante vectores de eventos (post/wait)

- inicialización- tamaño (memoria)- ojo con la falsa compartición

• mediante contadores

Mecanismos de sincron.

Page 39: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 398

Contadores de sincronización (uno por cada depen-dencia)

- las instrucciones van “acabando” en orden estricto, e incrementan el contador.

- cA = j han terminado todas las iteraciones hasta la j, y no la j+1.

i = 0 1 2 3 4 5 6 7 8 9...

vA(i) = 1 1 1 0 1 0 1 1 0 0...cA = 2

Contadores de sincron.

Page 40: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 408

Para sincronizar una dependencia mediante un contador:

- tras ejecutar la iteración i, esperar a que el valor del contador sea i-1 (es decir, a que se haya ejecutado esa instrucción hasta la iteración i-1).

wait (cA,i-1) → esperar a que cA = i-1

- incrementar el contador, para indicar que también se ha ejecutado la iteración i.

post (cA,i) → cA := cA + 1 (cA := i)

Contadores de sincron.

Page 41: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 418

doacross i = 3, N-1

wait (vD,i-3)

C(i) = C(i) * D(i-3)

post (vC,i)

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

wait (vC,i-1)

D(i) = C(i-1) / A(i)

post (vD,i)

enddoacross

do i = 3, N-1C(i) = C(i) * D(i-3)A(i) = C(i) + B(i)D(i) = C(i-1) / A(i)

enddo

1

2

3

C, 0

A, 0 C,1

D,3 1 1 12 2 23 3 3

1 1 1 2 2 2 3 3 3

doacross i = 3, N-1wait (cD,i-3)C(i) = C(i) * D(i-

3)wait (cC,i-1)post (cC,i)

A(i) = C(i) + B(i)D(i) = C(i-1) /

A(i)wait (cD,i-1)

post (cD,i)enddoacross

Contadores de sincron.

Page 42: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 428

doacross i = 3, N-1C(i) = C(i) * D(i-3)wait (cC,i-1)post (cC,i)

A(i) = C(i) + B(i)D(i) = C(i-1) / A(i)

enddoacross

Minimizar la sincronización

P0

P0

1

2

3

C, 0

A, 0 C,1

D,3

do i = 3, N-1C(i) = C(i) * D(i-3)A(i) = C(i) + B(i)D(i) = C(i-1) / A(i)

enddo

Contadores de sincron.

1 1 12 2 23 3 3

1 1 1 2 2 2 3 3 3

Page 43: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 438

forall i = ...[ 1 ]barrera(...)

[ 2 ] [ 3 ]

barrera(...)

[ 4 ]endforall

doacross i = ...[ 1 ]post (vA,i)

wait (vA,i-1)[ 2 ] post (vC,i)

[ 3 ]

wait (vC,i-2)[ 4 ]

enddoacross

doacross i = ...[ 1 ]wait (cA,i-1)post (cA,i)

[ 2 ] wait (cC,i-1)

post (cC,i)

[ 3 ][ 4 ]

enddoacross

1

2

3

A, 1

C, 2

B,0

A,0

4

Ejemplo

Page 44: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 448

0. Deshacer la definición de constantes y las variables de inducción.

1. Eliminar todas las dependencias que no son intrínsecas al bucle. Por ejemplo:

do i = 0, N-1X = A(i) * B(i) C(i) = SQRT(X)D(i) = X - 1

enddo

doall i = 0, N-1X(i) = A(i) * B(i)C(i) = SQRT(X(i))

D(i) = X(i) - 1enddoall

convertir X en una variable privada

Principales optimizaciones

Page 45: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 458

2. Fisión del bucle. Si una parte del bucle hay que ejecutarla en serie, romper el bucle convenientemente y ejecutar lo que sea posible en paralelo.

do i = 1, N-1A(i) = A(i-1) / 2D(i) = D(i) + 1

enddo

do i = 1, N-1A(i) = A(i-1) / 2

enddo

doall i = 1, N-1D(i) = D(i) + 1

enddoall

Principales optimizaciones

Page 46: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 468

3. Ordenar las dependencias (hacia adelante).

do i = 1, N-1A(i) = D(i-1) / 2D(i) = C(i) + 1

enddo

forall i = 1, N-1D(i) = C(i) + 1BARRERA (...)

A(i) = D(i-1) / 2endforall

1

2

D, 1 2………….12………1 2…….1

1…2.. 1…2.. 1…2..

??

Principales optimizaciones

Page 47: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 478

4. Alinear las dependencias: peeling.

do i = 1, N-1A(i) = B(i)C(i) = A(i-1) + 2

enddo

1

2

A, 1

doall i = 1, N-2A(i) = B(i)C(i+1) = A(i) + 2

enddoall

C(1) = A(0) + 2

A(N-1) = B(N-1)

Principales optimizaciones

Page 48: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 488

do i = 2, N-1A(i) = B(i)C(i) = A(i-1) + A(i-2)

enddo

1

2

A, 2 A, 1

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

doall i = 2, N-3A(i) = B(i)X(i+1) = B(i+1)C(i+2) = X(i+1) + A(i)

enddoall

A(N-2) = B(N-2)A(N-1) = B(N-1)

do i = 2, N-1A(i) = B(i)X(i) = B(i)C(i) = X(i-1) + A(i-2)

enddo

Principales optimizaciones

1’

2

A, 2 X, 1

1

Page 49: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 498

5. Generar hilos independientes

do i = 0, N-3A(i+1) = B(i) + 1B(i+2) = A(i) * 3C(i) = B(i+2) - 2

enddo

B(2) = A(0) * 3C(0) = B(2) - 2

doall k = 0, 2 do i = pid, N-4, 3 A(i+1) = B(i) + 1 B(i+3) = A(i+1) * 3 C(i+1) = B(i+3) – 2 enddoenddoall

A(N-2) = B(N-3) + 1

1

2

3

B,0

B,2 A,1 1 1 1 1 1 1

2 2 2 2 2 2

3 3 3 3 3 3

Principales optimizaciones

Page 50: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 508

6. Minimizar la sincronización

do i = 2, N-1B(i) = B(i) + 1

C(i) = C(i) / 3A(i) = B(i) + C(i-1)D(i) = A(i-1) * C(i-2)E(i) = D(i) + B(i-1)

enddo

1

2

3

B,0

B,1

A,1

4

5

C,

1C,2

D,0

doacross i = 2, N-1B(i) = B(i) + 1

C(i) = C(i) / 3post (vC,i)

wait (vC,i-1)A(i) = B(i) + C(i-1)post (vA,i)

wait (vA,i-1)D(i) = A(i-1) * C(i-2)E(i) = D(i) + B(i-1)

enddoacross

1 2 3 4 51 2 3 4 51 2 3 4 5

i=2

3

4...

Principales optimizaciones

Page 51: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 518

7. Tratamiento de bucles: intercambio.

Principales optimizaciones

do i do_par j

do_par i do j

do j do_par i

do_par j do i

Page 52: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 528

Ejemplo:

do i = 1, N-1 do j = 0, N-1

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

enddoenddo

do i = 1, N-1

doall j = 0, N-1A(i,j) = A(i-1,j) +

1enddoall

enddo

Principales optimizaciones

j=0 1 2 3

i=1

2

3

4

Page 53: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 538

Ejemplo:

doall j = 0, N-1

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

enddo

enddoall

do i = 1, N-1 do j = 0, N-1

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

enddoenddo

Principales optimizaciones

j=0 1 2 3

i=1

2

3

4

Page 54: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 548

8. Tratamiento de bucles: cambio de sentido.

j=0 1 2

i=1

2

3

4

do i = 1, 100 do j = 0, 2 A(i,j) = A(i,j) - 1 D(i) = A(i-1,j+1) * 3

enddoenddo

do j = 2, 0, -1

doall i = 1, 100 A(i,j) = A(i,j) - 1 D(i) = A(i-1,j+1) * 3

enddoall

enddo

Principales optimizaciones

Page 55: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 558

do j = 1, 2N-1 doall i = max(1,j-N+1), min(j,N) A(i,j-(i-1)) = A(i-1,j-(i-1)) + A(i,j-1-(i-1)) enddoallenddo

9. Skew

do i = 1, N do j = 1, N A(i,j) = A(i-1,j) + A(i,j-1) enddoenddo

Principales optimizaciones

Page 56: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 568

10. Otras optimizaciones típicas

Aumento del tamaño de grano y reducción del overhead de la paralelización.

- Juntar dos bucles en uno (¡manteniendo la semántica!): fusión.- Convertir un bucle de dos dimensiones en otro de una sola dimensión: colapso o coalescencia.…

Principales optimizaciones

Page 57: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 578

¿Cómo se reparten las iteraciones de un bucle entre los procesadores?Si hay tantos procesadores como iteraciones, tal vez una por procesador.

Pero si hay menos (lo normal), hay que repartir. El reparto puede ser:

estático: en tiempo de compilación.dinámico: en ejecución.

Reparto de iteraciones

Page 58: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 588

El objetivo: intentar que el tiempo de ejecución de los trozos que se reparten a cada procesador sea similar, para evitar tiempos muertos (load balancing).

En todo caso, OJO con las dependencias (sincronización), el tamaño de grano, la localidad de los accesos y el coste del propio reparto.

Reparto de iteraciones

Page 59: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 598

Planificación estática

Qué ejecuta cada procesador se decide en tiempo de compilación. Es por tanto una decisión prefijada.

Cada proceso tiene una variable local que lo identifica, pid [0..P-1].

Dos opciones básicas: reparto consecutivo y reparto entrelazado.

Reparto de iteraciones

Page 60: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 608

- No añade carga a la ejecución de los threads.

- Pero no asegura el equilibrio de la carga entre los

procesos.

- Permite cierto control sobre la localidad de los accesos a

cache.

▪ Consecutivo

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3

▪ Entrelazado

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3

principio = pid * N/Pfin = (pid+1) * N/P – 1

do i = principio, fin...

enddo

do i = pid, N, P...

enddo

Reparto de iteraciones

Page 61: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 618

Equilibrio en el reparto de carga

1-20

21-40

41-60

61-80

estático (fijo)

Tej

asignación dinámica de

una nueva tarea

1-10

21-30

11-20

31-40

Tej

do i = 1, 80if (A(i) > 0) calcular()

enddo

Reparto de iteraciones

Page 62: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 628

Planificación dinámica

Para intentar mantener la carga equilibrada, las tareas se van escogiendo en tiempo de ejecución de un cola de tareas. Cuando un proceso acaba con una tarea (un trozo del bucle) se asigna un nuevo trozo.

Dos opciones básicas: los trozos que se van repartiendo son de tamaño constante o son cada vez más pequeños.

Reparto de iteraciones

Page 63: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 638

Las iteraciones se reparten una a una, o por trozos de tamaño Z.

Self / Chunk scheduling

Añade carga a la ejecución de los threads. Hay que comparar ejecución y reparto.

LOCK (C); mia = i; i = i + Z; Z = 1 selfUNLOCK (C);

while (mia <= N-1)

endwhile

do j = mia, min(mia+Z-1, N-1) ...enddoLOCK (C) mia = i; i = i + Z;UNLOCK (C)

Reparto de iteraciones

Page 64: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 648

Los trozos de bucle que se reparten son cada vez más pequeños según nos acercamos al final.

Guided / Trapezoidal

▪ Guided : parte proporcional de lo que queda por ejecutar:

Zs = (N – i) / P (entero superior)

que equivale a:

Zi = Zi-1 (1 - 1/P)

Reparto de iteraciones

Page 65: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 658

▪ Trapezoidal: reduciendo el trozo anterior en una constante: Zi = Zi-1 - k

op. de planificación

Z1

Zn

1 n2 i

k

Z2

)(21

22 1

22111

1

1

n

nnnn

s

ns ZZN

ZZkN

k

ZZZZn

ZZZ

Reparto de iteraciones

Page 66: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 668

En general, el reparto dinámico busca un mejor equilibrio en el reparto de carga, pero:

- hay que considerar la carga que se añade (overhead), en relación al coste de las tareas que se asignan.

- hay que considerar la localidad en los accesos a los datos y los posibles

problemas de falsa compartición.

Reparto de iteraciones

Page 67: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 678

Ejemplo de reparto (1.000 iteraciones, 4 procesadores):

▪ chunk (Z = 100)

100 100 100 100 100 100 100 100 100 100 (10)

▪ guided quedan: 1000 750 562 421 … 17 12 9 6 4 3 2 1

se reparten: 250 188 141 106 … 5 3 3 2 1 1 1 1 (22)

▪ trapezoidal (Z1 = 76, Zn = 4 >> k = 3)

76 73 70 67 … 16 13 10 7 4 (25)

Reparto de iteraciones

Page 68: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

Arquitecturas ParalelasIF - EHU

P. Bucl. 688

Paralelismo a nivel de procedimiento o función:

F2

F3

F1

F4

F5

- modelo Fork / Join - Parallel sections

ForkF1F2

Join

ForkF3F4

JoinF5

doall k = 0, 1if (pid = 0) then F1if (pid = 1) then F2

endoall[barrera]

doall k = 0, 1if (pid = 0) then F3if (pid = 1) then F4

endoallF5

Secciones paralelas

Page 69: Arquitecturas Paralelas IF - EHU Arquitecturas Paralelas 8. Paralelización de bucles. Reparto de tareas. - Introducción - Paralelización de bucles - Mecanismos.

último tema… ¡el año que viene!

Arquitecturas ParalelasIF - EHU

P. Bucl. | Secciones paralelas

Paralelismo a nivel de procedimiento o función:- Modelo Fork / Join- Parallel sections

F2

F3

F1

F4

F5

ForkF1F2

Join

ForkF3F4

JoinF5

doall k = 0, 1if (pid=0) then F1if (pid=1) then F2

endoall[hesia]doall k = 0, 1

if (pid=0) then F3if (pid=1) then F4

endoallF5