Mpi Spanish

Embed Size (px)

Citation preview

Procesamiento Paralelo en Redes Linux Utilizando MPIAlumno: Vicente F. Reyes Puerta Director: Jose Antonio Jimnez Milln Julio 2003

2

ResumenEl presente documento realiza un estudio de investigacin que aborda el procesamiento paralelo en redes de ordenadores. De esta manera se analiza la utilizacin de los clusters (grupos de ordenadores conectados en red) a modo de computador virtual paralelo como plataforma para la ejecucin de aplicaciones paralelas. El entorno utilizado para realizar dicho estudio es el sistema operativo Linux, el cual ofrece todas las facilidades de acceso a dispositivos y comunicacin necesarias para la ejecucin de los algoritmos paralelos. Para la implementacin de los algoritmos paralelos desarrollados hemos utilizado la interfaz MPI (Message Passing Interface, Interfaz de Paso de Mensajes). Dicha interfaz es un estndar que dene la sintaxis y la semntica de las funciones contenidas en una librera de paso de mensajes diseada para ser usada en programas que exploten la existencia de mltiples procesadores. De este modo no slo conseguimos que el desarrollo de los algoritmos sea ms claro y sencillo, si no que adems logramos que sean portables. El estudio realizado queda dividido en tres partes diferenciadas que coinciden con la estructura del documento. En un principio hacemos un estudio general sobre el procesamiento paralelo, y establecemos una clasicacin detallada sobre los distintos tipos de paralelismo existentes en la actualidad. En la segunda parte realizamos un anlisis detallado de la interfaz de paso de mensajes MPI, ejemplicando la informacin ofrecida con diversos algoritmos escritos en C que realizan cmputos paralelos utilizando dicha interfaz. Por ltimo generamos un estudio de los resultados obtenidos en las ejecuciones explicando paso a paso la manera en la que han sido cosechados.

3

4

ndice generalObjetivos DesarrolloI III

I Sistemas de Procesamiento Paralelo1. Introduccin 1.1. Utilidades del Procesamiento Paralelo . . . . . . . 1.2. Deniciones Bsicas . . . . . . . . . . . . . . . . 1.2.1. Caractersticas Fsicas de la Comunicacin 1.2.2. Estndares Relacionados . . . . . . . . . . 1.3. Clasicacin Sistemas Paralelos . . . . . . . . . . 1.3.1. Paralelismo Implcito o de Bajo Nivel . . . 1.3.2. Paralelismo Explcito o de Alto Nivel . . . 1.4. Arquitecturas Basadas en Paralelismo Implcito . . 1.4.1. Segmentacin o pipeline . . . . . . . . . . 1.4.2. Tecnologa SWAR . . . . . . . . . . . . . 1.4.3. Procesadores Auxiliares . . . . . . . . . . 1.5. Arquitecturas Basadas en Paralelismo Explcito . . 1.5.1. Multiprocesadores . . . . . . . . . . . . . 1.5.2. Multicomputadores . . . . . . . . . . . . 1.5.3. Procesadores Matriciales . . . . . . . . . 1.5.4. Procesadores Vectoriales . . . . . . . . . . 2. Herramientas Desarrollo Software Paralelo 2.1. Modelos de Interaccin entre Procesadores 2.1.1. Paso de Mensajes . . . . . . . . . . 2.1.2. Memoria Compartida . . . . . . . . 2.2. Utilidades de Desarrollo . . . . . . . . . . 2.2.1. PVM . . . . . . . . . . . . . . . . 2.2.2. MPI . . . . . . . . . . . . . . . . 2.2.3. P4 . . . . . . . . . . . . . . . . . . 2.2.4. Express . . . . . . . . . . . . . . . 2.2.5. Linda . . . . . . . . . . . . . . . . 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13 3 4 4 5 6 6 7 9 9 13 15 19 19 26 37 38 43 43 43 46 49 49 50 51 52 53

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

6

NDICE GENERAL

II

Gua MPI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5557 57 58 59 62 62 62 63 64 64 67 67 68 69 69 70 70 71 73 73 74 76 77 78 79 80 80 80 86 93 93 94 96 97 98 105 105 106 107 110

3. El Estndar MPI 3.1. Origen . . . . . . 3.2. Historia . . . . . 3.3. Objetivos . . . . 3.4. Usuarios . . . . 3.5. Plataformas . . . 3.6. Versiones . . . . 3.6.1. MPI-1 . . 3.6.2. MPI-2 . . 3.7. Implementaciones

4. Conceptos Bsicos 4.1. Algoritmo Hola Mundo! . . . . . . . . . 4.2. Programas MPI en General . . . . . . . . 4.3. Informndonos del Resto del Mundo . . . 4.4. El Problema de la Entrada/Salida . . . . . 4.5. Ubicacin de los Procesos . . . . . . . . 4.6. Informacin Temporal . . . . . . . . . . 4.7. Implementacin Algoritmo Hola Mundo!

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

5. Paso de Mensajes 5.1. Algoritmo Clculo de reas mediante Montecarlo . . . 5.2. El Entorno del Mensaje . . . . . . . . . . . . . . . . . 5.3. Funciones de Paso de Mensajes Bloqueantes . . . . . . 5.4. Funciones de Paso de Mensajes No Bloqueantes . . . . 5.5. Agrupaciones de Datos . . . . . . . . . . . . . . . . . 5.5.1. Tipos Derivados . . . . . . . . . . . . . . . . 5.5.2. Vectores . . . . . . . . . . . . . . . . . . . . . 5.6. Implementacin Clculo de reas mediante Montecarlo 5.6.1. Implementacin con Mensajes Bloqueantes . . 5.6.2. Implementacin con Mensajes No Bloqueantes 6. Comunicacin Colectiva 6.1. Algoritmo Regla del Trapecio . . . . . 6.2. Distribucin y Recoleccin de los Datos 6.3. Operaciones de Comunicacin Colectiva 6.4. Operaciones de Reduccin . . . . . . . 6.5. Implementacin Regla del Trapecio . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

7. Comunicadores y Topologas 7.1. Algoritmo Multiplicacin de Matrices de Fox . . . . 7.2. Comunicadores . . . . . . . . . . . . . . . . . . . . 7.3. Trabajando con Grupos, Contextos y Comunicadores 7.4. Particionamiento de los Comunicadores . . . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

NDICE GENERAL

7

7.5. Topologas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 7.6. Divisin de Rejillas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 7.7. Implementacin Multiplicacin de Matrices de Fox . . . . . . . . . . . . . . 114

III Anlisis del Rendimiento8. Evaluacin del Sistema 8.1. Utilidad mpptest . . . . . . . . . . . . . . . . . . . . . . . 8.1.1. Compilacin y Ejecucin . . . . . . . . . . . . . . 8.1.2. Formatos de Salida . . . . . . . . . . . . . . . . . 8.1.3. Visualizacin . . . . . . . . . . . . . . . . . . . . 8.1.4. Grcos . . . . . . . . . . . . . . . . . . . . . . . 8.1.5. Operaciones . . . . . . . . . . . . . . . . . . . . . 8.2. Pruebas Realizadas . . . . . . . . . . . . . . . . . . . . . 8.2.1. Comunicacin Bloqueante . . . . . . . . . . . . . 8.2.2. Comunicacin No Bloqueante . . . . . . . . . . . 8.2.3. Participacin Total de los Procesos . . . . . . . . . 8.2.4. Solapamiento entre Comunicacin y Procesamiento 8.2.5. Comunicacin Colectiva . . . . . . . . . . . . . . 8.2.6. Fiabilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

125127 127 128 128 129 129 130 130 131 132 133 135 136 140 143 143 144 146 147 148 148 149 149 149 149 151 154 159 163 164 165 165 166 166 167 168 170

9. Evaluacin de los Algoritmos 9.1. Herramientas de Monitorizacin . . . . . . . . . . . . . . . . . . . . . . 9.1.1. Ficheros de Recorrido . . . . . . . . . . . . . . . . . . . . . . . 9.1.2. Trazado de la Ejecucin . . . . . . . . . . . . . . . . . . . . . . 9.1.3. Animacin en Tiempo Real . . . . . . . . . . . . . . . . . . . . 9.2. Criterios de Evaluacin . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.2.1. Tiempo de Ejecucin . . . . . . . . . . . . . . . . . . . . . . . . 9.2.2. Nmero de Procesadores . . . . . . . . . . . . . . . . . . . . . . 9.2.3. Coste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.3. Resultados Obtenidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.3.1. Algoritmo Clculo de reas mediante Montecarlo Bloqueante . . 9.3.2. Algoritmo Clculo de reas mediante Montecarlo No Bloqueante 9.3.3. Algoritmo Regla del Trapecio . . . . . . . . . . . . . . . . . . . 9.3.4. Algoritmo Multiplicacin de Matrices de Fox . . . . . . . . . . . A. Instalacin, Conguracin y Manejo de MPICH A.1. Dispositivos . . . . . . . . . . . . . . . . . . A.2. Obtencin . . . . . . . . . . . . . . . . . . . A.3. Compilacin e Instalacin . . . . . . . . . . A.4. Conguracin . . . . . . . . . . . . . . . . . A.4.1. El Fichero de Mquinas . . . . . . . A.4.2. RSH . . . . . . . . . . . . . . . . . . A.4.3. SSH . . . . . . . . . . . . . . . . . A.4.4. Secure Server . . . . . . . . . . . . .

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

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

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

8

NDICE GENERALA.5. Compilacin y Enlace de Programas . . . . . . . . . . . . . . . . . . . . . . 171 A.6. Ejecucin de Programas con mpirun . . . . . . . . . . . . . . . . . . . . . . 172 A.7. Extensin MPE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173

B. Manual de Referencia B.1. MPI_Bcast . . . . . . . . B.2. MPI_Cart_coords . . . . . B.3. MPI_Cart_create . . . . . B.4. MPI_Cart_rank . . . . . . B.5. MPI_Cart_sub . . . . . . . B.6. MPI_Comm_create . . . . B.7. MPI_Comm_group . . . . B.8. MPI_Comm_rank . . . . . B.9. MPI_Comm_size . . . . . B.10. MPI_Comm_split . . . . . B.11. MPI_Finalize . . . . . . . B.12. MPI_Get_processor_name B.13. MPI_Group_incl . . . . . B.14. MPI_Init . . . . . . . . . . B.15. MPI_Irecv . . . . . . . . . B.16. MPI_Isend . . . . . . . . . B.17. MPI_Recv . . . . . . . . . B.18. MPI_Reduce . . . . . . . B.19. MPI_Send . . . . . . . . . B.20. MPI_Sendrecv_replace . . B.21. MPI_Type_commit . . . . B.22. MPI_Type_struct . . . . . B.23. MPI_Type_vector . . . . . B.24. MPI_Wait . . . . . . . . . B.25. MPI_Waitall . . . . . . . . B.26. MPI_Waitany . . . . . . . B.27. MPI_Wtime . . . . . . . . Conclusiones Bibliografa Direcciones URL

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 208 209

