tema 2: programaciÓn paralela (ii)
Post on 16-Oct-2021
9 Views
Preview:
TRANSCRIPT
Grupo de Arquitectura de Computadores, Comunicaciones y Sistemas
TEMA 2: PROGRAMACIÓN PARALELA (II)
AUTORES: David Expósito Singh Florin Isaila Daniel Higuero Alonso-Mardones Javier García Blas Borja Bergua Guerra
Área de Arquitectura y Tecnología de Computadores Departamento de Informática Universidad Carlos III de Madrid Julio de 2012
ARQUITECTURA DE COMPUTADORES II
AC II: Programación paralela (II) 2
Índice
¨ Ejemplos de Aplicaciones Paralelizables
¨ Etapas del Proceso de Paralelización: ¤ Descomposición ¤ Asignación ¤ Orquestación ¤ Mapeo
¨ Ejemplo: Simulación de Corrientes Oceánicas
Índice
¨ Ejemplos de Aplicaciones Paralelizables
¨ Etapas del Proceso de Paralelización ¤ Descomposición ¤ Asignación ¤ Orquestación ¤ Mapeo
¨ Ejemplo: Simulación de Corrientes Oceánicas
AC II: Programación paralela (II) 3
Programas paralelos
¨ Necesidades del arquitecto de computadores: Para entender y evaluar las decisiones de diseño en máquinas
paralelas es necesario entender el tipo de aplicaciones que requiere de estas máquinas.
¨ Necesidades del programador:
¤ La programación paralela es una actividad compleja. ¤ Es importante alcanzar buen rendimiento. ¤ Metodología para realizar programas paralelos.
AC II: Programación paralela (II) 4
Definiciones ¨ Tarea:
¤ Unidad de trabajo en el cómputo paralelo.
¤ Se ejecuta secuencialmente, la concurrencia es solo entre tareas.
¤ Tareas de grano fino vs. tareas de grano grueso.
¨ Proceso:
¤ Entidad abstracta que realiza las tareas asignadas a los procesadores.
¤ Los procesos se comunican y sincronizan para realizar las tareas.
¨ Procesador:
¤ Máquina física sobre la que se ejecuta un proceso.
AC II: Programación paralela (II) 5
Índice
¨ Ejemplos de Aplicaciones Paralelizables
¨ Etapas del Proceso de Paralelización ¤ Descomposición ¤ Asignación ¤ Orquestación ¤ Mapeo
¨ Ejemplo: Simulación de Corrientes Oceánicas
AC II: Programación paralela (II) 6
4 etapas en el proceso de paralelización D E S C O M P O S I C I Ó N
A S ���I ���G���N ���A C I Ó N
O���R ���Q���U ���E���S ���T���A C I Ó N
M���A ���P���E���O
Cálculo Secuencial Tareas Procesos Procesadores
[Culler99]
AC II: Programación paralela (II) 7
Etapa 1 Descomposición
¨ Descomposición del problema en pequeñas tareas.
¨ Metas: ¤ Cuanto más pequeñas (grano fino) mejor. ¤ Deben representar cantidades similares de trabajo. ¤ Sin redundancia de cómputo ni almacenamiento. ¤ El número de éstas debe “escalar” con el tamaño del
problema.
¨ Límite de la concurrencia: Ley de Amdahl.
AC II: Programación paralela (II) 8
¿Hasta dónde es posible paralelizar?
Ejemplo: Programa con dos Fases 1. Operación independiente que debe ser llevada a
cabo en una matriz de dimensión n x n 2. Se suma los n2 valores calculados en la fase anterior
1 n2 n2
(a)
€
Ts = 2n2
AC II: Programación paralela (II) 9
Primer intento de paralelización
1.Se paraleliza la primera fase: p: grado de concurrencia
2.La segunda es secuencial
p
1 n2/p n2
(b)
€
Tp =n2
p+ n2
€
S =2n2
n2
p+ n2
=2pp +1
AC II: Programación paralela (II) 10
Segundo intento de paralelización
En la segunda fase: sumemos en cada procesador los elementos de su submatriz y luego hagamos la suma total
p
1 p Time
n2/p n2/p (c)
€
Tp =n2
p+n2
p+ p
€
S =p × 2n2
(2n2 + p2)
Ahora la aceleración es casi lineal!!
AC II: Programación paralela (II) 11
4 etapas en el proceso de paralelización D E S C O M P O S I C I Ó N
A S ���I ���G���N ���A C I Ó N
O���R ���Q���U ���E���S ���T���A C I Ó N
M���A ���P���E���O
Cálculo Secuencial Tareas Procesos Procesadores
[Culler99]
AC II: Programación paralela (II) 12
Etapa 2 Asignación
¨ Especificar el mecanismo por el cual las tareas serán distribuidas entre los procesos. Ejemplos:
¿Qué proceso tiene la responsabilidad de calcular las fuerzas de ciertas estrellas?
¿Qué zona de un grid conviene asignar a un proceso?
2x2 = tareas 4x4 = 16 comunicaciones 16 x 4 = 64 valores transmitidos
AC II: Programación paralela (II) 13
Etapa 2 Asignación
¨ Aspectos a cuidar:
¤ Distribución a partir de datos requiere de técnicas de equilibrado de carga.
¤ Distribución a partir de funciones (actividades) requiere de algoritmos de planificación.
¤ Reducir las comunicaciones.
AC II: Programación paralela (II) 14
4 etapas en el proceso de paralelización D E S C O M P O S I C I Ó N
A S ���I ���G���N ���A C I Ó N
O���R ���Q���U ���E���S ���T���A C I Ó N
M���A ���P���E���O
Cálculo Secuencial Tareas Procesos Procesadores
[Culler99]
AC II: Programación paralela (II) 15
Etapa 3 Orquestación
¨ ¿Qué debe hacerse? ¤ Establecer mecanismos para nombrar y manejar datos. ¤ Estructurar la comunicación entre los procesos. ¤ Sincronización.
Las características de esta etapa dependen del modelo
de programación con el que se trabaje.
AC II: Programación paralela (II) 16
Patrones de comunicación
1. local/global.
2. estructurado/no-estructurado.
3. estático/dinámico.
4. síncrono/asíncrono.
AC II: Programación paralela (II) 17
Comunicación Local
€
Xi, jt+1 =
4Xi, jt + Xi−1, j
t + Xi+1, jt + Xi, j−1
t + Xi, j+1t
8
for t=0 to T-1 send Xi,j a cada vecino receive Xi-1,j X i+1,j Xi,j-1 Xi,j+1 de los vecinos calcular Xi,j para t+1 endfor
AC II: Programación paralela (II) 18
Comunicación Global
S
1 2 0 3 4 5 6 7
€
S = Xii= 0
N−1
∑
AC II: Programación paralela (II) 19
Comunicación Estructurada
€
0
7∑
€
0
1∑
€
2
3∑
€
4
5∑
€
6
7∑€
0
3∑
€
4
7∑
0 1 2 3 4 5 6 7
AC II: Programación paralela (II) 20
Comunicación no estructurada
Cálculo de componentes conexas
AC II: Programación paralela (II) 21
Comunicación Estática
€
Xi, jt+1 =
4Xi, jt + Xi−1, j
t + Xi+1, jt + Xi, j−1
t + Xi, j+1t
8
for t=0 to T-1 send Xi,j a cada vecino receive Xi-1,j X i+1,j Xi,j-1 Xi,j+1 de los vecinos calcular Xi,j para t+1 endfor
AC II: Programación paralela (II) 22
Comunicación Dinámica
¨ N-body problems:
¤ Evolución de las Galaxias.
¤ Dinámica Molecular.
AC II: Programación paralela (II) 23
Comunicación Síncrona (Broadcast)
4
0 1
2 3 5
7 6
4,5
0,1 0,1
2,3 2,3 4,5
6,7 6,7
0,1,4,5
0,1,4,5 0,1,4,5
2,3,6,7 2,3,6,7 0,1,4,5
2,3,6,7 2,3,6,7
0…7
0…7 0…7
0…7 0…7 0…7
0…7 0…7
AC II: Programación paralela (II) 24
Comunicación Asíncrona
Consumidor 1 Consumidor 2
Productor 1 Productor 2 Productor 3
AC II: Programación paralela (II) 25
4 etapas en el proceso de paralelización D E S C O M P O S I C I Ó N
A S ���I ���G���N ���A C I Ó N
O���R ���Q���U ���E���S ���T���A C I Ó N
M���A ���P���E���O
Cálculo Secuencial Tareas Procesos Procesadores
[Culler99]
AC II: Programación paralela (II) 26
Etapa 4 Mapeo ¨ Asignación de proceso/hilo a procesadores.
¨ Especificar dónde se ejecutará cada proceso/hilo.
¨ Se espera minimizar el tiempo total de ejecución. 1. Asignando tareas que ejecutan concurrentemente en diferentes
procesadores.
2. Asignando tareas que comunican frecuentemente en un mismo procesador.
AC II: Programación paralela (II) 27
Consideraciones especiales a tener en cuenta en todas las etapas
¨ ¿Hay posibilidad de crear y destruir tareas de manera dinámica?
¨ Cuando se gestione información centralizada se debe cuidar la posibilidad de tener un cuello de botella.
AC II: Programación paralela (II) 28
Paralelizando Datos vs. Cálculo
AC II: Programación paralela (II) 29
Grupo de Arquitectura de Computadores, Comunicaciones y Sistemas
EJEMPLO
Simulación de corrientes oceánicas
[Culler99]
Simulación de Corrientes Oceánicas
¨ Modelado como grid (malla) de dos dimensiones. ¤ Discretización en espacio y tiempo. ¤ Grano fino temporal y espacial => mayor precisión.
¨ Muchas operaciones concurrentes. ¨ Modelo estático y regular.
(a) Cross sections (b) Spatial discretization of a cross section
AC II: Programación paralela (II) 31
Ecuación iterativa
Versión simplificada de la simulación de corrientes oceánicas
A[i,j] = 0,2 x (A[i,j] + A[i, j-1] + A[i, j+1] + A[i-1, j] + A[i+1, j])
AC II: Programación paralela (II) 32
Ecuación iterativa
Gauss-Seidel:
¤ N x N puntos internos.
¤ Actualizaciones in situ.
¤ Al finalizar cada iteración se acumula las diferencias parciales.
¤ Se itera hasta alcanzar convergencia.
AC II: Programación paralela (II) 33
1. int n; /*size of matrix: (n + 2-by-n + 2) elements*/2. float **A, diff = 0;
3. main()4. begin5. read(n) ; /*read input parameter: matrix size*/6. A ← malloc (a 2-d array of size n + 2 by n + 2 doubles);7. initialize(A); /*initialize the matrix A somehow*/8. Solve (A); /*call the routine to solve equation*/9. end main
10. procedure Solve (A) /*solve the equation system*/11. float **A; /*A is an (n + 2)-by-(n + 2) array*/12. begin13. int i, j, done = 0;14. float diff = 0, temp;15. while (!done) do /*outermost loop over sweeps*/16. diff = 0; /*initialize maximum difference to 0*/17. for i ← 1 to n do /*sweep over nonborder points of grid*/18. for j ← 1 to n do19. temp = A[i,j]; /*save old value of element*/20. A[i,j] ← 0.2 * (A[i,j] + A[i,j-1] + A[i-1,j] +21. A[i,j+1] + A[i+1,j]); /*compute average*/22. diff += abs(A[i,j] - temp);23. end for24. end for25. if (diff/(n*n) < TOL) then done = 1;26. end while27. end procedure
Versión Secuencial
AC II: Programación paralela (II) 34
Las 4 fases
¨ Las fases de Descomposición y Asignación serán básicamente las mismas para los tres modelos de programación.
¨ La fase de Orquestación será diferente dependiendo del modelo de programación.
AC II: Programación paralela (II) 35
4 etapas en el proceso de paralelización D E S C O M P O S I C I Ó N
A S ���I ���G���N ���A C I Ó N
O���R ���Q���U ���E���S ���T���A C I Ó N
M���A ���P���E���O
Cálculo Secuencial Tareas Procesos Procesadores
[Culler99]
AC II: Programación paralela (II) 36
Descomposición ¨ Método Gauss-Seidel:
¤ Estructura de bucles. Las iteraciones no son independientes entre sí. Por lo tanto, no puede
utilizarse: dependencia de los nuevos valores hacia la izquierda y hacia arriba.
¤ Análisis de dependencia de datos.
Reestructurar las iteraciones sobre anti-diagonales Las anti-diagonales se pueden ejecutar concurrentemente Sincronización global entre iteraciones Causa desequilibrio
AC II: Programación paralela (II) 37
Dependencia y concurrencia para el método Gauss-Seidel
AC II: Programación paralela (II) 38
Dependencia y concurrencia para el método Gauss-Seidel
AC II: Programación paralela (II) 39
Descomposición
¨ Método Gauss-Seidel:
¤ Conocimiento de la aplicación.
¤ Cálculo de cada iteración en dos fases: rojo-blanco.
¤ Concurrentemente (N x N) ÷ 2 operaciones.
AC II: Programación paralela (II) 40
Descomposición Rojo-Blanco
AC II: Programación paralela (II) 41
Descomposición ¨ Uso de método Jacobi:
¤ Más caro que el método Gauss-Seidel cuando se trabaja secuencialmente.
¤ Permite que el bucle interno pueda ser realizado concurrentemente y asíncronamente.
¤ Permite tener n tareas independientes.
AC II: Programación paralela (II) 42
Descomposición
15. while (!done) do /*a sequential loop*/16. diff = 0; 17. for_all i ← 1 to n do /*a parallel loop nest*/18. for_all j ← 1 to n do19. temp = A[i,j];20. A[i,j] ← 0.2 * (A[i,j] + A[i,j-1] + A[i-1,j] +21. A[i,j+1] + A[i+1,j]);22. diff += abs(A[i,j] - temp);23. end for_all24. end for_all25. if (diff/(n*n) < TOL) then done = 1;
26. end while
AC II: Programación paralela (II) 43
4 etapas en el proceso de paralelización D E S C O M P O S I C I Ó N
A S ���I ���G���N ���A C I Ó N
O���R ���Q���U ���E���S ���T���A C I Ó N
M���A ���P���E���O
Cálculo Secuencial Tareas Procesos Procesadores
[Culler99]
AC II: Programación paralela (II) 44
Asignación ¨ Asignación estática: Descomposición en filas
§ Asignación por bloques de las filas: Fila i asignada al proceso:
§ Asignación cíclica de las filas a los procesos: al proceso i le son asignadas las filas i, i+p, ...
¨ Asignación dinámica:
§ Tomar el índice de una fila, trabajar sobre la fila, tomar una nueva fila, ...
i p
AC II: Programación paralela (II) 45
Asignación
P0
P1
P2
P4
AC II: Programación paralela (II) 46
4 etapas en el proceso de paralelización D E S C O M P O S I C I Ó N
A S ���I ���G���N ���A C I Ó N
O���R ���Q���U ���E���S ���T���A C I Ó N
M���A ���P���E���O
Cálculo Secuencial Tareas Procesos Procesadores
[Culler99]
AC II: Programación paralela (II) 47
Orquestación
Requerimientos:
¤ Comunicación. Los valores de los vecinos deben estar disponibles.
¤ Sincronización. Antes de pasar a la próxima iteración, todos los puntos de ésta
deben estar evaluados.
AC II: Programación paralela (II) 48
Orquestación Modelos de programación posibles:
¤ Paralelismo de Datos. Ejecución concurrente de bucles, descomposición de datos y
cómputo, operadores colectivos.
¤ Memoria Compartida. Creación de procesos, exclusión mutua.
¤ Pase de Mensajes. Creación de procesos, send/receive síncronos o asíncronos.
AC II: Programación paralela (II) 49
Orquestación Modelo Paralelismo de Datos
¨ Asignación dinámica de datos compartidos: ¤ G_MALLOC (global malloc)
¨ Bucles concurrentes: ¤ for_all
AC II: Programación paralela (II) 50
Orquestación Modelo Paralelismo de Datos ¨ Descomposición de datos y cálculo:
¤ DECOMP. Especifica la asignación de iteraciones a los procesos. Ejemplos: n [BLOCK,*,nprocs] las filas se particionan entre bloques contiguos
entre los nprocs. n [CYCLIC,*,nprocs] las filas se particionan cíclicamente entre los
nprocs.
¨ Operaciones colectivas: ¤ REDUCE, BROADCAST, etc. ¤ Operaciones all-to-all, implementadas de manera eficiente en el sistema
base.
AC II: Programación paralela (II) 51
1. int n, nprocs; /*grid size (n + 2-by-n + 2) and number of processes*/2. float **A, diff = 0;
3. main()4. begin5. read(n); read(nprocs); ; /*read input grid size and number of processes*/6. A ← G_MALLOC (a 2-d array of size n+2 by n+2 doubles);7. initialize(A); /*initialize the matrix A somehow*/8. Solve (A); /*call the routine to solve equation*/9. end main
10. procedure Solve(A) /*solve the equation system*/11. float **A; /*A is an (n + 2-by-n + 2) array*/12. begin13. int i, j, done = 0;14. float mydiff = 0, temp;14a. DECOMP A[BLOCK,*, nprocs];15. while (!done) do /*outermost loop over sweeps*/16. mydiff = 0; /*initialize maximum difference to 0*/17. for_all i ← 1 to n do /*sweep over non-border points of grid*/18. for_all j ← 1 to n do19. temp = A[i,j]; /*save old value of element*/20. A[i,j] ← 0.2 * (A[i,j] + A[i,j-1] + A[i-1,j] +21. A[i,j+1] + A[i+1,j]); /*compute average*/22. mydiff[i,j] = abs(A[i,j] - temp);23. end for_all24. end for_all24a. REDUCE (mydiff, diff, ADD);25. if (diff/(n*n) < TOL) then done = 1;26. end while27. end procedure
AC II: Programación paralela (II) 52
Orquestación Modelo Memoria Compartida ¨ Creación y Terminación de Procesos.
¤ CREATE(p, proc, args) ¤ WAIT_FOR_END(number)
¨ Asignación dinámica de datos compartidos. ¤ G_MALLOC
¨ Exclusión Mutua. ¤ LOCK(name): adquiere acceso exclusivo ¤ UNLOCK(name): libera acceso
AC II: Programación paralela (II) 53
Orquestación Modelo Memoria Compartida ¨ Sincronización Global:
¤ BARRIER(name,number). ¤ Cuando number número de procesos llegan a la barrera, los
procesos pueden continuar con la ejecución.
¨ Sincronización punto a punto: ¤ WAIT(bandera): esperar a que la bandera se active. ¤ SIGNAL(bandera): activa la bandera.
AC II: Programación paralela (II) 54
10. procedure Solve(A) 11. float **A; /*A is entire n+2-by-n+2 shared array, as in the sequential program*/ 12. begin 13. int i,j, pid, done = 0; 14. float temp, mydiff = 0; /*private variables*/ 14a. int mymin = 1 + (pid * n/nprocs); /*assume that n is exactly divisible by*/ 14b. int mymax = mymin + n/nprocs - 1 /*nprocs for simplicity here*/ 15. while (!done) do /*outer loop sweeps*/ 16. mydiff = diff = 0; /*set global diff to 0 (okay for all to do it)*/ 16a. BARRIER(bar1, nprocs); /*ensure all reach here before anyone modifies diff*/ 17. for i ← mymin to mymax do /*for each of my rows*/ 18. for j ← 1 to n do /*for all nonborder elements in that row*/ 19. temp = A[i,j]; 20. A[i,j] = 0.2 * (A[i,j] + A[i,j-1] + A[i-1,j] + 21. A[i,j+1] + A[i+1,j]); 22. mydiff += abs(A[i,j] - temp); 23. endfor 24. endfor 25a. LOCK(diff_lock); /*update global diff if necessary*/ 25b. diff += mydiff; 25c. UNLOCK(diff_lock); 25d. BARRIER(bar1, nprocs); /*ensure all reach here before checking if done*/ 25e. if (diff/(n*n) < TOL) then done = 1; /*check convergence; all get same answer*/ 25f. BARRIER(bar1, nprocs); 26. endwhile 27. end procedure
AC II: Programación paralela (II) 55
Orquestación Modelo Paso de Mensajes ¨ Creación y Terminación de Procesos:
¤ CREATE ¤ WAIT_FOR_END
¨ Comunicación: Transferencia de Datos + Sincronización: ¤ SEND(src_addr, size, dest, tag) ¤ RECEIVE(buffer_addr, size, src, tag) ¤ SEND_ASYNC, RECEIVE_ASYNC
¨ Sincronización Global: ¤ BARRIER
AC II: Programación paralela (II) 56
Orquestación Modelo Paso de Mensajes
P 0
P 1
P 2
P 4
P 0
P 2
P 4
P 1
Se añaden filas extras para utilizar Datos de otros procesos
AC II: Programación paralela (II) 57
10. procedure Solve() 11. begin 13. int i,j, pid, n’ = n/nprocs, done = 0; 14. float temp, tempdiff, mydiff = 0; /*private variables*/ 6. myA ← malloc(a 2-d array of size [n/nprocs + 2] by n+2); /*initialize my rows of A, in an unspecified way*/ 15. while (!done) do 16. mydiff = 0; /*set local diff to 0*/
/* Exchange border rows of neighbors into myA[0,*] and myA[n’+1,*]*/ 16a. if (pid != 0) then SEND(&myA[1,0],n*sizeof(float),pid-1,ROW); 16b. if (pid != nprocs-1) then SEND(&myA[n’,0],n*sizeof(float),pid+1,ROW); 16c. if (pid != 0) then RECEIVE(&myA[0,0],n*sizeof(float),pid-1,ROW); 16d. if (pid != nprocs-1) then RECEIVE(&myA[n’+1,0],n*sizeof(float), pid+1,ROW); 17. for i ← 1 to n’ do /*for each of my (nonghost) rows*/ 18. for j ← 1 to n do /*for all nonborder elements in that row*/ 19. temp = myA[i,j]; 20. myA[i,j] = 0.2 * (myA[i,j] + myA[i,j-1] + myA[i-1,j] + 21. myA[i,j+1] + myA[i+1,j]); 22. mydiff += abs(myA[i,j] - temp); 23. endfor 24. endfor /*communicate local diff values and determine if done; can be replaced by reduction and broadcast*/ 25a. if (pid != 0) then /*process 0 holds global total diff*/ 25b. SEND(mydiff,sizeof(float),0,DIFF); 25c. RECEIVE(done,sizeof(int),0,DONE); 25d. else /*pid 0 does this*/ 25e. for i ← 1 to nprocs-1 do /*for each other process*/ 25f. RECEIVE(tempdiff,sizeof(float),*,DIFF); 25g. mydiff += tempdiff; /*accumulate into total*/ 25h. endfor 25i if (mydiff/(n*n) < TOL) then done = 1; 25j. for i ← 1 to nprocs-1 do /*for each other process*/ 25k. SEND(done,sizeof(int),i,DONE); 25l. endfor 25m. endif 26. endwhile 27. end procedure AC II: Programación paralela (II) 58
Simulación de la Evolución de las Galaxias
¨ Simulación de las interacciones de las estrellas en el tiempo. ¨ El cálculo de fuerzas es caro.
¤ O(n2)
¤ Uso de métodos jerárquicos para minimizar costes O(n log n)
Star on which forcesare being computed
Star too close toapproximate
Small group far enough away toapproximate to center of mass
Large group farenough away toapproximate
AC II: Programación paralela (II) 59
Simulación dinámica molecular
AC II: Programación paralela (II) 60
Mostrar escenas utilizando Ray Tracing
Escena en tres dimensiones
Imagen en dos dimensiones
• Transformación 3D a 2D exige: • Cálculo de valores de color, opacidad, brillo
• Simulación de cómo llegan rayos de luz sobre cada pixel • Paralelismo ligado a los rayos de luz
AC II: Programación paralela (II) 61
AC II: Programación paralela (II) 62
Mostrar escenas utilizando Ray Tracing
Bibliografía
D. Culler, J. Pal Singh, A. Gupta. Parallel Computer Architecture. A Hardware/Software Approach. Morgan Kaufmann. Capítulo 2.
AC II: Programación paralela (II) 63
top related