programando con openmp - deustoe-ghost.deusto.es/docs/2008/cursillos/transpas openmp.pdf · 2017....
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