ndice de guras1.1. 1.2. 1.3. 1.4. 1.5. 1.6. 1.7. 1.8. 1.9. 1.10. 1.11. 1.12. 1.13. 1.14. 1.15. 1.16. 1.17. 1.18. 1.19. Clasicacin Paralelismo Implcito . . . . . . . . . . Clasicacin Paralelismo Explcito . . . . . . . . . . Ciclo de Instruccin de 2 etapas (A) . . . . . . . . . Ciclo de Instruccin de 10 etapas . . . . . . . . . . . Ciclo de Instruccin de 2 etapas (B) . . . . . . . . . Cauce de 6 etapas . . . . . . . . . . . . . . . . . . . Procesamiento Digital de Seales . . . . . . . . . . . Esquema Multiprocesador . . . . . . . . . . . . . . Organizacin Bsica Bus de Tiempo Compartido . . Organizacin Bus de Tiempo Compartido con Cach Organizacin Memorias Multipuerto . . . . . . . . . Topologa Anillo . . . . . . . . . . . . . . . . . . . Topologa Malla . . . . . . . . . . . . . . . . . . . . Topologa rbol . . . . . . . . . . . . . . . . . . . . Topologa Hipercubo . . . . . . . . . . . . . . . . . Objetivo Procesamiento Paralelo en Clusters . . . . . Esquema Procesador Matricial . . . . . . . . . . . . Esquema Procesador Vectorial . . . . . . . . . . . . Cray SX-6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 7 9 10 11 12 16 19 20 21 22 27 27 27 28 30 37 40 41 44 47 51 57 74 75 95 132 134 135 137 139

2.1. Modelo Bsico para Paso de Mensajes . . . . . . . . . . . . . . . . . . . . . 2.2. Modelo Bsico para Memoria Compartida . . . . . . . . . . . . . . . . . . . 2.3. Esquema Bsico Utilizacin MPI . . . . . . . . . . . . . . . . . . . . . . . . 3.1. Logo MPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1. Generacin Puntos Aleatorios . . . . . . . . . . . . . . . . . . . . . . . . . 5.2. Clculo Hipotenusa Punto Aleatorio . . . . . . . . . . . . . . . . . . . . . . 6.1. Procesos estructurados en rbol . . . . . . . . . . . . . . . . . . . . . . . . . 8.1. 8.2. 8.3. 8.4. 8.5. Grco Comunicacin Bloqueante . . . . . . . . . Comparacin Com.Bloqueante - No Bloqueante . . Comparacin Com. Participativa - No Participativa Comparacin Com. Solapada - No Solapada . . . . Grco Comunicacin Colectiva . . . . . . . . . . 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10 9.1. 9.2. 9.3. 9.4. 9.5. 9.6. 9.7. 9.8. 9.9. 9.10. 9.11. 9.12. 9.13.

NDICE DE FIGURASAnimacin en Tiempo Real . . . . . . . . . . . . . . . . . . . Modelo Ejecucin Clculo de reas Bloqueante 8 Procesos . . Grco Tiempo Ejecucin Clculo de reas Bloqueante . . . Grco Coste Clculo de reas Bloqueante . . . . . . . . . . Modelo Ejecucin Clculo de reas No Bloqueante 8 Procesos Grco Tiempo Ejecucin Clculo de reas No Bloqueante . Grco Coste Clculo de reas No Bloqueante . . . . . . . . Modelo Ejecucin Regla del Trapecio 8 Procesos . . . . . . . Grco Tiempo Ejecucin Regla del Trapecio . . . . . . . . . Grco Coste Regla del Trapecio . . . . . . . . . . . . . . . . Comparacin Tiempos de distintas Cantidades de Procesos . . Comparacin Costes de distintas Cantidades de Procesos . . . Modelo Ejecucin Algoritmo de Fox 9 Procesos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 150 152 152 153 155 155 156 158 158 160 160 161

ndice de cuadros1.1. Dimetros Topologas Hipercubo y Malla . . . . . . . . . . . . . . . . . . . 1.2. Ejemplos Computadores Vectoriales . . . . . . . . . . . . . . . . . . . . . . 5.1. Tipos de Datos MPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1. Operaciones de Reduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 42 76 98

7.1. Particin Matriz 6*6 en 9 Procesos . . . . . . . . . . . . . . . . . . . . . . . 106 7.2. Topologa Fsica 3*3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 9.1. 9.2. 9.3. 9.4. Evaluacin Clculo de reas Bloqueante . . . Evaluacin Clculo de reas No Bloqueante . Evaluacin Regla del Trapecio . . . . . . . . Evaluacin Multiplicacin de Matrices de Fox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 154 157 159

11

12

NDICE DE CUADROS

ndice de algoritmos4.1. 5.1. 5.2. 6.1. 7.1. Hola Mundo! . . . . . . . . . . . . . . . . . . . . . . . Clculo de reas mediante Montecarlo (Bloqueante) . . Clculo de reas mediante Montecarlo (No Bloqueante) Regla del Trapecio . . . . . . . . . . . . . . . . . . . . Multiplicacin de Matrices de Fox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 . 81 . 86 . 98 . 114

13

14

NDICE DE ALGORITMOS

ObjetivosEl objetivo principal del presente proyecto de investigacin consiste en demostrar la utilidad y potencialidad del procesamiento paralelo, concretamente en lo relativo a su aplicacin en clusters (redes de computadores). Debemos probar con resultados reales y anlisis grcos la mejora en el rendimiento que produce la ejecucin paralela de determinados algoritmos.

Figura 1: Objetivo Procesamiento Paralelo en Clusters

Con el objeto de delimitar el campo de estudio lo primero que debemos hacer es situar el paralelismo basado en redes dentro de la amplia variedad de sistemas dedicados al procesamiento paralelo. Propondremos una clasicacin para los distintos tipos de paralelismo existentes en la actualidad, y explicaremos las caractersticas principales de cada uno de ellos. Un aspecto bsico para el desarrollo de la investigacin consiste en disear e implemetar un conjunto de algoritmos paralelos que pongan en prctica los tipos de comunicacin ms importantes que se dan en el procesamiento paralelo basado en redes. Para lograr este objetivo estudiaremos las caracterticas ms importantes de MPI (Message Passing Interface, Interfaz de Paso de Mensajes) y emplearemos dicha interfaz en el desarrollo de diversos algoritmos paralelos. Por ltimo haremos un estudio detallado de los resultados obtenidos en las ejecuciones de los algoritmos desarrollados, explicando paso a paso la manera en la que han sido realizados.I

II

OBJETIVOS

Dichos resultados sern utilizados para la generacin de grcos que nos ayuden a entender las importantes ventajas que nos aporta el procesamiento paralelo.

DesarrolloA continuacin explicaremos detenidamente el desarrollo de la investigacin llevada a cabo para la realizacin del presente proyecto. Dicho desarrollo coincide en la prctica con la estructura del documento realizado.

Sistemas de Procesamiento ParaleloEn primer lugar debemos llevar a cabo una visin general del procesamiento paralelo, para as poder valorar la importancia de este amplio campo de estudio. En el captulo 1 se estudian los conceptos bsicos relacionados con este modelo de procesamiento, y proponemos una clasicacin para los distintos tipos de paralelismo existentes en la actualidad, explicando las caractersticas principales de cada uno de ellos. Nuestra clasicacin divide el paralelismo de los computadores en dos grandes ramas:

La tcnicas de paralelismo implcito estn dirigidas al reforzamiento del nivel de concurrencia dentro de la CPU, de manera que queda oculta a la arquitectura del ordenador. Por lo tanto pueden ser vistos como sistemas de un slo procesador.

El paralelismo explcito o de alto nivel hace referencia a aquellos sistemas en los cuales se interconectan varios procesadores para cooperar en la ejecucin de los programas de aplicacin. Se trata de sistemas que ofrecen una infraestructura explcita para el desarrollo del software del sistema y aplicaciones que exploten el paralelismo. A este tipo de paralelismo dedicaremos el resto de la investigacin, centrndonos concretamente en las arquitecturas MIMD con memoria distribuida.III

Paralelismo implcito o de bajo nivel Paralelismo explcito o de alto nivel

Paralelismo Implcito

Segmentacin

Mltiples ALUs

Procesadores Auxiliares

Figura 1: Clasicacin Paralelismo Implcito

IV

DESARROLLO

Paralelismo Explcito

MISD(Procesadores Vectoriales)

SIMD(Procesadores Matriciales)

MIMD

Memoria Compartida Multiprocesadores (SMP)

Memoria Distribuida Multicomputadores (Cluster)

Figura 2: Clasicacin Paralelismo Explcito

Una vez resuelto el sistema de intercomunicacin fsica de los equipos, deben abordarse los mecanismos para lograr la coordinacin entre los procesadores. En el captulo 2 analizamos las caractersticas bsicas de los dos modelos de interaccin entre procesadores (paso de mensajes y memoria compartida), para luego centrarnos en las utilidades de desarrollo de software paralelo ms populares que existen en la actualidad: PVM, MPI, p4, Express y Lynda.

Gua MPILa segunda parte de nuestro estudio se centra en la utilizacin de la interfaz MPI (Message Passing Interface, Interfaz de Paso de Mensajes) para el desarrollo de aplicaciones paralelas. El estudio de la interfaz MPI comienza en el captulo 3 con una explicacin sobre el origen y la motivacin que promovieron la creacin del estndar. Por otro lado analizamos los contenidos del estndar, sus objetivos, su funcionamiento bsico y sus distintas versiones. Como vemos en la gura 3, MPI es implementado normalmente como interfaz de comunicaciones, utilizando las facilidades ofrecidas por el sistema que vayamos a usar (comunicacin va sockets, operaciones de memoria compartida, etc).MPI_Send() MPI_Recv()

MPI SO

MPI SO

Figura 3: Esquema Funcionamiento MPI

A continuacin en el captulo 4 vemos los conceptos bsicos sobre la utilizacin de MPI para el desarrollo de programas escritos en C. Todos los programas MPI comparten una serie de caractersticas. La inicializacin y nalizacin del entorno de ejecucin se llevan a cabo mediante funciones que explicaremos en este captulo. Tambin analizamos los mtodos para

V

