Introducción a las arquitecturas · PDF file CC-BY-NC-ND PID_00215411 7...

Click here to load reader

  • date post

    13-Jun-2020
  • Category

    Documents

  • view

    1
  • download

    0

Embed Size (px)

Transcript of Introducción a las arquitecturas · PDF file CC-BY-NC-ND PID_00215411 7...

  • Introducción a las arquitecturas paralelas Daniel Jiménez-González

    PID_00215411

  • Los textos e imágenes publicados en esta obra están sujetos (excepto que se indique lo contrario) a una licencia de

    Reconocimiento-NoComercial-SinObraDerivada (BY-NC-ND) v.3.0 España de Creative Commons. Podéis copiarlos, distribuirlos y

    transmitirlos públicamente siempre que citéis el autor y la fuente (FUOC. Fundación para la Universitat Oberta de Catalunya), no hagáis de

    ellos un uso comercial y ni obra derivada. La licencia completa se puede consultar en

    http://creativecommons.org/licenses/by-nc-nd/3.0/es/legalcode.es

  • CC-BY-NC-ND • PID_00215411 Introducción a las arquitecturas paralelas

    Índice

    Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

    Objectivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

    1. Paralelismo en uniprocesadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.1. Paralelismo a nivel de instrucción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

    1.1.1. Procesador segmentado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

    1.1.2. Procesador superescalar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

    1.1.3. Procesador Very Long Instruction Word (VLIW) . . . . . . . . . . . . . . . 13

    1.2. Paralelismo a nivel de threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

    1.2.1. Multithreading de grano fino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

    1.2.2. Multithreading de grano grueso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

    1.2.3. Simultaneous Multithreading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

    1.3. Paralelismo a nivel de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

    1.3.1. Ejemplos de vectorización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

    1.3.2. Código vectorizable sin dependencias . . . . . . . . . . . . . . . . . . . . . . . . . . 19

    1.4. Limitaciones del rendimiento de los procesadores . . . . . . . . . . . . . . . . . . . . . . 23

    1.4.1. Memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

    1.4.2. Ley de Moore y consumo de los procesadores . . . . . . . . . . . . . . . . . . 24

    2. Taxonomía de Flynn y otras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 2.1. MIMD: Memoria compartida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    2.2. MIMD: Memoria distribuida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

    2.3. MIMD: Sistemas híbridos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

    2.4. MIMD: Grids . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

    3. Medidas de rendimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 3.1. Paralelismo potencial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

    3.2. Speedup y eficiencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

    3.3. Ley de Amdahl. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

    3.4. Escalabilidad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

    3.5. Modelo de tiempo de ejecución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

    3.6. Casos de estudio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

    3.6.1. Ejemplo sin Blocking: Edge-Detection . . . . . . . . . . . . . . . . . . . . . . . . . 43

    3.6.2. Ejemplo con Blocking: Stencil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

    4. Principios de programación paralela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 4.1. Concurrencia en los algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

    4.1.1. Buenas prácticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

    4.1.2. Orden y sincronización de tareas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

    4.1.3. Compartición de datos entre tareas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

  • CC-BY-NC-ND • PID_00215411 Introducción a las arquitecturas paralelas

    4.2. Problemas que aparecen en la concurrencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

    4.2.1. Race Condition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

    4.2.2. Starvation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

    4.2.3. Deadlock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

    4.2.4. Livelock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

    4.3. Estructura de los algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

    4.4. Estructuras de soporte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

    4.4.1. SPMD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

    4.4.2. Master/Workers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

    4.4.3. Loop Parallelism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

    4.4.4. Fork/Join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

    5. Modelos de programación paralela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 5.1. OpenMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

    5.1.1. Un programa simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

    5.1.2. Sincronización y locks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

    5.1.3. Compartición de trabajo en bucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

    5.1.4. Tareas en OpenMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

    Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

    Ejercicios de autoevaluación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

    Bibliografía . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

  • CC-BY-NC-ND • PID_00215411 5 Introducción a las arquitecturas paralelas

    Introducción

    Son muchas las áreas de investigación, y sobre todo, programas de aplicación real donde

    la capacidad de cómputo de un único procesador no es suficiente. Un ejemplo lo encon-

    tramos en el campo de la bioinformática y, en particular, en la rama de genómica, donde

    los secuenciadores de genomas son capaces de producir millones de secuencias en un día.

    Estos millones de secuencias se deben procesar y evaluar con tal de formar el genoma del

    ser vivo que se haya analizado. Este procesar y evaluar requieren un tiempo de cómputo

    y capacidades de memoria muy grandes, sólo al alcance de computadores con más de un

    core y una capacidad de almancenamiento significativa. Otros ámbitos donde nos pode-

    mos encontrar con estas necesidades de cómputo son en el diseño de fármacos, estudios

    del cosmo, detección de petróleo, simulaciones de aeronaves, etc.

    Principio de incerteza de Heisenberg

    “The position and momentum of a particle cannot be simultaneously measured with arbitrarily high precision. There is a minimum for the product of the uncertainties of these two measurements. There is likewise a minimum for the product of the uncertainties of the energy and time.”

    Durante años, el aumento de la frecuencia de los procesadores había sido la vía de au-

    mentar el rendimiento de las aplicaciones, de una forma transparente al programador. Sin

    embargo, aunque la frecuencia de los uniprocesadores ha ido aumentando, se ha observa-

    do que este aumento no se puede mantener indefinidamente. No podemos hacer mover los

    electrones y los protones a mayor velocidad que la de la luz. Por otra parte, este aumento

    de frecuencia conlleva un problema de dis