1 / 130

. 4 . T IPOS DE P ROBLEMAS P ARALELOS. M ETODOLOGÍA DE D ESARROLLO DE P ROGRAMAS P ARALELOS.

. 4 . T IPOS DE P ROBLEMAS P ARALELOS. M ETODOLOGÍA DE D ESARROLLO DE P ROGRAMAS P ARALELOS. Índice. 1. Introducción. 2. Análisis de algoritmos. 3. Metodología de desarrollo de programas paralelos. 4. Esquemas de algoritmos paralelos. 5. Problemas numéricos. Librerías.

pilis
Download Presentation

. 4 . T IPOS DE P ROBLEMAS P ARALELOS. M ETODOLOGÍA DE D ESARROLLO DE P ROGRAMAS P ARALELOS.

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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. . 4 . TIPOS DE PROBLEMAS PARALELOS. METODOLOGÍA DE DESARROLLO DE PROGRAMAS PARALELOS.

  2. Índice 1. Introducción. 2. Análisis de algoritmos. 3. Metodología de desarrollo de programas paralelos. 4. Esquemas de algoritmos paralelos. 5. Problemas numéricos. Librerías.

  3. Los problemas que pueden resolverse mediante un algoritmo paralelo son, obviamente, muy heterogéneos. Suelen ser problemas de complejidad elevada, aún no perteneciendo al grupo de problemas intratables (el número de operaciones crece de forma rápida –p.e. exponencial– con el tamaño del problema).

  4. Dentro del conjunto de problemas tratables (el número de operaciones crece polinómicamente con el tamaño del problema) se suelen dar dos situaciones que hacen necesaria la programación paralela: - Problemas de gran dimensión - Problemas de tiempo real Otro tipo de problemas: problemas de gran desafío, por su relevancia social (genoma humano, meteorología, clima, fenómenos sísmicos…).

  5. Diferentes modelos sobre distintos aspectos de la programación paralela: - Modelo arquitectónico: arquitectura de la máquina -- multiprocesadores: memoria compartida -- multicomputadores: paso de mensajes -- modelos mixtos - Modelo de programación: herramientas de alto nivel (OpenMP, MPI). - Modelo de coste: permite evaluar el coste del algoritmo.

  6. Índice 1. Introducción. 2. Análisis de algoritmos. 3. Metodología de desarrollo de programas paralelos. 4. Esquemas de algoritmos paralelos. 5. Problemas numéricos. Librerías.

  7. En la programación paralela (al igual que en la secuencial) son necesarias herramientas que permitan estimar el tiempo de ejecución y la memoriaconsumidos por un algoritmo, para determinar si es adecuado o no para la resolución del problema. El objetivo es desarrollar algoritmos eficientes (eficiencia: relación entre los recursos que consume y los resultados que obtiene).

  8. Factores que influyen en el tiempo de ejecución de un programa: - el lenguaje de programación (el programador) - la máquina - el compilador (opciones) - los tipos de datos - los usuarios que estén trabajando en el sistema

  9. Factores que influyen en el tiempo de ejecución de un programa paralelo: - la competencia por la memoria (bloques de cache) - la fracción de código secuencial (Amdahl) - la creación/asignación de procesos - la computación extra: variables de control, identificación de procesos, cálculos adicionales… - la comunicación (para memoria distribuida) - la sincronización - los desequilibrios de carga

  10. Estudio del algoritmo a priori Antes de hacer el programa correspondiente. Sirve para identificar si el algoritmo es adecuado para el problema, o para seleccionar entre varios algoritmos. También sirve para determinar el tamaño de los problemas a resolver en función de las limitaciones de tiempo y memoria.

  11. Estudio a posteriori Tras haber hecho el programa. Sirve para comparar entre dos programas según el tamaño de entrada. También para encontrar fallos o posibles mejoras de un programa. Estudio teórico (a priori o posteriori) y estudio experimental (a posteriori).

  12. Tipos de estudios teóricos: Tiempo de ejecución (ej. ordenación) - caso más favorable, cota inferior: tm (n) - caso más desfavorable, cota superior:tM (n) - caso promedio: tp (n) donde: n es el tamaño de la entrada  es una entrada de las S posibles entradas

  13. Tipos de estudios teóricos: Ocupación de memoria - caso más favorable, cota inferior: mm (n) - caso más desfavorable, cota superior: mM (n) - caso promedio: mp (n) donde: n es el tamaño de la entrada  es una entrada de las S posibles entradas

  14. Conteo de instrucciones • - decidir qué instrucciones/operaciones (flop) se quieren contar. • - asignar costes a instrucciones de cada tipo. • - una función: coste de las instrucciones que la componen. • - bucles: mediante sumatorios o cotas superior e inferior si no se conoce el número de veces que se ejecutará. • - bifurcaciones: contar el número de veces que pasa por cada rama, o establecer una cota superior (rama más costosa) o una inferior (rama menos costosa).

  15. p (i,j) probabilidad de que la instruccióni se ejecute j veces Conteo de instrucciones (caso promedio) k número de instrucciones del programa tp(n,i) número promedio de veces que la instrucción i se ejecuta para una entrada de tamaño n

  16. Notación asintótica Dado que lo que interesa es saber cómo se comporta el algoritmo cuando crece el tamaño de la entrada (tamaños grandes), ya que es cuando podemos tener problemas de tiempo, se suelen utilizar notaciones asintóticas. Acotan la forma en que crece el tiempo de ejecución cuando el tamaño de la entrada tiende a infinito, sin tener en cuenta las constantes que le afectan.

  17. Acotar superiormente, orden de f: Acotar inferiormente, omega de f: Acotar sup. e inferiormente, orden exacto de f:

  18. Algunas relaciones entre órdenes: A nivel práctico, a veces interesa no perder la información de las constantes del término de mayor orden:

  19. Estimación del tiempo de ejecución real Conteo de instrucciones ¿? Factores que afectan al tiempo de ejecución de un programa paralelo:

  20. Tiempo de comunicación de un mensaje dividido en paquetes a distancia d: Tiempo de comunicación punto a punto entre dos procesadores: En general, conviene agrupar mensajes (full duplex?, red conmutada?, Ethernet…)

  21. Ejemplo: suma de n números s = a[0]; for(i=1; i<n; i++) s = s + a[i]; Tiempos de la versión secuencial: - conteo de instrucciones:t(n) = tcalc(n) = 2n - 1 - conteo de operaciones:t(n) = tcalc(n) = n - 1

  22. Ejemplo: suma de n números (memoria compartida) - una versión paralela con n/2 procesos doall pid = 0, n/2-1 { ini = 2 * pid; des = 1; act = true; for (k=1; k++; k <= log n) { if (act) { a[ini] = a[ini] + a[ini+des]; des = des * 2; } if ((i mod des)!=0) act = false; } }

  23. k = 1 6, 7 4, 5 2, 3 0, 1 4, 5, 6, 7 0, 1, 2, 3, 4, 5, 6, 7 0 0, 1, 2, 3 4 1 5 2 6 7 3 k = 2 … k = log n Ejemplo: suma de n números (memoria compartida) - una versión paralela con n/2 procesos (memoria compartida):

  24. Ejemplo: suma de n números (memoria compartida) Tiempos de la versión paralela (mem. compartida): - conteo de instrucciones:tcalc(n, n/2) = 3 + 6 log n - conteo de operaciones:tcalc(n, n/2) = log n (+ sincronización tras cada iteración) Problemas: - distribución del trabajo entre procesos - overheads = variables auxiliares, comprobaciones… - ley de Amdahl

  25. Ejemplo: suma de n números (memoria distribuida) - una versión paralela con n/2 procesos doall Pi, i = 0, n/2-1 { des = 1; act = true; for (k=1; k++; k<=log n -1) { if (act) { a = a + b; des = des * 2; if ((i mod des)!=0) { act = false; Envia (a, Pi-des/2); } else Recibe (b, Pi+des/2); } } if (i = 0) a = a + b; }

  26. Ejemplo: suma de n números (mem. distribuida) Tiempos de la versión paralela (mem. distribuida): - instrucciones:tcalc(n, n/2) = 4+6 (log n -1) - operaciones:tcalc(n, n/2) = log n - comunicación:tcom(n, n/2) = (log n -1) (ts + tw) (suponiendo comunicaciones directas y en paralelo) Problemas: - añade la comunicación y su gestión, cuyo coste puede influir más o menos

  27. Ejemplo: suma de n números (mem. distribuida) speed-up para n=64 y p=32 según relación entre ts, tw y top

  28. Algunas conclusiones: - No tiene sentido suponer p ilimitado para una entrada constante (eliminar la restricción n = 2p), n y p deben ser independientes. - No tiene sentido utilizar programación paralela para resolver problemas pequeños. Mejor resolverlos secuencialmente. En el ejemplo, el coste es lineal, y, por tanto, no es adecuado. - Dependiendo de la plataforma, un programa derivado de un algoritmo puede proporcionar unas prestaciones muy diferentes.

  29. Medidas de prestaciones: - Speed-up Ejemplo: suma de n números (instr./flops) - Memoria compartida - Memoria distribuida

  30. Ejemplo: suma de n números (flops) - Memoria compartida - Memoria distribuida Medidas de prestaciones: - Eficiencia

  31. Ejemplo: suma de n números (flops) - Memoria compartida - Memoria distribuida Medidas de prestaciones: - Coste - Función overhead:

  32. Función de isoeficiencia Indica la forma en la que debe aumentar el tamaño de la entrada en función del tamaño del sistema para mantener las prestaciones (despejar n en función de p). Escalabilidad Que se mantengan las prestaciones al aumentar p y el tamaño del problema.

  33. Ejemplo: suma de n números (flops) Memoria compartida - manteniendo proporcional el coste del secuencial a la función overhead: - comparando los términos de mayor orden: I(p) = p log p Memoria distribuida - manteniendo proporcional el coste del secuencial a la función overhead: - comparando los términos de mayor orden: I(p) = p log p

  34. Ejemplo: suma de n números (flops) - en ambos casos I(p) = p log p

  35. Índice 1. Introducción. 2. Análisis de algoritmos. 3. Metodología de desarrollo de programas paralelos. 4. Esquemas de algoritmos paralelos. 5. Problemas numéricos. Librerías.

  36. Es diferente paralelizar un algoritmo o programa secuencial, que programar en paralelo una aplicación desde el comienzo. En el primer caso, interesa detectar aquellas partes del código con un mayor coste computacional. Lo más habitual es utilizar trazas,timers, profiling, etc., y ejecutar en paralelo aquellas partes que ofrecen un buen rendimiento (por ejemplo, paralelismo incremental de OpenMP).

  37. En el segundo caso, se empieza analizando las carac-terísticas de la propia aplicación, para determinar el/losalgoritmos paralelos más adecuados. OJO: conviene partir de un buen algoritmo ya optimizado (¡no hay que reinventar la rueda!). Aunque no hay un “camino único”, se suele recomendar utilizar un determinado procedimiento o metodología.

  38. La programación paralela añade, respecto a la programación secuencial, una serie de aspectos a tener en cuenta: • - Concurrencia (sincronización, comunicación). • - Asignación de datos y código a procesadores. • - Acceso simultáneo a datos compartidos (sincronización). • - Escalabilidad.

  39. Otra diferencia entre la programación secuencial y la paralela es la forma en que los módulos que componen una aplicación se pueden ensamblar: • - Composición secuencial: los módulos se ejecutan secuencialmente. • - Composición paralela: diferentes módulos se ejecutan simultáneamente sobre conjuntos disjuntos de procesos (escalabilidad y localidad). • - Composición concurrente: diferentes módulos se ejecutan concurrentemente sobre los mismos procesos (solapamiento computación y comunicación).

  40. Particionado PROBLEMA Comunicación Aglomerado Mapeado Modelo PCAM

  41. Particionado PROBLEMA Descomposición (tareas+comunicación) Comunicación Aglomerado Asignación (tareas a procesos) Mapeado Modelo PCAM

  42. Descomposición La descomposición consiste en dividir el cálculo en partes de menor tamaño que vamos a denominar tareas, con el objetivo de ejecutarlas en paralelo. Según el tamaño (coste computacional) de las tareas se habla de: - granularidad fina (muchas tareas pequeñas). - granularidad gruesa (pocas tareas grandes).

  43. Descomposición Es deseable obtener un número suficientemente alto de tareas (grano fino) para tener más flexibilidad en la fase de asignación. En esta fase es fundamental tener en cuenta las dependencias entre las tareas y reflejarlas en un grafo de dependencias para poder estimar las necesidades de sincronizaciónyestructuradecomunicación que hay entre las tareas.

  44. Descomposición Ejemplo 1: Evaluación polinomial Se trata de evaluar, para un valor x = b, m funciones polinomiales de grado n fi (x) con i=0,…,m-1; y obtener el valor mínimo. Un posible reparto es asignar una tarea a la evaluación de cada polinomio (o conjunto de polinomios) y luego ir calculando el mínimo entre las tareas.

  45. (a) (b) f0(b) f0(b) f1(b) f1(b) f2(b) f2(b) min f3(b) min min min min min f3(b) 5 5 5 5 5 1 1 1 5 1 1 1 5 5 Descomposición Ejemplo 1: Evaluación polinomial Veamos dos grafos de dependencias entre las tareas (para el caso de 4 polinomios), con sus costes computacionales (cc=5 para evaluar y cc=1 para calcular el mínimo):

  46. gmc(grafo a) = 23/7 = 3,28 gmc(grafo b) = 23/8 = 2,875 Descomposición Mediante el grafo de dependencias se puede establecer el máximo gradode concurrencia de un algoritmo. Para caracterizar el paralelismo potencial de un algoritmo se suele calcular el grado medio de concurrencia (gmc), es decir, el número medio de tareas que se podrían ejecutar en paralelo. L: long. camino crítico cc: coste computacional

  47. f0(b) f1(b) f2(b) f3(b) min min min 5 5 1 1 5 1 5 Descomposición Para el ejemplo 1 (evaluación polinomial) el grafo con la estructura de comunicación necesaria para el caso de paso de mensajes sería: Lectura+reparto 4 4 4 4 1 1 1 1 Patrón de comunicación (recursiva) 1 1

  48. Descomposición Algunas técnicas de descomposición - Descomposición de dominio (salida/entrada/bloques) - Descomposición funcional (flujo de datos) - Descomposición recursiva - Descomposición exploratoria - Descomposición especulativa

  49. Ejemplo 2: diferencias finitasJacobi Patrón de comunicación Descomposición Algunas técnicas de descomposición - Descomposición de dominio - Centrada en los datos de salida

  50. Descomposición Algunas técnicas de descomposición - Descomposición de dominio - Centrada en los datos de entrada  Ejemplo 3: Producto escalar de dos vectores Producto escalar de vectores de longitud n con p tareas Suma final patrón recursivo (≈ ejemplo1)

More Related