identicar los procesos en ejecucin. Para ejemplicarlo escribiremos un sencillo programa en C que hace uso de funciones MPI para ejecutar una versin paralela del conocido algoritmo Hola Mundo!. El captulo 5 aborda la funcin ms importante y caracterstica del estndar MPI: el paso de mensajes. Se utiliza bsicamente para el intercambio de datos entre los procesos en ejecucin. En este captulo estudiamos las caractersticas ms importantes de los mensajes bloqueantes y no bloqueantes, aplicando dicha teora a la implementacin de un algoritmo diseado para el clculo de reas circulares. El algoritmo Clculo de reas mediante Montecarlo realiza una aproximacin del rea de una circunferencia con un radio determinado mediante la simulacin de variables aleatorias, empleando un mtodo estadstico (gura 4).

Figura 4: Algoritmo Clculo de reas mediante Montecarlo

Las operaciones de comunicacin colectiva son aquellas que se aplican al mismo tiempo a todos los procesos pertenecientes a un comunicador. Tienen una gran importancia en el estndar MPI, debido a la claridad de su sintaxis y a su eciencia. En el captulo 6 analizamos su utilidad y conveniencia implementando el algoritmo Regla del Trapecio de manera que haga un uso inteligente de dichas operaciones. El captulo 7 aborda el uso de comunicadores y topologas. Esta caracterstica hace a MPI diferente de la mayora de los dems sistemas de paso de mensajes. En pocas palabras, un comunicador es una coleccin de procesos que pueden mandarse mensajes entre ellos. Una topologa es una estructura impuesta en los procesos de un comunicador que permite a los procesos ser direccionados de diferentes maneras. Para ilustrar estas ideas desarrollaremos el cdigo que implementa el algoritmo de Fox para multiplicar dos matrices cuadradas mediante su subdivisin en una serie de procesos (cuadro 1).

Anlisis del RendimientoTodo el trabajo anteriormente realizado no tendra ningn sentido si no viniera avalado por unos resultados satisfactorios en la ejecucin de algoritmos paralelos. Para conseguir una cierta objetividad en el anlisis de los algoritmos ejecutados en un

VI

DESARROLLO

Cuadro 1: Subdivisin de Matrices Algoritmo de Fox

determinado sistema paralelo, lo primero que debemos hacer es medir el rendimiento de dicho sistema. Dicha medicin se realiza a travs de herramientas especializadas en el anlisis, de modo que podemos saber fcilmente y con seguridad cunto de apropiado es el sistema para la ejecucin de determinados algoritmos paralelos. En las guras 6 y 7 mostramos el rendimiento del sistema en la ejecucin de paso de mensajes bloqueantes y operaciones de comunicacin colectiva, respectivamente.Comunicacion Bloqueante 1200 Com.Bloqueante

1000

800 Tiempo (micro-seg)

600

400

200

0 0 200 400 600 Tamano (bytes) 800 1000 1200

Figura 6: Grco Comunicacin Bloqueante

# # ! "# # '! ! !

# # '! '!

# # (! '!

Proceso 6

Proceso 7

# ! " # " & !Proceso 8

&

%

Proceso 3

Proceso 4

# ! $ # " !Proceso 5

Proceso 0

Proceso 1

Proceso 2

VII

Comunicacion Colectiva Op.Reduccion-Entero 160000 32 256 512 1024

140000

120000

Tiempo (micro-seg)

100000

80000

60000

40000

20000

0 0 2 4 6 8 Num.Procesos 10 12 14 16

Figura 7: Grco Comunicacin Colectiva

El captulo 9 aborda el estudio de los resultados obtenidos en las ejecuciones explicando paso a paso la manera en la que han sido cosechados. Dichos resultados los analizaremos ms detenidamente en el apartado de conclusiones, ya que nos ayudan a demostrar el xito del presente proyecto de investigacin.

VIII

DESARROLLO

Parte I

Sistemas de Procesamiento Paralelo

1

Captulo 1

IntroduccinDenimos como procesamiento paralelo al concepto de agilizar la ejecucin de un programa mediante su divisin en fragmentos que pueden ser ejecutados simultneamente, cada uno en un procesador. De este modo un programa que se ejecute en procesadores podra ejecutarse veces ms rpido que usando un solo procesador, al menos en teora...

1.1. Utilidades del Procesamiento ParaleloAunque el uso de mltiples procesadores puede agilizar muchas operaciones, la mayora de las aplicaciones no estn diseadas para aprovechar los benecios del procesamiento paralelo. Bsicamente el procesamiento paralelo es apropiado para:

Aplicaciones con suciente paralelismo como para hacer bueno el uso de mltiples procesadores. El problema radica en identicar las porciones de programa que puedan ser ejecutadas independiente y simultneamente en procesadores separados; sto en realidad es complejo, ya que encontraremos aplicaciones que podran ser ejecutadas en paralelo y sin embargo se ralentizan al ser paralelizadas en un sistema particular. Por ejemplo, un programa que tarda 4 segundos en ser ejecutado en una sola mquina podra tardar 1 segundo de procesamiento en cada uno de los cuatro procesadores disponibles en una red, pero no lograramos nada si la coordinacin entre dichos procesadores tardase ms de 3 segundos.

Implementaciones de algoritmos que o bien ya son paralelos (escritos para obtener las ventajas del procesamiento paralelo) o bien esperamos paralelizar nosotros mismos, codicando de nuevo al menos alguna de sus partes.

Si nos encontramos en alguno de estos casos veremos que el procesamiento paralelo puede proporcionarnos el rendimiento de un supercomputador, aplicado a algunos programas que realizan complejas operaciones u operan en grandes bloques de datos. Y lo que es ms, ello se puede lograr con hardware relativamente barato. Adems es posible utilizar dichos sistemas paralelos para la realizacin de otros trabajos cuando no estn ocupados con una tarea en paralelo. 3

)

)

4

CAPTULO 1. INTRODUCCIN

Si no es el procesamiento paralelo lo que se busca, pero queremos mejorar el rendimiento de nuestra aplicacin, se pueden hacer multitud de cosas. En aplicaciones secuenciales podemos usar un procesador ms rpido, aadir memoria al sistema, etc.

1.2. Deniciones BsicasAunque el procesamiento paralelo haya sido utilizado durante muchos aos en una gran variedad de sistemas, todava no es familiar para la mayora de los usuarios. Antes de comenzar la discusin de las varias alternativas existentes para implementar el procesamiento paralelo, es importante precisar el signicado de algunos conceptos fundamentales.

1.2.1. Caractersticas Fsicas de la ComunicacinVelocidad de Transferencia de Datos En el campo de las redes de comunicacin el intercambio de informacin entre ordenadores se realiza generalmente mediante transmisiones analgicas. En una transmisin analgica el ancho de banda se dene como la diferencia mxima entre la frecuencia ms alta y ms baja de la seal sobre la que se transporta la informacin. Existe una relacin directa entre el ancho de banda y la velocidad de transmisin: cuanto mayor es el ancho de banda de un sistema de transmisin, mayor es la velocidad a la que se pueden transmitir los datos en el medio. Podemos denir la velocidad de modulacin de una seal analgica como el nmero de veces por segundo que la seal cambia su valor en la lnea o medio de transmisin. Esta velocidad se mide en baudios. El nmero de baudios determina la cantidad de cambios de estado por segundo que se producen en una transmisin. Cuantos ms estados, ms cantidad de bits por segundo se podrn transmitir. Denimos la velocidad de transmisin como el nmero de bits transmitidos por segundo. Su unidad es el bps (bits por segundo). En general si el nmero de estados posibles de la lnea bits de informacin. de comunicacin es , a cada estado le correspondern Imaginemos que en una red telefnica que funciona a 2400 baudios podemos transmitir 4 bits en cada baudio. En ese caso la velocidad de transmisin sera de 2400 baudios x 4 (bits/baudio) = 9600 bits por segundo. En la transmisin de informacin digital entre computadores es fundamental que aseguremos intercambios de datos libres de errores. El coste de sto estriba en que a la propia informacin a transmitir se le deben aadir otras informaciones adicionales para deteccin/correccin de errores, para establecer y controlar la comunicacin, etc. Aparece aqu un nuevo concepto de velocidad que llamaremos velocidad de transferencia de datos, y que representa la cantidad de informacin til que puede transmitirse por unidad de tiempo. Latencia En un sistema de comunicacin llamamos latencia al mnimo tiempo empleado en transmitir un dato, incluyendo la informacin de control necesaria para enviarlo o recibirlo. La latencia es muy importante en procesamiento paralelo porque determina el tamao granular, es decir,

) 4210 3

)

1.2. DEFINICIONES BSICAS

5

lo mnimo que debe tardar la ejecucin de un segmento de cdigo para que su ejecucin en paralelo sea rentable, hablando en trminos de rendimiento computacional. Bsicamente si un segmento de cdigo se ejecuta en menos tiempo del que se emplea en transmitir su resultado (latencia), entonces ser ms rpido ejecutar dicho segmento de cdigo de manera secuencial en el procesador que necesita dicho resultado; de este modo la ejecucin secuencial evitara la sobrecarga en la comunicacin.

1.2.2. Estndares RelacionadosIA32 El modelo IA32 (Intel Architecture, 32-bit) es una especicacin para microprocesadores que dene su arquitectura y funcionalidad, o lo que es lo mismo, su comportamiento desde el punto de vista del software. Dicha especicacin dene entre otros elementos las siguientes caractersticas de los microprocesadores:

Todos los microprocesadores Intel x86 (a partir del 80386) siguen el modelo IA32, incluidos los ms recientes: Pentium, P6, Pentium 4, Pentium M y Xeon. AMD y Cyrix tambin desarrollan multitud de procesadores compatibles con la arquitectura IA32. Dado que Linux se desarroll en principio en procesadores IA32, y dado que sta fue la manera en que se centr en el mercado, es conveniente usar dicha denominacin IA32 para distinguir este tipo de procesadores de los PowerPC, Alpha, PA-RISC, MIPS, SPARC, etc. RAID Como en otras reas de rendimiento en los computadores, los diseadores de memorias de disco reconocen que si uno de los componentes slo puede alcanzar un determinado lmite, se puede conseguir una ganancia en prestaciones adicional usando varios de esos componentes en paralelo. En el caso de las memorias de disco, esto conduce al desarrollo de conjuntos de discos que operen independientemente y en paralelo. Siguiendo este principio, el esquema RAID (Redundant Array of Independent Disks, Conjunto Redundante de Discos Independientes) es una tecnologa sencilla para mejorar tanto el ancho de banda como la abilidad de la E/S a disco. Consta de 6 niveles independientes, desde 0 hasta 5. Estos niveles no implican una relacin jerrquica, pero designan diseos de arquitecturas diferentes que poseen tres caractersticas comunes:

Los modos de operacin La organizacin de la memoria La estructura de los registros El direccionamiento de los operandos Los tipos de datos El conjunto de instrucciones Interrupciones y excepciones

6

CAPTULO 1. INTRODUCCIN

Paralelismo Implcito

Segmentacin

