Table Of ContentIntroducción a la
Computación Paralela
J. Aguilar, E. Leiss
Introducción a la Computación Paralela J. Aguilar, E. Leiss
Introducción a la Computación Paralela
© 2004 – J. Aguilar, E. Leiss
Autores:
Jose Lisandro Aguilar Castro
CEMISID, Departamento de Computación
Universidad de Los Andes
Mérida, Venezuela
Ernst Leiss
Department of Computer Science
University of Houston,
Texas, USA
1ra Edición, 2004
“RESERVADOS TODOS LOS DERECHOS”
Depósito Legal: LF395920040041698
ISBN: 980-12-0752-3
Esta publicación ha sido realizada gracias al apoyo financiero del Consejo de Desarrollo
Científico, Humanístico y Tecnológico de la Universidad de Los Andes
Diagramación Electrónica: Miguel Rodríguez
Diseño de Portada: Rossana Ríos
Impreso en: Graficas Quinteto
Mérida, Venezuela
2
Introducción a la Computación Paralela J. Aguilar, E. Leiss
Este es uno de los primeros libros en español que hace una descripción amplia del área
Computación Paralela. El libro comienza presentando los modelos de paralelismo, así
como uno de los problemas fundamentales del área, la comunicación. Después
caracteriza las posibles fuentes de paralelismo, así como algunas metodologías para
desarrollar aplicaciones paralelas. El libro presenta aspectos fundamentales de las
plataformas paralelas, tales como la asignación y planificación de tareas, la dependencia
de datos y posibles transformaciones de código, las medidas de rendimiento usadas, entre
otros, todos ellos a ser considerados por sus Sistemas Operativos y/o Compiladores. Es
un libro que puede ser usado por estudiantes culminando carreras en el ámbito de las
Ciencias Computacionales o que están iniciando estudios de Maestría en esa área.
Los autores, Septiembre 2004
3
Introducción a la Computación Paralela J. Aguilar, E. Leiss
Indice
Capítulo 1. Elementos Introductorios
1.1. Motivación 10
1.2. Historia 15
1.3. Clasificaciones 17
1.3.1. Clasificación de Flynn 18
1.3.2. Modelo basado en la organización de la Memoria 21
1.3.3. Modelo basado en la Coordinación 25
1.4. Comunicación 30
1.4.1. Pase de Mensajes 30
1.4.2. Exclusión Mutua 34
1.4.3. Redes de Interconexión 34
1.4.3.1. Redes de Interconexión para Maquinas a Memoria Compartida 35
1.4.3.2. Redes de Interconexión para Maquinas a Memoria Distribuida 40
1.4.3.3. Otros Aspectos Comunicacionales 44
1.5. Tendencias 46
1.5.1. En Arquitecturas 46
1.5.2. En Aplicaciones 47
1.5.3. En Redes de Interconexión 48
Capítulo 2. Caracterización del Paralelismo
2.1. Generalidades 51
2.2. Perfil de Paralelismo 52
2.2.1. Granularidad 52
2.2.2. Grado de Paralelismo 54
2.3. Fuentes de Paralelismo 54
2.3.1. Paralelismo de Control 56
2.3.2. Paralelismo de Datos 58
2.3.3. Paralelismo del Flujo de Ejecución 63
2.4. Comparación entre los Enfoques 64
2.5. Aspecto de Diseño de los Programas Paralelos 66
2.5.1. Paralelizando un Programa Secuencial 67
2.5.1.1. Paralelización Automática 67
2.5.1.2. Librerías Paralelas 68
2.5.1.3. Recodificación de Partes 68
2.5.2. Desarrollando un Programa Paralelo Nuevo 69
2.5.3. Paradigmas de Programación Paralela 69
2.6. Metodología de Programación 71
2.6.1. Generalidades 71
2.6.2. Metodología 75
2.6.2.1. Mecanismo Espiral 76
2.6.2.2. Descomposición 76
2.6.2.3. Comunicación 81
2.6.2.4. Agrupamiento 81
2.6.2.5. Asignación 84
4
Introducción a la Computación Paralela J. Aguilar, E. Leiss
Capítulo 3. Ciertos Problemas en Computación Paralela/Distribuida
3.1. Problema de Planificación en los Sistemas Distribuidos/Paralelos 85
3.1.1. Planificación de Tareas de Programas Paralelos/Distribuidos 87
3.1.2. Planificación de las Operaciones de Entrada/Salida 90
3.1.3. Planificación de Lazos de Ejecución 94
3.1.3.1. Planificación de Lazos Paralelos 95
3.1.3.2. Lazos con Dependencia de Datos entre Iteraciones 97
3.1.3.2.1. Descomposición de Lazos 99
3.1.4. Planificación de Estructuras Condicionales 101
3.2. Problema de Asignación de Tareas en los Sistemas Distribuidos/Paralelos 102
3.2.1. Definición de una Función de Costo General 106
3.2.2. Diferentes Restricciones en los Sistemas Distribuidos/Paralelos 108
3.2.3. Ejemplos de Uso de la Función de Costo sobre Diferentes
Arquitecturas Distribuidas/Paralelas 109
3.3. Asignación de Datos 109
3.3.1. Problema de Asignación de Archivos 109
3.3.2. Problema de Replicación de Archivos 110
3.4. Distribución de Carga de Trabajo 110
3.4.1. Equilibrio de la Carga de Trabajo 116
3.5. Partición de Datos/Programas 117
3.5.1. Descomposición de Programas 117
3.5.2. Problema de Descomposición de Archivos 118
3.6. Mecanismo de Migración 118
3.7. Manejo de la Memoria 119
3.7.1. Bancos de Memoria 121
3.7.2. Memorias Cache 124
3.7.2.1. Coherencia de Memorias en Sistemas Multiprocesadores 127
3.7.2.2. Políticas de Reemplazo 129
3.8. Tolerancia a Fallas 131
Capítulo 4. Análisis de Dependencia y Técnicas de Transformación
4.1. Generalidades 134
4.2. Dependencia de Datos 136
4.2.1. Análisis Escalar 141
4.2.2. Dependencia en los Lazos 142
4.2.3. Test de Dependencias de Datos 153
4.2.3.1. Análisis Diofantino 154
4.2.3.2. Test Inexacto 156
4.2.3.3. Test de Dependencia usando el Vector de Dirección 158
4.2.3.4. Teoremas de Verificación de Dependencias 159
4.3. Técnicas de Transformación 161
4.3.1. Transformación DOALL 164
4.3.2. Distribución de Lazos 165
4.3.3. Intercambio de Lazos 167
4.3.4. Eliminación de Dependencias de Salidas y Antidependencias 173
4.3.5. Fusión de Lazos 176
4.3.6. Torsión de Lazos 178
4.3.7. Otras Técnicas de Transformación 181
4.3.7.1. Alineación y Replicación 181
4.3.7.2. Destapar Minas y Unir lazos 182
4.3.7.3. Partición de Nodos 185
4.3.7.4. Encoger Lazos 186
4.3.7.5. Desenrollar Lazos 187
4.4 Remarcas Finales 188
5
Introducción a la Computación Paralela J. Aguilar, E. Leiss
Capítulo 5. Medidas de Rendimiento
5.1. Introducción 192
5.2. Aceleración y Eficiencia 193
5.3. Escalabilidad 204
5.4. Complejidad Algoritmica Paralela 206
5.5. Puntos de Referencia o Programas de Comparación del Rendimiento (Benchmarks) 216
5.6. Otros Aspectos de Rendimiento 219
Capítulo 6. Ejemplos de Programas Paralelos
6.1. Producto de Dos Vectores 224
6.2. Paralelización de un Lazo Livermore 225
6.3. Paralelización de la Multiplicación de Matrices 227
6.4. Paralelización del Algoritmo de los Números Primos 229
6.5. Dependencia del Vecino más Cercano 230
6.6. Búsqueda 233
6.7. Algoritmo de Búsqueda del Camino más Corto 233
6.8. Paralelización de LINPACK 235
6.9. Inversión de una Matriz 239
6.10 Operaciones de Reducción 240
Bibliografía 242
Glosario 245
6
Introducción a la Computación Paralela J. Aguilar, E. Leiss
Indice de Figuras
Capítulo 1. Elementos Introductorios
1.1. Eras de la Computación
1.2. Arquitectura tipo SISD (Máquina Von-Neumann).
1.3. Arquitectura tipo SIMD.
1.4. Arquitectura tipo MISD.
1.5. Arquitectura tipo SIMD-Memoria Distribuida.
1.6. Arquitectura tipo MIMD-Memoria Compartida.
1.7. Arquitectura tipo MIMD-Memoria Distribuida.
1.8. Una posible arquitectura tipo MIMD-Distribuida-Compartida.
1.9. Encauzamiento.
1.10. Comparación entre procesamiento serial, encauzado y paralelo.
1.11. Arreglo Sistólico en Multiplicación de Matrices.
1.12. Un Conmutador con dos posibles modos de funcionamiento
1.13. Bus.
1.14. Redes a 1 etapa (3x6)
1.15. Red Clos (2,2,2)
1.16. Red conectada en Cubo para 8 procesadores y Bancos de Memoria
1.17. Operación shuffle-exchange
1.18. Red Omega
1.19. Lineal.
1.20. Malla M(3, 7).
1.21. Toro T(3, 3).
1.22. Hipercubo de dimensión 3.
1.23. Redes De Bruijn
1.24. Red Arbol Binario
1.25. Hilos
Capítulo 2. Caracterización del Paralelismo
2.1. Modo Concurrente
2.2. Modo Paralelo
2.3. Aumento de la granularidad en el problema de multiplicación de matrices
2.4. Dependencia de Tareas
2.5. Paralelismo de Datos
2.6. Esquemas de distribución de los datos sobre los procesadores
2.7. Comparación del paralelismo de control contra el paralelismo de flujo
2.8. Comparación de las diferentes fuentes de paralelismo
2.9. Paralelización Automática
2.10. Librerías Paralelas
2.11. Recodificación del Código Secuencial
2.12 Paradigma Arbol Binario.
(x+z)3- (x+z)2
2.13. Flujo de Ejecución del programa que calcula f(x,y,z)= .
yz
(x+z)3- (x+z)2
2.14. Asignación para el programa que calcula f(x,y,z)=
yz
2.15. Asignación Optima para el programa que calcula
(x+z)3- (x+z)2
f(x,y,z)= en una Maquina MIMD tipo Malla.
yz
2.16. Metodología de Desarrollo de Aplicaciones Paralelas.
7
Introducción a la Computación Paralela J. Aguilar, E. Leiss
2.17. Pasos claves del proceso de diseño.
2.18. Posibles particiones de una matriz.
2.19. Multiplicación de matrices según una partición por Columnas.
2.20. Descomposición Funcional para el Problema del Calculo del Integral
2.21. Estructura Programada de un compilador de un lenguaje de alto nivel
2.22. Calculo del Integral con Desequilibrio de la Carga de Trabajo.
2.23. Posibles particiones de un Arbol
2.24. Costos Comunicacionales
2.25. Cálculos Redundantes
2.26. Distribución del trabajo
Capítulo 3. Ciertos Problemas en Computación Paralela/Distribuida
3.1. Sistema de Planificación
3.2. Elementos necesarios en la tarea de Planificación
3.3. Planificación de tareas considerando los tiempos de comunicación
3.4. Problema de Optimización de Ejecución de las Operaciones de E/S
3.5. Planificación de E/S.
3.6. Dos ejemplos de Asignación de Lazos Paralelos
3.7. Planificación sobre 3 procesadores basada en una descomposición de los lazos
3.8. Un esquema de Planificación de Lazos Paralelos basado en una cola central
3.9. Un grafo de lazos de tareas
3.10. Un Grafo de Tareas Replicadas para el Grafo de Lazos de Tareas de la
figura 3.9 y u={1, 1}.
3.11. Posibles Planificaciones del Grafo de tareas replicados para u={1, 1}
3.12. Un ejemplo de Planificación de una Estructura Condicional
3.13. Asignación de Tareas
3.14. Asignación de un Arbol Binario sobre una Red tipo Malla
3.15. Problema de la Distribución de la carga de trabajo
3.16. Distribución de la carga usando la técnica de Difusión
3.17. Efecto por equilibrar la carga de trabajo
3.18. Organización de la Memoria
3.19. Bancos de Memoria
3.20. Eficiencia de los Bancos de Memoria
3.21. Asignación de datos continuos en los Bancos de Memoria según diferentes
esquemas de direccionamiento.
3.22. Efecto de agregar una columna en una matriz
3.23. Definición del Banco de Inicio
3.24. Organización de una Memoria Cache en un entorno Distribuido
3.25. Protocolo de Respaldo Primario en la Operación Escribir
Capítulo 4. Análisis de Dependencia y Técnicas de Transformación
4.1 Grafo de dependencia del ejemplo 4.6
4.2 Grafo de dependencia del ejemplo 4.2
4.3. Grafo de dependencia del ejemplo 4.8
4.4. Espacio de iteraciones del ejemplo 4.19.
4.5. Grafo de Dependencia en el Espacio de iteraciones del ejemplo 4.20.
4.6. Ejemplos de direcciones de dependencias.
4.7. Grafo de Dependencia para el ejemplo 4.21.
4.8. Grafo de Dependencia del ejemplo 4.23.
4.9. Dependencias especificas del ejemplo 4.23.
4.10. Grafo de dependencia para el ejemplo 4.24.
4.11. Grafo de dependencia del ejemplo 4.25
4.12. Jerarquía de Direcciones para dos lazos anidados.
8
Introducción a la Computación Paralela J. Aguilar, E. Leiss
4.13. Grafo de Dependencia del ejemplo 4.40.
4.14. Los cuatro tipos de dependencias para el ejemplo 4.42.
4.15. Ordenes de ejecución del ejemplo 4.46 antes y después del intercambio.
4.16. Grafo de dependencia del ejemplo 4.48.
4.17. Nuevo Grafo de dependencia del ejemplo 4.48.
4.18. Ordenes de ejecución del ejemplo 4.49.
4.19. Espacio de iteraciones del ejemplo 4.51.
4.20. Grafo de dependencia del ejemplo 4.55.
4.21. Grafo de dependencia del código modificado del ejemplo 4.55.
4.22. Grafo de dependencia del ejemplo 4.56.
4.23. Grafo de dependencia del código modificado del ejemplo 4.56.
4.24. Grafo del espacio de direcciones del ejemplo 4.61.
4.25. Nuevo grafo del espacio de direcciones del ejemplo 4.61.
4.26. Espacio de iteraciones del ejemplo 4.62.
4.27. Nuevo espacio de iteraciones del código transformado.
4.28. Espacio de iteraciones del ejemplo 4.68 antes (a) y después (b) de la unión.
4.29. Grafo de Dependencia del ejemplo 4.69.
4.30. Espacio de iteraciones del ejemplo 4.71 antes (a) y después (b) de la
transformación.
Capítulo 5. Medidas de Rendimiento
5.1. Rendimiento de Sistemas Paralelos (S vs P)
5.2. Cuando se puede escalar una arquitectura.
5.3. Limite de la aceleración paralela de la "ley de Amdahl" y su desarrollo en el tiempo
5.4. Saturación arquitectónica S vs. N
5.5. Curvas de la aceleración que miden la utilidad de la computación paralela.
5.6 El árbol del calculo del máximo del ejemplo 5.3.
5.7. Grafo de dependencia del ejemplo 5.5.
5.8. Solapar la comunicación con la computación
Capítulo 6. Ejemplos de Programas Paralelos
6.1. Partición de los vectores a multiplicar
6.2. Paralelización de un lazo Livermore
6.3. Paralelización de la Multiplicación de Matrices
6.4. Otro esquema paralelo de Multiplicación de Matrices
6.5. Dependencia de Vecinos
6.6. Paralelizacion del calculo de la diferencia finita en una dimensión
6.7. Versión paralela del Algoritmo de Floyd basada en una descomposición
en una dimensión
6.8. Versión paralela del Algoritmo de Floyd basada en una descomposición
en dos dimensiones
6.9. Paralelización del algoritmo de LINPACK según un esquema round robin
de asignación de trabajo, para 4 procesadores.
6.10. implementación paralela del método de Eliminación de Gauss
6.11. Esquema paralelo de Reducción
9
Introducción a la Computación Paralela J. Aguilar, E. Leiss
Capítulo 1.
Elementos Introductorios
1.1 Motivación
El procesamiento paralelo es un tipo de procesamiento de la información, que permite
que se ejecuten varios procesos concurrentemente [5, 10, 17, 30, 35]. El procesamiento
paralelo puede ser de diferentes tipos: i) Un tipo es ejecutar procesos independientes
simultáneamente, los cuales son controlados por el sistema operativo (usando tiempo
compartido, multiprogramación y multiprocesamiento). ii) Otro tipo es descomponer los
programas en tareas (controladas por el sistema operativo, los compiladores, los
lenguajes de programación, etc.), algunas de las cuales pueden ser ejecutadas en paralelo.
iii) Finalmente, el último tipo se basa en usar técnicas de encauzamiento para introducir
paralelismo a nivel de instrucciones, lo que implica dividirlas en pasos sucesivos que
pueden ser ejecutados en paralelo, cada uno procesando datos diferentes.
Es difícil determinar qué resulta más natural, sí el procesamiento paralelo o el
secuencial. Los enfoques paralelos resultan una necesidad, dada la constante afirmación
de que la velocidad máxima en procesamiento secuencial se alcanzará prontamente,
excepto que aparezcan avances en otras áreas que definan nuevos mecanismos de
procesamiento, los cuales pueden venir de nuevos descubrimientos en áreas tales como
computación AND, computación cuántica, etc. En los últimos años, el uso extensivo del
paralelismo ha estado ligada a varios hechos [2, 10, 13, 20]:
- La necesidad de mayor potencia de cálculo: independientemente de que la potencia
de los procesadores aumente, siempre habrá un limite que dependerá de la tecnología
del momento. Para aumentar la potencia de cálculo, además de los progresos
tecnológicos que permitan aumentar la velocidad de cálculo, se requieren nuevos
paradigmas basados en cálculo paralelo. Es decir, una manera de aumentar la
velocidad de cálculo es usar múltiples procesadores juntos. Así, un problema es
dividido en partes, cada una de las cuales es ejecutada en paralelo en diferentes
procesadores. La programación para esta forma de cálculo es conocida como
programación paralela, y las plataformas computacionales donde pueden ser
ejecutadas estas aplicaciones son los sistemas paralelos y distribuidos. La idea que se
usa es que al tener n computadores se debería tener n veces más poder de cálculo, lo
que conllevaría a que el problema pudiera resolverse en 1/n veces del tiempo
requerido por el secuencial. Por supuesto, esto bajo condiciones ideales que
raramente se consiguen en la práctica. Sin embargo, mejoras sustanciales pueden ser
alcanzadas dependiendo del problema y la cantidad de paralelismo presente en el
mismo.
10
Description:plataformas paralelas, tales como la asignación y planificación de tareas, la dependencia Ciertos Problemas en Computación Paralela/Distribuida.