Graduado en Ingeniería Informática - oa.upm.esoa.upm.es/38324/7/PFG_ENRIQUE_MADRIDEJOS_  · Graduado…

  • View
    212

  • Download
    0

Embed Size (px)

Transcript

  • Graduado en Ingeniera Informtica Universidad Politcnica de Madrid

    Escuela Tcnica Superior de Ingenieros Informticos

    TRABAJO FIN DE GRADO

    Diseo e implementacin de funcionalidades OpenMP, basadas en modelos de concurrencia

    desarrollados en lenguaje Go

    Autor: Enrique Madridejos Zamorano Director: Genoveva Lpez Gmez

    MADRID, JUNIO 2015

  • 1

  • 2

  • 3

    Agradecimientos: En primer lugar, quiero agradecer a Genoveva, a David y a Andrs la magnfica oportunidad que me han ofrecido con este proyecto, y todo el apoyo y ayuda que he recibido de ellos, sin los cuales jams podra haber llevado a cabo el trabajo.

    Tambin darles las gracias a mis compaeros de DEUS: a Luis, a Ana, a Miguel y a JuanFran, por ayudarme cuando lo he necesitado y, sobre todo, por hacerme

    ms llevadero el da a da con sus buenos ratos, sus bromas y sus discusiones.

    As mismo, tambin tengo un saludo especial para toda la gente del CoNWeT Lab., sin duda el mejor lugar para haber llevado a cabo este proyecto.

    Quiero agradecer tambin a Alberto todo el tiempo que hemos trabajado juntos; por ayudarme, por soportarme en mis malos ratos y compartir los buenos. Este

    proyecto no hubiese sido posible sin su colaboracin.

    Por supuesto, tambin a mis buenos amigos. Mis viejos amigos de Madridejos y mis nuevos amigos de Madrid. Ellos y ellas. A todos vosotros, gracias por estar

    siempre ah.

    Y, por encima de todo, a mis padres y a mi ta Sagrario. Gracias por vuestro cario y vuestra paciencia. Vosotros jams tirasteis la toalla conmigo, incluso

    cuando yo ya estaba a punto de hacerlo. Por muchas vidas que viva, jams podr pagaros la deuda de gratitud que tengo con vosotros.

    Al final todo llega, Pap.

  • 4

  • 5

    ndice general

    Resumen.............................................................................................13

    Abstract..............................................................................................14

    Captulo 1. Introduccin y Objetivos.............................................15

    1.1. Introduccin..............................................................................15

    1.2. Motivaciones.............................................................................21

    Captulo 2. Estado de la Cuestin...................................................23

    2.1. Procesamiento Paralelo............................................................23 2.1.1. Tipos de Paralelismo.....................................................................24 2.1.2. Paralelismo vs. Concurrencia........................................................25 2.1.3. Perfil de paralelismo......................................................................26 2.1.4. Clasificacin de los sistemas paralelos. Taxonoma de Flynn.......27 2.1.5. Clasificacin de los sistemas paralelos. Modelos de memoria......30 2.1.6. Programacin paralela. Modelos....................................................34 2.1.7. Lmites y coste de la programacin paralela..................................34 2.1.8. Usos actuales de la programacin paralela.....................................38

    2.2. El Estndar OpenMP................................................................40 2.2.1. Paralelizacin manual y automtica................................................41 2.2.2. OpenMP. Definicin.......................................................................41 2.2.3. Ventajas de OpenMP......................................................................42 2.2.4. Breve historia del estndar..............................................................42 2.2.5. Arquitectura y modelo de memoria.................................................44 2.2.6. Modelo de programacin paralela...................................................45 2.2.7. Modelo de ejecucin.......................................................................46 2.2.8. Caractersticas tcnicas...................................................................47 2.2.9. Implementaciones...........................................................................49

  • 6

    Captulo 3. Implementacin del estndar OpenMP en Go.............51

    3.1. Consideraciones previas...........................................................52

    3.2. Primera aproximacin al estndar desde Go............................54

    3.3. Idea conceptual: el Preprocesador de Cdigo..........................57

    3.4. Esquema general del prototipo.................................................60

    3.5. Criterios de diseo....................................................................63

    3.6. El Mdulo de Pre-procesado de Cdigo: GOpenMP...............70 3.6.1. Mdulos de apoyo...........................................................................70 3.6.2. Mdulo principal.............................................................................83

    3.6.3. Librera auxiliar...............................................................................88

    3.7. Funcionalidad actual del preprocesador....................................89

    Captulo 4. Diseo de patrones de programacin paralela............91 4.1. Introduccin a los patrones.......................................................92

    4.2. Patrn Fork-Join....................................................................94

    4.3. Patrn Map............................................................................95

    4.4. Patrn Reduce.......................................................................95

    4.5. Patrn Scan...........................................................................96

    4.6. Otros patrones y combinaciones...............................................97

    Captulo 5. Ejemplos y Casos de Uso.............................................99

    5.1. Casos de Uso para clculo matemtico......................................99

    5.2. Otros Casos de Uso..................................................................106

    Captulo 6. Pruebas de comportamiento y rendimiento.............109

    6.1. Definicin del banco de pruebas.............................................110 6.2. Comparativa de rendimiento secuencial / paralelo..................111 6.3. Medidas de rendimiento por problemas..................................113 6.4. Comparativa de rendimiento con OpenMP en C.....................124

  • 7

    6.5. Interpretacin de resultados....................................................125 Captulo 7. Conclusiones y Lneas Futuras...................................129

    7.1. Conclusiones...........................................................................129 7.2. Lneas Futuras.........................................................................131

    Bibliografa......................................................................................133

  • 8

  • 9

    ndice de figuras

    Figura 1: Esquema de procesamiento secuencial ..................................................................... 23 Figura 2: Esquema de procesamiento paralelo ......................................................................... 24 Figura 3: Granularidad de paralelismo ..................................................................................... 27 Figura 4: Diagrama de arquitectura SISD ................................................................................ 28 Figura 5: Diagrama de arquitectura MISD ............................................................................... 28 Figura 6: Diagrama de arquitectura SIMD ............................................................................... 29 Figura 7: Diagrama de arquitectura MIMD ............................................................................. 30 Figura 8: Esquemas de Memoria Compartida UMA y NUMA ............................................... 32 Figura 9: Esquema de Memoria Distribuida ............................................................................ 33 Figura 10: Esquema de Memoria Hbrida ................................................................................ 34 Figura 11: Grfica de rendimiento de la Ley de Amdhal ......................................................... 36 Figura 12: Grfica de rendimiento de la Ley de Guftanson ..................................................... 38 Figura 13: Modelos de Memoria que utilizan OpenMP ........................................................... 44 Figura 14: Modelo de Paralelismo basado en Threads ............................................................ 45 Figura 15: Modelo de Memoria Hbrida con OpenMP ............................................................ 46 Figura 16: Modelo "Fork-Join" de OpenMP ............................................................................ 47 Figura 17: Ejemplos de "pragmas" para OpenMP, en C/C++ y Fortran .................................. 47 Figura 18: Esquema general de OpenMP ................................................................................. 48 Figura 19: Paralelizacin de bucles en OpenMP ..................................................................... 48 Figura 20: Idea conceptual del preprocesador de cdigo ......................................................... 58 Figura 21: Esquema del compilador OpenUH ......................................................................... 59 Figura 22: Esquema general de GOpenMP .............................................................................. 62 Figura 23: Leyenda para los esquemas de patrones ................................................................. 94 Figura 24: Patrn "Fork-Join" ...........................................