Mltiples ALUs

Procesadores Auxiliares

Figura 1.1: Clasicacin Paralelismo Implcito 1. 2. 3. RAID es un conjunto de unidades fsicas de disco vistas por el sistema operativo como una nica unidad lgica. Los datos se distribuyen a travs de las unidades fsicas de un conjunto. La capacidad de los discos redundantes se usa para almacenar informacin de paridad, que garantice la recuperacin de los datos en caso de fallo de disco.

Los detalles de la caracterstica segunda y tercera cambian segn los distintos niveles de RAID. RAID 0 no soporta la tercera caracterstica. Linux soporta los estndares RAID 0, 1, 4 y 5 adems de hardware RAID especializado.

1.3. Clasicacin Sistemas ParalelosEn general, se puede dividir el paralelismo de los computadores en dos grandes ramas:

1.3.1. Paralelismo Implcito o de Bajo NivelLa tcnicas de paralelismo implcito estn dirigidas al reforzamiento del nivel de concurrencia dentro de la CPU, de manera que queda oculta a la arquitectura del ordenador. Por lo tanto pueden ser vistos como sistemas de un slo procesador. Como ejemplos de paralelismo de bajo nivel estn:

Paralelismo implcito o de bajo nivel Paralelismo explcito o de alto nivel

Segmentacin o pipeline: La ejecucin de cada instruccin se divide en una secuencia de etapas, de forma que varias instrucciones pueden ejecutarse en paralelo, cada una en una etapa distinta de su ejecucin. Mltiples Unidades Funcionales en el Procesador: La repeticin de ALUs permite una aproximacin superescalar, con la ejecucin paralela de varias instrucciones, todas en la misma etapa de su ejecucin. Un procesador superescalar es aquel en el que las instrucciones comunes (aritmtica entera y en punto otante, cargas, almacenamientos y bifurcaciones condicionales) pueden iniciar su ejecucin simultneamente y ejecutarse de manera independiente. Estas implementaciones plantean problemas complejos de

1.3. CLASIFICACIN SISTEMAS PARALELOS

7

Paralelismo Explcito

MISD(Procesadores Vectoriales)

SIMD(Procesadores Matriciales)

MIMD

Memoria Compartida Multiprocesadores (SMP)

Memoria Distribuida Multicomputadores (Cluster)

Figura 1.2: Clasicacin Paralelismo Explcito diseo relacionados con el cauce de instrucciones. En esta lnea, la tecnologa SWAR consiste en agilizar las operaciones en registros de enteros mediante la divisin de dichos registros en una serie de campos de igual longitud, asignando una ALU a cada uno de los campos y realizando la ejecucin paralelamente. En este caso se ejecuta la misma instruccin sobre distintos datos en paralelo.

1.3.2. Paralelismo Explcito o de Alto NivelEl paralelismo explcito o de alto nivel hace referencia a aquellos sistemas en los cuales se interconectan varios procesadores para cooperar en la ejecucin de los programas de aplicacin. Se trata de sistemas que ofrecen una infraestructura explcita para el desarrollo del software del sistema y aplicaciones que exploten el paralelismo. La forma ms comn de clasicar los sistemas de procesadores paralelos fue la introducida por Flynn, la cual establece las siguientes categoras de computadores:

Procesadores Auxiliares (Attached Processors): Los procesadores auxiliares son esencialmente computadores de propsito especco que se conectan a un sistema host o servidor para acelerar determinados tipos de cmputo. El ejemplo ms comn es el uso de procesadores de E/S, que liberan a la CPU de la responsabilidad del control detallado de las operaciones de E/S.

SISD (Single Instruction Single Data, Flujo de instrucciones nico y ujo de datos nico): Un procesador interpreta una secuencia de instrucciones para operar con los datos almacenados en una memoria. De este modo en cualquier momento slo se est ejecutando una nica instruccin. Esta categora responde a la arquitectura de Von Neumann, tambin llamados computadores serie escalares. SIMD (Single Instruction Multiple Data, Flujo de instrucciones nico y ujo de datos mltiple): Una nica instruccin es aplicada sobre diferentes datos al mismo tiempo. En las mquinas de este tipo un cierto nmero de elementos procesadores son controlados y sincronizados mediante una unidad de control. Cada elemento procesador tiene una memoria asociada, de manera que cada instruccin es ejecutada simultneamente por

8

CAPTULO 1. INTRODUCCINtodos los elementos procesadores pero sobre un conjunto de datos diferentes. Debido a su utilidad en el procesamiento de matrices, a este tipo de mquinas se les llama procesadores matriciales.

En la organizacin MIMD, los procesadores son de uso general, puesto que deben ser capaces de procesar todas las instrucciones necesarias para realizar las transformaciones apropiadas de los datos. Las arquitecturas MIMD se pueden subdividir adems segn la forma que tienen los procesadores para comunicarse (gura 1.2). Si los procesadores comparten una memoria comn, entonces cada procesador accede a los programas y datos almacenados en la memoria compartida, y los procesadores se comunican unos con otros a travs de esa memoria. Este tipo de sistemas se conocen como multiprocesadores fuertemente acoplados o simplemente multiprocesadores. Si cada procesador tiene una memoria dedicada, entonces cada elemento de proceso es en s mismo un computador. La comunicacin entre los computadores se realiza a travs de caminos jos o mediante algn mecanismo de conmutacin de mensajes. Este tipo de sistemas se conocen como multiprocesadores dbilmente acoplados o multicomputadores.

MISD (Multiple Instruction Single Data, Flujo de instrucciones mltiple y ujo de datos nico): Varias instrucciones actan simultneamente sobre un nico trozo de datos. Este tipo de mquinas se pueden interpretar de dos maneras. En principio, podemos considerarlas como mquinas formadas por varias unidades de procesamiento, las cuales reciben instrucciones distintas que operan sobre los mismos datos. Esta clase de arquitectura ha sido clasicada por numerosos arquitectos de computadores como impracticable o imposible, y en estos momentos no existen ejemplos que funcionen siguiendo este modelo. Otra forma de interpretar el modelo MISD es considerarlo como una clase de mquinas donde un mismo ujo de datos uye a travs de numerosas unidades de procesamiento. Arquitecturas altamente segmentadas, como la que poseen los arrays sistlicos o los procesadores vectoriales, son clasicadas a menudo bajo esta categora. Estas arquitecturas realizan el procesamiento vectorial a travs de una serie de etapas, cada una ejecutando una funcin particular produciendo un resultado intermedio. La razn por la cual dichas arquitecturas son clasicadas como MISD es que los elementos de un vector pueden ser considerados como pertenecientes al mismo dato, y todas las etapas del cauce representan mltiples instrucciones que son aplicadas sobre ese vector.

MIMD (Multiple Instruction Multiple Data, Flujo de instrucciones mltiple y ujo de datos mltiple): Un conjunto de unidades de procesamiento ejecuta simultneamente diferentes secuencias de instrucciones sobre conjuntos de datos diferentes. Es la organizacin que poseen los sistemas multiprocesadores y multicomputadores en general. SPMD es una versin restringida de MIMD en la cual todos los procesadores ejecutan el mismo programa. Al contrario que SIMD, cada procesador ejecuta una secuencia de instrucciones diferente.

1.4. ARQUITECTURAS BASADAS EN PARALELISMO IMPLCITOIstruccin Istruccin Resultado

9

Captacin

Ejecucin

Figura 1.3: Ciclo de Instruccin de 2 etapas (A)

1.4. Arquitecturas Basadas en Paralelismo Implcito1.4.1. Segmentacin o pipelineDesde 1960 esta arquitectura ha recibido una gran atencin debido a la considerable mejora que ha producido en la velocidad de proceso sin que ello aumente, en la misma medida, el coste del sistema. La segmentacin de instrucciones es similar al uso de una cadena de montaje en una fbrica. Una cadena de montaje saca partido al hecho de que el producto pasa a travs de varias etapas de produccin. De esta manera se puede trabajar sobre los productos en varias etapas simultneamente. A este proceso se le llama segmentacin (pipelining) porque, como en una tubera o cauce (pipeline), en un extremo se aceptan nuevas entradas antes de que algunas entradas aceptadas anteriormente aparezcan como salidas en el otro extremo. Para aplicar este concepto a la ejecucin de instrucciones debemos darnos cuenta de que en realidad una instruccin tiene varias etapas. La gura 1.4 muestra, por ejemplo, una particin del ciclo de instruccin en 10 etapas que tienen lugar secuencialmente. Claramente puede pensarse en la utilizacin de la segmentacin. Como una aproximacin sencilla consideremos la subdivisin del procesamiento de una instruccin en dos etapas: captacin de instruccin y ejecucin de instruccin. Hay perodos en la ejecucin de una instruccin en los que no se accede a memoria principal. Este tiempo podra utilizarse para captar la siguiente instruccin en paralelo con la ejecucin de la actual. La gura 1.3 representa esta aproximacin. El cauce tiene dos etapas independientes. La primera etapa capta una instruccin y la almacena en un buffer. Cuando la segunda etapa est libre la primera le pasa la instruccin almacenada. Mientras que la segunda etapa ejecuta la instruccin, la primera etapa utiliza algn ciclo de memoria no usado para captar y almacenar la siguiente instruccin. A sto se le llama prebsqueda o precaptacin de la instruccin (instruction prefetch) o solapamiento de la captacin (fetch overlap). Debera estar claro que ese proceso acelerar la ejecucin de instrucciones.

10

Indireccin

Indireccin

Captacin de instruccin

Captacin del operando

Almacenamiento del operando

Solicitud de instruccin

Solicitud de operando

Ms de un operando

Ms de un resultado

Clculo de la direccin de la instruccin

Decodificacin de la operacin de la instruccin

Clculo de la direccin del operando

Operacin con los datos

Clculo de la direccin del operando

Chequeo de interrupciones

Interrupcin

CAPTULO 1. INTRODUCCIN

Siguiente instruccin

Cadena o vector

No interrupcin

Figura 1.4: Ciclo de Instruccin de 10 etapas

1.4. ARQUITECTURAS BASADAS EN PARALELISMO IMPLCITOEsperar

11

Nueva direccin Istruccin

Esperar

Istruccin

Captacin

Ejecucin

Resultado

Descartar

Figura 1.5: Ciclo de Instruccin de 2 etapas (B) Si las etapas de captacin y ejecucin fueran de igual duracin, el tiempo de ciclo de instruccin se reducira a la mitad. Sin embargo si miramos ms atentamente el cauce de la gura 1.5 veremos que la duplicacin de la velocidad de ejecucin es poco probable por dos razones: 1. El tiempo de ejecucin ser generalmente ms largo que el tiempo de captacin. La ejecucin implicar la lectura y almacenamiento de los operandos y la realizacin de alguna operacin. De este modo la etapa de captacin puede tener que esperar algn tiempo antes de que pueda vaciar su buffer. Una instruccin de bifurcacin condicional hace que la direccin de la siguiente instruccin a captar sea desconocida. De este modo, la etapa de captacin debe esperar hasta que reciba la direccin de la siguiente instruccin desde la etapa de ejecucin. La etapa de ejecucin puede entonces tener que esperar mientras se capta la siguiente instruccin.

