programando con openmp - deustoe-ghost.deusto.es/docs/2008/cursillos/transpas openmp.pdf · 2017....

20
Jon Valdés Furriel Julio 2008 Programando con OpenMP Programando con OpenMP ¿Cómo aprovechar un sistema multicore? ó

Upload: others

Post on 02-Feb-2021

5 views

Category:

Documents


0 download

TRANSCRIPT

  • Jon Valdés FurrielJulio 2008Programando con OpenMP

    Programando con OpenMP

    ¿Cómo aprovechar un sistema multicore?

    ó

  • Jon Valdés FurrielJulio 2008Programando con OpenMP

    ParalelismoEl paralelismo al que estamos acostumbrados es muy limitado

    La mayoría conocemos únicamente los fork y threads:

    Defines un punto donde el procesamiento se separa, y ahi se lanza un nuevo thread

    El thread trabaja por separado

    Cuando el thread termina, volvemos a unir ese thread con el original

  • Jon Valdés FurrielJulio 2008Programando con OpenMP

    Problema!

    Resulta complicado adaptar dinámicamente el procesamiento al número de procesadores disponibles

    (Lanzando 2 o 3 threads no aprovechamos bien un ordenador con 8 cores)

  • Jon Valdés FurrielJulio 2008Programando con OpenMP

    Más problemas!

    Además, Intel y AMD están planeando procesadores con muchos cores para los próximos años

    Noticia: “Intel says developers should prepare for ‘thousands of cores’ ” (1 Julio 2008)

  • Jon Valdés FurrielJulio 2008Programando con OpenMP

    ¿Soluciones?

    Intel ha sacado unas librerías de threading nuevas que se supone harán ese tipo de cosas: Threads Building Blocks

    Boost::Threads

    OpenMP

    Más (fijo que vosotros conocéis más que yo)

  • Jon Valdés FurrielJulio 2008Programando con OpenMP

    OpenMP

    Empieza como una librería de Fortran para HPC en 1997

    En 1998 sale una versión para C/C++

    La última versión (la 2.0) del standard para C/C++ es del 2005

    La versión 3.0 está en desarrollo

  • Jon Valdés FurrielJulio 2008Programando con OpenMP

    ¿Qué es OpenMP?

    Sirve para

    Optimizar loops

    Ejecutar varias secciones independientes a la vez

  • Jon Valdés FurrielJulio 2008Programando con OpenMP

    Sugerencias

    No sirve para: Programas en que los threads deban comunicarse mucho entre ellos

    Es perfecto para: Programas que estén hechos de forma secuencial, y queramos darles un “empujón” usando varios cores.

  • Jon Valdés FurrielJulio 2008Programando con OpenMP

    ¿Qué es OpenMP?

    Es simplemente una librería (y un flag del compilador)

    Permite paralelizar programas en entornos con memoria compartida

    ¿Sistemas multiprocesador? ¿Y multicore?

    ¿Clusters? -> sorry, but no

  • Jon Valdés FurrielJulio 2008Programando con OpenMP

    Ventajas de OpenMP

    Permite ir paralelizando código incrementalmente

    No hace falta manejar paso de mensajes (no como en MPI, por ejemplo).

    Puedes hacer coarse grained y fine grained parallelism.

  • Jon Valdés FurrielJulio 2008Programando con OpenMP

    Ventajas de OpenMP

    OpenMP paraleliza secciones de código, pero la base sigue siendo secuencial. De hecho, podemos compilar código en OpenMP con un compilador normal, y el programa será funcionalmente igual (solo que más lento).

    Desventaja: Esto supone que no podemos tener comunicación importante entre diferentes threads.

    Nota: No se yo si esto es cierto del todo...

  • Jon Valdés FurrielJulio 2008Programando con OpenMP

    Ventajas de OpenMP

    Es portable: Win, Lin, Mac, Solaris, BSD...

    Lo soportan muchos compiladores: Visual Studio (2005 en adelante), GCC 4.2 en adelante (4.1 con parches), el compilador de Sun, etc

  • Jon Valdés FurrielJulio 2008Programando con OpenMP

    ¿Qué hace OpenMP? Master thread

    Worker threadsRegión paralela{

    Región paralela{ Worker threadsMaster thread

    Master thread

  • Jon Valdés FurrielJulio 2008Programando con OpenMP

    Resumen de features

  • Jon Valdés FurrielJulio 2008Programando con OpenMP

    omp parallel

    La directiva parallel indica el inicio de una sección paralela. Este es el punto donde OpenMP crea los nuevos threads (tantos como le digamos, o el default).

    #pragma omp parallel [clause(s)] { }

    Nota: una de las cláusulas puede ser “num_threads (n)”, donde n es el numero de threads que queremos.

  • Jon Valdés FurrielJulio 2008Programando con OpenMP

    Distribución de Trabajo(paralelismo funcional)La directiva sections permite distribuir un thread para cada sección definida (si no hay suficientes threads para tantas secciones, algún thread hará más de una sección, en plan round robin).

    #pragma omp sections [clause(s)] { #pragma omp section #pragma omp section #pragma omp section }

  • Jon Valdés FurrielJulio 2008Programando con OpenMP

    Distribución de Trabajo(paralelismo de datos)

    La directiva for permite paralelizar un bucle for en N threads

    #pragma omp for [clause(s)]

  • Jon Valdés FurrielJulio 2008Programando con OpenMP

    Distribución de Trabajo

    La directiva master nos deja hacer algo en un único thread desde dentro de una sección paralela.

    #pragma omp master

  • Jon Valdés FurrielJulio 2008Programando con OpenMP

    Control de ejecución

    Con la directiva critical podemos definir regiones críticas, en las que los threads sólo podrán entrar de uno en uno.

    Podemos crear varias regiones críticas, poniendoles nombres distintos.

    #pragma omp critical [name]

  • Jon Valdés FurrielJulio 2008Programando con OpenMP

    Control de Ejecución

    La directiva barrier crea una barrera, en la que se todos los threads se esperan unos a otros antes de continuar

    Nota: todos los threads deben encontrar la barrera, o no debe hacerlo ninguno.

    #pragma omp barrier