2.

La prdida de tiempo debida a la segunda razn puede reducirse haciendo una estimacin. Una regla simple es la siguiente: cuando una instruccin de bifurcacin condicional pasa de la etapa de captacin a la de ejecucin, la etapa de captacin capta la instruccin de memoria que sigue a la instruccin de salto. Entonces si el salto no se produce no se pierde tiempo. Si el salto se produce debe desecharse la instruccin captada y captar una nueva instruccin. Aunque estos factores reduzcan la efectividad potencial del cauce de dos etapas, se produce alguna aceleracin. Para conseguir una mayor aceleracin, el cauce debe tener ms etapas. Consideremos la siguiente descomposicin del procesamiento de una instruccin:

Captar Instruccin (Fetch Instruction, FI): Leer la supuesta siguiente instruccin en un buffer. Decodicar Instruccin (Decode Instruction, DI): Determinar el cdigo de operacin y los campos del operando. Calcular Operandos (Calculate Operands, CO): Calcular la direccin efectiva de cada operando fuente. Esto puede involucrar varios modos de direccionamiento: mediante desplazamiento, indirecto a travs de registro, indirecto u otros. Captar Operandos (Fetch Operands, FO): Captar cada operando de memoria. Los operandos en registros no tienen que ser captados.

121 Instruccin 1 Instruccin 2 Instruccin 3 Instruccin 4 Instruccin 5 Instruccin 6 Instruccin 7 Instruccin 8 Instruccin 9FI

CAPTULO 1. INTRODUCCIN2DI FI

3CO DI FI

4FO CO DI FI

5

6

7

8

9

10

11

12

13

14

EO WO FO CO DI FI EO WO FO CO DI FI EO WO FO CO DI FI EO WO FO CO DI FI EO WO FO CO DI FI EO WO FO CO DI EO WO FO CO EO WO FO EO WO

Figura 1.6: Cauce de 6 etapas

Con esta descomposicin las diversas etapas tienen casi igual duracin. Por motivos de claridad asumamos que tienen igual duracin. La gura 1.6 muestra cmo un cauce de 6 etapas puede reducir el tiempo de ejecucin de 9 instrucciones de 54 a 14 unidades de tiempo. En realidad dicha simulacin es demasiado idealista. Para empezar no todas las instrucciones recorren las 6 etapas del cauce; por ejemplo, una instruccin de carga no necesita la etapa WO. Ello complica el hardware del cauce. Adems la mayora de los sistemas no permiten varios accesos a memoria simultneos, por lo que las etapas FI, FO y WO no podran ejecutarse al mismo tiempo. Otros factores como la dicultad en la ejecucin de la bifurcacin condicional ya comentada, o la espera que se produce en ciertas etapas cuando no todas las etapas son de igual duracin (lo cual es lo ms comn), complican el diseo y limitan la mejora de las prestaciones. Segn toda esta discusin precedente, puede parecer que cuanto mayor sea el nmero de etapas en el cauce, ms rpida ser la velocidad de ejecucin. Algunos diseadores del IBM S/360 observaron dos factores que frustran este aparente sencillo patrn de diseo de altas prestaciones, y que siguen siendo ciertos hoy da: 1. En cada etapa, hay algn gasto extra debido a la transferencia de datos de buffer a buffer y a la realizacin de varias funciones de preparacin y distribucin.

Ejecutar Instruccin (Execute Instruction, EI): Realizar la operacin indicada y almacenar el resultado, si lo hay, en la posicin de operando destino especicada. Escribir Operando (Write Operand, WO): Almacenar el resultado en memoria.

1.4. ARQUITECTURAS BASADAS EN PARALELISMO IMPLCITO2.

13

La cantidad de control lgico necesario para manejar dependencias de memoria y registros y para optimizar el uso del cauce aumenta enormemente con el nmero de etapas.

En denitiva, la segmentacin de instrucciones es una poderosa tcnica para aumentar las prestaciones pero requiere un diseo cuidadoso si se quieren obtener resultados ptimos con una complejidad razonable. La emergencia de la segmentacin y su temprana evolucin se produjo en la primera lnea de supercomputadores IBM. El modelo IBM 7030 (llamado computador a toda mecha) super en 100 veces la velocidad del computador ms rpido en produccin de aquella poca, el IBM 704. Dicho logro slo se pudo alcanzar mediante la segmentacin de instrucciones. Luego vinieron otros xitos como el IBM 360/91, el procesador 6502, y un largo etc. Hoy da todas las compaas implementan es sus procesadores este tipo de arquitectura.

1.4.2. Tecnologa SWARSWAR (SIMD Within A Register, Paralelismo SIMD Dentro de un Registro) es el trmino genrico aplicado a un tipo de paralelismo interno al procesador. La idea consiste en agilizar las operaciones en registros de enteros mediante la divisin de dichos registros en una serie de campos de igual longitud, asignando una unidad de procesamiento (una ALU en denitiva) a cada uno de los campos y realizando la ejecucin paralelamente. Dada una mquina con registros de bits y ALUs, se puede lograr que sus operaciones sobre registros funcionen como operaciones paralelas SIMD en campos de bits. De todas formas slo con el empuje de las tecnologas multimedia, que han conseguido acelerar las operaciones en un rango de 2x hasta 8x, se ha llegado a la popularidad e importancia de dicha tecnologa. Ya en 1997 la mayora de los microprocesadores incorporaban soporte de hardware para SWAR: Intel Pentium II & Pentium with MMX (MultiMedia eXtensions, Extensiones Multimedia)

AMD K6 MMX (MultiMedia eXtensions, Extensiones Multimedia)

Cyrix M2 MMX (MultiMedia eXtensions, Extensiones Multimedia)

Digital Alpha MAX (MultimediA eXtensions, Extensiones Multimedia)

HewlettPackard PARISC MAX (Multimedia Acceleration eXtensions, Extensiones de Aceleracin Multimedia)

Microunity Mediaprocessor SIGD (Single Instruction on Groups of Data, Instrucciones nicas en Grupos de Datos)

MDMX, pronunciado Mad Max (MIPS Digital Media eXtension, Extensiones Media Digital MIPS)

Sun SPARC V9 VIS (Visual Instruction Set, Juego de Instrucciones Visuales)

)6 875

)

)

5

14

CAPTULO 1. INTRODUCCIN

A diferencia de lo que sucede con las tres rmas que aceptaron las primitivas MMX (Intel/AMD/Cyrix), todos los los dems conjuntos de instrucciones son difcilmente comparables, y mutuamente incompatibles. Con el paso del tiempo las MMX tambin evolucionaron, generandose nuevas extensiones como las EMMX de Cyrix, las 3DNow! de AMD o las SSE y SSE2 de Intel, entre otras. 1.4.2.1. Utilidades de SWAR

Aunque todos los procesadores actuales son capaces de ejecutar al menos algn tipo de paralelismo basado en la tecnologa SWAR, la realidad es que ni siquiera los juegos de instrucciones SWAR ms desarrollados soportan paralelismo de carcter general. De hecho, muchos piensan que la diferencia de rendimiento entre un procesador Pentium y un Pentium MMX se debe ms a factores como el mayor tamao de la cach que a la aparicin de las MMX. As pues... para qu es realmente buena la tecnologa SWAR?

Es cierto que todas stas son restricciones muy duras, pero tambin es cierto que dicho tipo de paralelismo se da en muchos algoritmos paralelos (no slo en aplicaciones multimedia). Enfocada al tipo de paralelismo adecuado, la tecnologa SWAR puede ser ms eciente que utilizar SMPs o Clusters... y no cuesta nada utilizarla. 1.4.2.2. Soporte MMX Bajo Linux

Bajo Linux los procesadores IA32 son nuestro principal inters. Lo bueno es que tanto los AMD, como los Cyrix y los Intel tienen una base comn, las instrucciones MMX. Sin embargo el rendimiento de dichas instrucciones vara, y adems, actualmente cada rma tiene sus propias extensiones; por lo tanto programar un soporte para dichas instrucciones puede resultar algo engorroso. Existen tres mtodos para utilizar MMX en SWAR:

Operaciones sobre datos de tipo entero, cuanto ms pequeos mejor. Dos valores de 32 bits caben en un registro MMX de 64 bits, pero tambin lo hacen ocho caracteres de un byte o incluso un tablero de ajedrez con valores de un bit. Cuando un dato ocupa varios campos de un registro, determinadas operaciones (llamadas operaciones particionadas) se ven afectadas por interacciones entre los campos debido al acarreo/resto, etc. Por ello, cuanto menor sea el tamao de dichos enteros, ms limpias sern las operaciones y por lo tanto mejor aprovecharemos el parelismo generado por la repeticin de ALUs. Nota: En los juegos de instrucciones ms actuales, como lal EMMX, las 3DNow! o las SSE2, tambin se admiten operaciones sobre datos de tipo otante. Paralelismo SIMD o de vectores, en el cual la misma operacin es aplicada a todos los campos simultneamente. Hay maneras de anular la operacin en algunos campos seleccionados (enmascaramiento), pero ello complica el cdigo y disminuye el rendimiento. Referencias a memoria localizadas y regulares. SWAR en general y MMX en particular no obtienen buenos resultados utilizando accesos aleatorios. Reunir con dichos accesos un vector x[y] (donde y es un ndice de dicho vector) resulta demasiado costoso.

1.4. ARQUITECTURAS BASADAS EN PARALELISMO IMPLCITO1.

15

Utilizar una librera de funciones MMX ya desarrollada. En la Universidad de Purdue existe un grupo de trabajo (URL [15]) que ha desarrollado libreras adaptadas a varios juegos de instrucciones determinados. As, tenemos la librera libmmx diseada para las instrucciones MMX en general, la librera libxmmx para las Cyrix EMMX y la librera libsse para las Intel SSE. Tambin existe una librera un tanto curiosa, MMX Emulator (URL [7]), diseada para ejecutar programas que usen instrucciones MMX en procesadores que no tengan soporte para ellas. As, arman tener un 386 MMX... como sus realizadores apuntan, es lento pero funciona. Usar las instrucciones MMX directamente. Esto es algo complicado por dos razones. El primer problema es la portabilidad: no podremos ejecutar un programa as implementado en procesadores que no tengan soporte para MMX. El segundo problema es que el ensamblador para IA32 que utilicemos en Linux podra no soportar dichas instrucciones MMX. Utilizar un lenguage de alto nivel o un compilador que genere directamente las instrucciones MMX apropiadas. En este sentido, en la Universidad de Purdue (URL [15]) se ha desarrollado un lenguaje llamado SWARC y su compilador, el Scc, el cual est en permanente fase experimental, aunque disponible. Como sus autores sealan, Scc no pretende ser un producto de alta calidad en trminos de eciencia; en cambio proporciona una implementacin bsica del modelo SWAR. Por otro lado tenemos los compiladores de Intel (URL [4]) de C++ y Fortran para Linux, los cuales generan las instrucciones MMX deseadas de manera optimizada.

2.

3.

1.4.3. Procesadores AuxiliaresLos procesadores auxiliares son esencialmente computadores de propsito especco que se conectan a un sistema host o servidor para acelerar determinados tipos de cmputo. Por ejemplo, muchas tarjetas de vdeo y audio para PCs contienen procesadores auxiliares diseados, respectivamente, para acelerar operaciones sobre grcos y audio. Aunque esta tcnica ya no est en auge, es muy difcil que otros mtodos de procesamiento paralelo alcancen su bajo coste y alto rendimiento. Una buena manera de sacarle partido a estos procesadores es utilizar un PC bajo Linux como servidor. El problema es que no existe mucho software de soporte disponible, por lo que en ocasiones tendremos que trabajar por nuestra cuenta desarrollndolo nosotros mismos. 1.4.3.1. Benecios de los PCs bajo Linux como Servidor

Antes de que nos desanime el hecho de trabajar por nuestra cuenta, es til entender que, aunque pueda ser dicultoso hacer que un PC bajo Linux acte como servidor de un determinado sistema, es una de las pocas plataformas adecuadas para este tipo de uso. Los PCs son buenos servidores por dos razones principalmente. La primera es su capacidad de ampliacin, de manera fcil y barata. Recursos como la memoria, discos, redes, etc. son aadidos a un PC de manera trivial. La segunda es su facilidad de interconexin a otros dispositivos a travs de sus interfaces estndar. No slo estn ampliamente disponibles los prototipos de los buses ISA y PCI si no que adems disponemos del puerto paralelo, el cual

16

CAPTULO 1. INTRODUCCIN

Figura 1.7: Procesamiento Digital de Seales ofrece un rendimiento razonable en un iterfaz independiente. Adems la separacin del espacio de E/S en los microprocesadores IA32 facilita la interconexin, proporcionando una proteccin hardware de las direcciones de E/S. Por otra parte Linux es un buen sistema operativo para crear un servidor. La disponibilidad de todo el cdigo fuente y la extensa documentacin existente son una ayuda tremenda, obviamente. Adems Linux proporciona una planicacin cercana al tiempo real, e incluso existe una versin de Linux en tiempo real desarrollada por FSMLabs (URL [3]). Pero lo que quizs es ms importante es el hecho de que a la vez que proporciona un entorno UNIX completo, Linux soporta herramientas de desarrollo que estn diseadas para ser ejecutadas bajo Microsoft DOS o Windows. Los programas MSDOS pueden ser ejecutados en Linux usando dosemu, el cual proporciona una mquina virtual protegida que ejecuta MSDOS. El soporte de Linux para los programas diseados para Windows 3.xx es an ms directo: software libre como wine. Este software (URL [21]) simula Windows 3.xx y Win32 lo sucientemente bien como para que la mayora de los programas se ejecuten correcta y ecientemente en un entorno UNIX/X. Las siguientes dos secciones arrojan ejemplos de sistemas paralelos que utilizan esta arquitectura que podran ser soportados bajo Linux. 1.4.3.2. Procesadores DSP

Un DSP (Digital Signal Processor, Procesador de Seales Digitales) es un tipo de microprocesador muy rpido y potente. Un DSP procesa los datos en tiempo real. Esta capacidad de tiempo real hace de los DSPs perfectos para aplicaciones que no pueden tolerar demoras. As, suelen emplearse en el Procesamiento Digital de Seales, un mtodo de procesamiento de seales del mundo real que utiliza tcnicas matemticas para realizar transformaciones o extraer informacin, como se muestra en la gura 1.7. Aqu tenemos algunas de las ventajas de dichos procesadores:

Operaciones de multiplicacin y suma en un slo ciclo Funcionamiento en tiempo real, simulacin y emulacin Flexibilidad Fiabilidad Aumenta rendimiento del sistema

1.4. ARQUITECTURAS BASADAS EN PARALELISMO IMPLCITO

17

Existe un prspero mercado para estos procesadores. Aunque estos chips fueron generalmente diseados para ser utilizados en sistemas de aplicacin especca, tambin pueden ser utilizados como magncos computadores paralelos auxiliares. Estos son los benecios de utilizar dichos procesadores como computadores paralelos auxiliares:

Muchas tarjetas de sonido y modems incluyen procesadores DSP que pueden ser accedidos mediante controladores de Linux sin ninguna dicultad. Lo difcil llega cuando utilizamos un sistema paralelo auxiliar que contenga cuatro o ms procesadores DSP... y eso es exactamente lo que nos interesa. Existen dos familias de procesadores DSP utilizados ampliamente para procesamiento paralelo: Texas Instruments TMS320 Muy populares durante mucho tiempo, resulta muy sencillo construir un procesador paralelo basado en el TMS320. Existen versiones del TMS320 slo para enteros y tambin para punto otante; los diseos ms antiguos usaban algn tipo inusual del formato punto otante de precisin simple, pero los nuevos modelos soportan los formatos IEEE. El antiguo TMS320C4x consigue hasta 80 Mops usando el formato punto otante simple precisin especco de Texas Instruments; en constraste, el TMS320C67x proporciona hasta 1Gop simple precisin o 420 Mops doble precisin para los clculos en formato punto otante IEEE. No slo es fcil congurar un grupo de estos chips como un multiprocesador, si no que adems existen chips multiprocesadores, como el TMS320C8x que combina en paralelo un procesador RISC maestro con unidad de punto otante IEEE a 100 Mops con dos o cuatro DSPs esclavos con unidad de entero.

Disminuye costes

Muchos de ellos, como los Texas Instruments TMS320 y los Analog Devices SHARC DSP, estn diseados para construir mquinas paralelas con poca o ninguna lgica de enlace. Son econmicos, especialmente por MIP o MFLOP. Incluyendo el coste de la lgica de soporte bsica, suele decirse que su coste es una dcima parte de lo que cuesta un procesador para PC con un rendimiento comparable. No utilizan mucha energa ni desprenden demasiado calor. Esto signica que es posible tener un grupo de estos chips alimentados por una fuente de alimentacin convencional para PCs, y encerrarlos dentro del chasis del PC sin que se convierta en un horno. Existen algunos elementos en los juegos de instrucciones de los DSP que los compiladores de alto nivel no suelen usar de manera apropiada, como por ejemplo la operacin Bit Reverse Addressing. Usando un sistema paralelo auxiliar, es posible compilar y ejecutar la mayora del cdigo en el servidor, ejecutando aquellos algoritmos que hacen un mayor consumo de tiempo en los DSPs. Dichos algoritmos pueden ser implementados mediante un cdigo cuidadosamente adaptado. Los procesadores DSP no estn diseados para ejecutar un sistema operativo UNIX, y generalmente no son muy buenos como procesadores de propsito general. Por ejemplo, muchos de ellos no tienen hardware de manejo de memoria. En otras palabras, funcionan mejor como clientes de un servidor de propsito ms general... como un PC bajo Linux.

18

CAPTULO 1. INTRODUCCIN

Analog Devices SHARC Estos chips pueden ser utilizados como un multiprocesador de 6 procesadores con memoria compartida y sin lgica de conexionado externa. Sistemas mayores pueden ser construidos usando 6 enlaces de 4 bits por chip. Muchos de los sistemas ms grandes son empleados en aplicaciones militares, y resultan econmicos. En esta lnea la compaa Integrated Computing Engines, llamada en la actualidad Media100, ofrece una gama de tarjetas PCI llamadas GreeICE y BlueICE, sta ltima ms actual. La primera versin (GreenICE) contiene una matriz de 16 procesadores SHARC y es capaz de proporcionar picos de velocidad de hasta 1,9 Gops usando el formato IEEE simple precisin. BlueICE triplica dicha velocidad, y su coste no es elevado.

1.4.3.3.

FPGAs y Computadores de Lgica Reprogramable

Si el paralelismo consiste en conseguir la mxima velocidad, por qu no construimos nuestro propio hardware? El problema es que cuesta mucho, lleva mucho tiempo su desarrollo, se vuelve inservible cuando cambiamos el algoritmo aunque sea slo un poco, etc. Sin embargo recientes avances en los FPGAs (Field Programmable Gate Array, Matriz de Compuertas Lgicas Programable) elctricamente reprogramables han anulado dichas objeciones. Ahora la densidad de compuertas es lo sucientemente alta como para un procesador simple pueda ser construido en un nico FPGA. Adems el tiempo de reconguracin (reprogramacin) de los FPGAs ha bajado a un nivel en el que es razonable incluso recongurar el FPGA cuando pasamos de una fase de un algoritmo a otra. Normalmente debemos trabajar con lenguajes de descripcin de hardware como VHDL para la reconguracin del FPGA, as como escribir cdigo de bajo nivel que haga de interfaz con los programas del sistema host Linux. Pero el esfuerzo merece la pena, ya que el coste de los FPGAs es bajo, especialmente para algoritmos que operen con enteros de baja precisin (en realidad un subconjunto de aquellas operaciones para las que fu diseado SWAR). Los FPGAs pueden realizar complejas operaciones tan rpido como podamos introducir los datos. Por ejemplo, sistemas basados en un nico FPGA han alcanzado tiempos mejores que los supercomputadores en la bsqueda de bases de datos genticas. Las siguientes dos compaas desarrollan hardware basado en FPGA: Virtual Computer Company Esta compaa ofrece una variedad de productos que usan FPGAs Xilinx dinmicamente recongurables basados en SDRAM. Destaca su tarjeta Virtual ISA Proto Board de 8/16 bit para el puerto ISA. Altera El ARC-PCI (Altera Recongurable Computer PCI bus, Computador Recongurable Altera para bus PCI) es una tarjeta del mismo tipo que la Virtual ISA Proto Board de Virtual Computer Company, pero utiliza FPGAs Altera y el interfaz PCI en vez del ISA. Muchas de las herramientas de diseo, lenguajes de descripcin de hardware, compiladores, etc. funcionan slo bajo Windows o DOS, por lo que podramos utilizar dosemu o wine para ejecutarlos bajo Linux.

1.5. ARQUITECTURAS BASADAS EN PARALELISMO EXPLCITO

19

CPU

CPU

CPU

E/S

E/S

Interconexin

E/S

Memoria Principal

Figura 1.8: Esquema Multiprocesador

1.5. Arquitecturas Basadas en Paralelismo Explcito1.5.1. MultiprocesadoresUn sistema multiprocesador es aquel que est formado por un conjunto de procesadores que comparten una memoria principal comn y estn bajo el control de un mismo sistema operativo. Las principales caractersticas de un procesador de este estilo son: 1. 2. 3. Posee dos o ms procesadores de propsito general similares y de capacidades comparables. Todos los procesadores comparten el acceso a una memoria global (comn). Tambin pueden utilizarse memorias locales (privadas). Todos los procesadores comparten el acceso a los dispositivos de E/S, bien a travs de los mismos canales o bien a travs de canales distintos que proporcionan caminos de acceso a los mismos dispositivos. El sistema est controlado por un sistema operativo integrado que permite la interaccin entre los procesadores y los programas.

4.

La gura 1.8 describe en trminos generales la organizacin de un sistema multiprocesador. Hay dos o ms CPUs. Cada CPU es autnoma, incluyendo una unidad de control, una

20

CAPTULO 1. INTRODUCCIN

CPU

CPU

E/S

E/S

Memoria

Memoria

Bus del Sistema

Figura 1.9: Organizacin Bsica Bus de Tiempo Compartido ALU, registros y posiblemente una cach. Cada CPU tiene acceso a una memoria principal compartida y a los dispositivos de E/S a travs de algn mecanismo de interconexin. Los procesadores pueden comunicarse entre s a travs de la memoria (mensajes de informacin de control almacenada en reas comunes de datos). Tambin es posible que las CPUs intercambien seales directamente, como indican las lneas discontinuas. La memoria a menudo se organiza de forma que sean posibles los accesos simultneos a bloques de memoria separados. En algunas conguraciones cada CPU puede tener tambin su propia memoria principal privada y sus canales de E/S adems de los recursos compartidos. 1.5.1.1. Organizacin

La organizacin de un sistema multiprocesador puede clasicarse como sigue:

Bus de Tiempo Compartido El Bus de Tiempo Compartido es el mecanismo ms simple para construir un sistema multiprocesador (gura 1.9). La estructura y las interfaces son bsicamente las mismas que las de un sistema monoprocesador que utilice un bus para la interconexin. El bus consta de lneas de control, direccin y datos. Para facilitar las transferencias DMA (Direct Memory Access, Acceso Directo a Memoria) con los procesadores de E/S se proporcionan los siguientes elementos:

Bus de Tiempo Compartido o Comn Memoria Multipuerto Unidad de Control Central

Direccionamiento: Debe ser posible distinguir los mdulos del bus para determinar la fuente y el destino del mensaje. Arbitraje: Cualquier mdulo de E/S puede funcionar temporalmente como maestro. Se proporciona un mecanismo para arbitrar entre las peticiones que compiten por el control del bus, utilizando algn tipo de esquema de prioridad.

1.5. ARQUITECTURAS BASADAS EN PARALELISMO EXPLCITOCPU Cach CPU Cach

21

E/S

E/S

Memoria

Memoria

Bus del Sistema

Figura 1.10: Organizacin Bus de Tiempo Compartido con Cach

Estos elementos son utilizables directamente en una conguracin de multiprocesador. En este caso hay varias CPUs adems de varios procesadores de E/S que intentan acceder a uno o ms mdulos de memoria a travs del bus. La organizacin de Bus de Tiempo Compartido presenta diversas ventajas en comparacin con otras aproximaciones:

La principal desventaja de la organizacin de bus compartido son las prestaciones. Todas las referencias a memoria pasan por el bus. En consecuencia, la velocidad del sistema est limitada por el tiempo de ciclo. Para mejorar las prestaciones es deseable equipar a cada CPU con una memoria cach (gura 1.10). sta reducira considerablemente el nmero de accesos. El uso de cachs introduce algunas consideraciones de diseo nuevas. Puesto que cada cach local contiene una imagen de una parte de la memoria, si se altera una palabra en una cach es posible que quede invalidada una palabra en otra cach. Para evitarlo debe avisarse a las otras CPUs de que se ha producido una actualizacin de la memoria. Esto por lo general complica el diseo del sistema. Memorias Multipuerto La organizacin de memorias multipuerto permite el acceso directo e independiente a los mdulos de memoria desde cada una de las CPUs y los mdulos de E/S (gura 1.11). Se necesitar un sistema de arbitraje para resolver los conictos. El mtodo que se utiliza a menudo para ello consiste en asignar prioridades jas a cada puerto de memoria. Normalmente

Tiempo Compartido: Cuando un mdulo est controlando el bus, los dems mdulos no tienen acceso al mismo y deben, si es necesario, suspender su funcionamiento hasta que dispongan del bus.

Simplicidad: Es la aproximacin ms sencilla para organizar el multiprocesador. La interfaz fsica y la lgica de cada procesador para el direccionamiento, el arbitraje, y para compartir el tiempo del bus es la misma que la de un sistema con un solo procesador. Flexibilidad: Es generalmente sencillo expandir el sistema conectando ms CPUs al bus. Fiabilidad: El bus es esencialmente un medio pasivo, y el fallo de cualquiera de los dispositivos conectados no provocara el fallo de todo el sistema.

22

CAPTULO 1. INTRODUCCIN

M1

M2

Mk

CPU1

E/S 1

CPUn

E/S m

Figura 1.11: Organizacin Memorias Multipuerto la interfaz fsica y elctrica en cada puerto es idntica a la que aparece en un mdulo de memoria de un slo puerto. As, se necesitan pocas o ninguna modicacin en las CPUs o en los mdulos de E/S para adaptarlas a este modelo de organizacin. La organizacin de memorias multipuerto es ms compleja que la organizacin de bus compartido, precisndose aadir al sistema una buena cantidad de lgica. No obstante se consiguen mejores prestaciones puesto que cada procesador tiene un camino especco a cada mdulo de memoria. Otra ventaja del multipuerto es que permite congurar partes de la memoria como privadas para una o ms CPUs y/o mdulos de E/S. Estas caractersticas permiten incrementar la seguridad frente a accesos no autorizados y para el almacenamiento de rutinas de restablecimiento en zonas de memoria no susceptibles de ser modicadas por otros procesadores. Unidad de Control Central La unidad de control central encauza las distintas secuencias de datos entre los distintos mdulos independientes: CPU, memoria, E/S. El controlador puede almacenar temporalmente peticiones y realizar las funciones de arbitraje y temporizacin. Adems puede transmitir mensajes de estado y control entre las CPUs y alertar sobre cambios en las cachs. Puesto que toda la lgica de coordinacin de la conguracin de multiprocesador se concentra en la unidad de control central, las interfaces de E/S, memoria, y CPU no sufren cambios esenciales. Esto proporciona la exibilidad y simplicidad de conexin propias de la aproximacin del bus compartido. Las desventajas clave de esta aproximacin son que la unidad de control es bastante compleja y que representa un cuello de botella potencial para las prestaciones.

1.5. ARQUITECTURAS BASADAS EN PARALELISMO EXPLCITO1.5.1.2. Multiprocesadores Simtricos (SMP)

23

SMP (Symmetric Multi-Processor, Multiprocesadores Simtricos) se reere, en trminos de sistemas operativos, al concepto de grupo de procesadores trabajando juntos como pares, de manera que cualquier parte del trabajo puede ser realizada por cualquiera de los procesadores sin diferencia alguna. Este tipo de sistemas son multiprocesadores, es decir, pertenecen al modelo MIMD con memoria compartida. En el mundo IA32, SMP signica cumplir con la norma MPS (Intel MultiProcessor Specication, Especicacin Multiprocesador de Intel). En un SMP todos los procesadores pueden acceder a la misma memoria, generalmente mediante un bus compartido de alta velocidad. La comunicacin entre los procesadores es fcil en principio. Cualquier procesador puede dejar datos o mensajes en una posicin determinada y luego indicar a otro procesador la direccin en la que puede encontrar los datos. Esto es tpico del multiprocesamiento; as, un computador ejecuta una o ms aplicaciones que se componen de una serie de procesos secuenciales que cooperan entre s. Este esquema se puede implementar en un sistema monoprocesador, pero tambin se puede implementar fcilmente en un sistema multiprocesador SMP: en cualquier momento cada uno de los mltiples procesadores est ejecutando un proceso distinto. La comunicacin entre procesos se realiza mediante mensajes y seales de estado que pueden intercambiarse los procesadores a travs de la memoria. En la prctica el nivel de prestaciones deseado complica la comunicacin entre los procesadores. Cuando se tienen muchos procesadores rpidos compitiendo por acceder a la misma memoria a travs del mismo bus, los conictos pueden degradar seriamente el rendimiento del conjunto del sistema. La solucin, como hemos visto, es aadir una cach local a cada procesador. Esta solucin ocasiona el problema adicional de la coherencia de cach. La coordinacin entre los procesadores que se requiere para resolver el problema origina un cuello de botella en el bus compartido. El resultado es que los multiprocesadores tpicos estn limitados a unas pocas decenas de procesadores. Un multiprocesador SMP con miles de procesadores no parece que sea muy prctico. 1.5.1.3. Soporte SMP Bajo Linux

Antes de entrar a discutir aspectos ms tcnicos, debemos hacernos primero un par de cuestiones acerca de esta arquitectura que, si bien es una de las ms extendidas en procesamiento paralelo, tiene un soporte relativamente reciente en Linux. Funciona realmente SMP en Linux? Funciona. Adems es una opcin con una buena relacin coste/rendimiento para paralelizar nuestro sistema, ya que una placa base con soporte para varios procesadores y sus correspondientes micros normalmente elevar poco el precio del sistema con respecto a un sistema uniprocesador. En la mayora de las ocasiones para hacer que Linux se ejecute en dicho hardware slo necesitamos realizar una instalacin de Linux con soporte para un solo procesador, y luego recompilar el ncleo con la la SMP=1 del chero Makele activa. Entonces informaremos a lilo o nuestro gestor de arranque acerca del nuevo ncleo compilado, y a disfrutar. En cuanto a rendimiento y estabilidad podemos decir son sistemas bastante rmes. En resumen, SMP Linux realmente funciona.

24

CAPTULO 1. INTRODUCCIN

La siguiente cuestin es cunto soporte de alto nivel est disponible para escribir y ejecutar programas paralelos con memoria compartida en SMP Linux. Actualmente existe bastante software dedicado a este propsito. Por ejemplo, ahora podemos contar con una librera muy completa para el manejo de hilos POSIX. Aunque el rendimiento puede ser menor que utilizando mecanismos especialmente creados para trabajar con memoria compartida, un sistema SMP Linux tambin puede usar la mayora del software de procesamiento paralelo desarrollado originalmente para clusters de estaciones de trabajo. Dicho tipo de software utiliza comunicacin va sockets, y puede funcionar en un sistema SMP Linux e incluso en mltiples SMP conectados en red formando un cluster. De todas formas la comunicacin va sockets implica mucha sobrecarga innecesaria en un sistema SMP. Gran parte de esta sobrecarga se produce dentro del ncleo y en el manejo de interrupciones; sto empeora el problema ya que SMP Linux generalmente slo admite un procesador en el ncleo al mismo tiempo y el manejador de interrupciones est implementado de manera que slo el procesador de arranque (boot processor) puede procesar interrupciones. A pesar de ello el hardware de comunicacin de un SMP tpico es tan superior a la mayora de las redes de comunicacin de los clusters, que el software diseado para dichos clusters a menudo funcionar mejor en los sistemas SMP que en los clusters para los que fu creado. En el resto de esta seccin estudiaremos qu tipo de sistemas SMP soporta Linux, aclararemos qu es la Especicacin Multiprocesador de Intel, y haremos algunas observaciones acerca del uso de la memoria cach y la conguracin del bus a utilizar. Especicacin Multiprocesador de Intel Aunque los sistemas SMP han existido desde hace muchos aos, hasta hace poco cada mquina tenda a implementar sus funciones bsicas de manera distinta al resto, de forma que el soporte del sistema operativo no era portable. Lo que ha cambiado esta situacin es la MPS (Intel MultiProcessor Specication, Especicacin Multiprocesador de Intel). Los nicos sistemas que no cumplen la norma MPS ni la IA32 y tienen soporte bajo Linux son las mquinas multiprocesador Sun4m de SPARC. Linux tiene soporte para la mayora de las mquinas que cumplen la norma MPS 1.1 y MPS 1.4 con hasta 16 procesadores 486DX, Pentium, Pentium Pro o superiores. Los procesadores IA32 que no tienen soporte son los procesadores Intel 386, Intel 486SX/SLC (la falta de unidad de punto otante interere en los mecanismos SMP) y los procesadores AMD y Cyrix (requieren chips de soporte SMP que no parecen estar disponibles por el momento). Es importante entender que el rendimiento de los sistemas que cumplen la norma MPS puede variar ampliamente. Como era previsto, una causa de las diferencias de rendimiento es la velocidad del procesador: mayores frecuencias de reloj tienden a proporcionar sistemas ms potentes, teniendo en cuenta que un procesador Pentium Pro es ms rpido que un Pentium. De todas formas la norma MPS no especica realmente cmo implementa el hardware la memoria compartida; lo que s especica es la manera en la que esta implementacin debe funcionar desde el punto de vista del software. Esto signica que el rendimiento est tambin en funcin de cmo interacta la implementacin de la memoria compartida con las caractersticas SMP Linux y nuestro sistema particular. La principal diferencia entre los sistemas que cumplen la norma MPS es la manera en la que implementan fsicamente el acceso a la memoria compartida.

1.5. ARQUITECTURAS BASADAS EN PARALELISMO EXPLCITOAspectos sobre la Memoria Cach

25

Algunos sistemas MPS con procesadores Pentium y todos los que llevan procesadores Pentium Pro y superiores tienen cachs L2 (Level 2, De Nivel 2) independientes (la memoria cach L2 va dentro del mdulo que contiene el procesador). El hecho de tener cachs L2 separadas es considerado generalmente como una optimizacin del rendimiento; sin embargo sto no es tan obvio bajo Linux. La principal complicacin est en que el planicador de SMP Linux no intenta mantener cada proceso en el mismo procesador, siendo ste un concepto denominado anidad con el procesador. sto podra cambiar pronto; recientemente se han generado discusiones sobre el tema en la comunidad SMP Linux bajo el ttulo Enlace con el procesador. Sin anidad con el procesador, el hecho de tener cachs L2 separadas podra introducir una sobrecarga importante cuando le demos ciclos de reloj a un proceso en un procesador distinto al que estaba ejecutando dicho proceso anteriormente. Muchos sistemas relativamente econmicos estn organizados de manera que dos procesadores Pentium comparten una memoria cach L2. Lo malo es que sto provoca competencia entre los procesadores por el uso de la cach, degradando seriamente el rendimiento cuando se ejecutan mltiples programas secuenciales independientes. Sin embargo la mayora de los programas paralelos se benecian de la memoria cach compartida en situaciones en las que ambos procesadores intentan acceder a la misma lnea de la memoria compartida; en dichas situaciones slo uno de los procesadores debe acceder a la cach y la competencia entre los procesadores es evitada. De este modo se crea el efecto bsqueda compartida. Adems la falta de anidad con el procesador provoca menos dao con una cach L2 compartida. As, en programas paralelos no est realmente claro que la comparticin de cach L2 sea tan daina como cabe esperar. La experiencia demuestra que la cach de los sistemas SMP Linux muestran grandes diferencias en su rendimiento dependiendo del nivel de actividad del ncleo requerida. En el peor de los casos el aumento es 1.2 veces la velocidad del procesador. De todas maneras tambin se han observado picos de aumento de hasta 2.1 veces la velocidad del procesador, lo cual sugiere que el cmputo intensivo de cdigo con el modelo SPMD saca provecho del efecto bsqueda compartida. Conguracin del Bus Lo primero que hay que decir es que la mayora de los sistemas modernos conectan los procesadores (en turnos) a uno o ms buses PCI que hacen de puente hacia uno o ms buses ISA/EISA. Estos puentes aaden latencia, y adems los buses EISA e ISA ofrecen generalmente una menor velocidad de transferencia de datos que los PCI (ISA es el de menor velocidad), de manera que las unidades de disco, tarjetas de vdeo y otros componentes de alto rendimiento deben ser conectados al bus PCI. Aunque un sistema MPS puede alcanzar una buena velocidad en la ejecucin de muchos programas paralelos de cmputo intensivo (incluso si slo hay un bus PCI de tiempo compartido), las operaciones de E/S no se ejecutan mejor que en los sistemas uniprocesador... de hecho irn probablemente peor debido a la competencia por el bus entre los procesadores. As, si lo que buscamos es mejorar el rendimiento de las operaciones E/S debemos emplear un sistema MPS con mltiples buses PCI independientes y controladoras E/S (por ejemplo, mltiples controladoras SCSI). Antes que nada necesitaremos estar seguros de que SMP Lin-

26

CAPTULO 1. INTRODUCCIN

ux soporta el sistema que se desea emplear. Adems debemos tener en cuenta que actualmente Linux permite slo un procesador en el ncleo al mismo tiempo, de manera que elegiremos aquellas controladoras E/S que minimicen el tiempo requerido en el ncleo para realizar cada operacin E/S. Para conseguir un alto nivel de rendimiento tendremos que considerar la posibilidad de manejar la E/S de los dispositivos directamente, sin hacer llamadas al sistema... esto no es tan difcil como parece, y tampoco debera comprometer la seguridad. Es importante hacer notar que la relacin entre la velocidad del bus y la frecuencia de reloj del procesador se ha vuelto ms difusa durante los ltimos aos. Actualmente no es extrao encontrar sistemas con mayor frecuencia de reloj en el procesador y a la vez menor frecuencia en el bus, en comparacin con otros sistemas. El ejemplo clsico de sto es el Pentium 133, el cual usa generalmente un bus ms rpido que el Pentium 150, debido a la bsqueda de un mayor rendimiento en varios bancos de prueba. Estos efectos se amplican en los sistemas SMP. De todos modos, en la mayora de los casos es ms importante tener un bus rpido.

1.5.2. MulticomputadoresUn sistema multicomputador es aquel que est formado por un conjunto de sistemas relativamente autnomos, en los que cada CPU dispone de su propia memoria principal y sus canales de E/S. En este tipo de sistemas, cada procesador tiene su propio espacio de memoria privado, que no resulta visible para los otros procesadores. Segn sto los resultados y la informacin de coordinacin debe pasarse entre los nodos a travs de una red de interconexin, usualmente en forma de mensajes con un formato determinado. Una de las motivaciones principales para el desarrollo de organizaciones de multicomputador es la de superar las limitaciones de escala de los multiprocesadores; de ste modo los multicomputadores poseen una mayor escalabilidad. Se dene como escalabilidad de un sistema a su capacidad para responder a cargas de trabajo crecientes. En un sistema de procesamiento paralelo, se mide mediante el nmero de mquinas que pueden conectarse al sistema sin que el rendimiento del sistema caiga. El objetivo es desarrollar una organizacin escalable que pueda dar cabida a un amplio rango de nmero de procesadores. Puesto que los procesadores en un multicomputador deben comunicarse mediante el intercambio de mensajes, un elemento clave en el diseo es la red de interconexin, que debe realizarse para operar lo ms ecientemente posible. En general existe un compromiso entre la distancia mxima entre dos nodos y el nmero de conexiones fsicas que se desea en cada nodo. Se han explorado varias tecnologas de interconexin para proporcionar escalabilidad y hacer posible un comportamiento eciente. A continuacin describiremos las topologas ms extendidas:

@6 A9)

)

Anillo: Si la comunicacin es bidireccional a lo largo del anillo, entonces la distancia mxima entre dos nodos cualesquiera para un anillo de nodos es . Usualmente se utilizan paquetes de mensajes de tamao jo que contienen la direccin del destino deseado. Esta topologa es apropiada para un nmero relativamente pequeo de procesadores con una comunicacin de datos mnima. La gura 1.12 ilustra un anillo con cuatro nodos.

1.5. ARQUITECTURAS BASADAS EN PARALELISMO EXPLCITO

27

Figura 1.12: Topologa Anillo

Figura 1.13: Topologa Malla

rbol: Las redes con topologa de rbol se han investigado para ejecutar algoritmos de tipo divide-y-vencers, tales como los de bsqueda y ordenacin. La gura 1.14 ilustra

Figura 1.14: Topologa rbol

) B %C)

Q @ 6 )D SA9FE@

Q I G )D RPHFE@

Malla: La forma ms simple de una malla es una matriz bidimensional en la que cada nodos, la distancia nodo se conecta a cuatro vecinos. En una malla simple de mxima entre dos nodos es . Si hay conexiones cclicas utilizando los nodos de los bordes, la distancia mxima se reduce a . La organizacin en malla es adecuada para ejecutar algoritmos orientados a matrices. La gura 1.13 ilustra una malla de 3*3 nodos.

28

CAPTULO 1. INTRODUCCIN

Figura 1.15: Topologa Hipercubo Nmero de nodos 16 256 1024 2048 16384 Malla 6 saltos 30 saltos 62 saltos 126 saltos 254 saltos Hipercubo 4 saltos 8 s