OpenMP José Casero Cantos www.twitter.com/Jose_Casero
Introducción <ul><li>API para programación multiproceso en máquinas con memoria compartida.
Modelo de programación portable y escalable.
Modelo de ejecución basado en fork-join. </li></ul>
Architecture Review Board
Historia <ul><li>OpenMP 1.0 (1997-1998)
OpenMP 2.0 (2000-2002)
OpenMP 2.5 (2005)
OpenMP 3.0 (2008)
OpenMP 3.1 (2011) </li></ul>
Elementos básicos Sintaxis básica #pragma omp nombre-directiva [cláusulas]
Estructuras Paralelas de Control Con Bucle #pragma omp parallel for for ( i = ilo; i <= ihi; i++ ) { Código C/C++ } Sin Bu...
Work Sharing <ul><li>Omp for or omp do: Usado para dividir iteraciones de bucles entre varios hilos. También es llamado co...
Sections: Asignación de bloques consecutivos pero independientes a diferentes hilos
Single: Especifica un bloque de código que es ejecutado solamente por una hebra. Barrera implícita en el final
Master: similar a single pero el bloque de código será ejecutado solo por la hebra principal y no existirá una barrera imp...
Data Environment <ul><li>Shared: los datos dentro de una región paralela son compartidos, lo cual significa que son visibl...
Private: los datos contenidos en una región paralela son exclusivamente accedidos por la hebra que lo esté ejecutando.
Default: permite al programador especificar el comportamiento de las variables sin ámbito de una región paralela. Podrán s...
Firstprivate: como private excepto la inicialización del valor es actualizada antes de la construcción.
Upcoming SlideShare
Loading in …5
×

Openmp

1,223 views

Published on

OpenMP

Published in: Technology
  • Be the first to comment

Openmp

  1. 1. OpenMP José Casero Cantos www.twitter.com/Jose_Casero
  2. 2. Introducción <ul><li>API para programación multiproceso en máquinas con memoria compartida.
  3. 3. Modelo de programación portable y escalable.
  4. 4. Modelo de ejecución basado en fork-join. </li></ul>
  5. 5. Architecture Review Board
  6. 6. Historia <ul><li>OpenMP 1.0 (1997-1998)
  7. 7. OpenMP 2.0 (2000-2002)
  8. 8. OpenMP 2.5 (2005)
  9. 9. OpenMP 3.0 (2008)
  10. 10. OpenMP 3.1 (2011) </li></ul>
  11. 11. Elementos básicos Sintaxis básica #pragma omp nombre-directiva [cláusulas]
  12. 12. Estructuras Paralelas de Control Con Bucle #pragma omp parallel for for ( i = ilo; i <= ihi; i++ ) { Código C/C++ } Sin Bucle #pragma omp parallel { t_id = omp_get_thread_num ( ); if ( t_id % 2 == 0 ) { solid_update ( ); } else { Liquid_update ( ); } }
  13. 13. Work Sharing <ul><li>Omp for or omp do: Usado para dividir iteraciones de bucles entre varios hilos. También es llamado constructor de bucle.
  14. 14. Sections: Asignación de bloques consecutivos pero independientes a diferentes hilos
  15. 15. Single: Especifica un bloque de código que es ejecutado solamente por una hebra. Barrera implícita en el final
  16. 16. Master: similar a single pero el bloque de código será ejecutado solo por la hebra principal y no existirá una barrera implícita al final. </li></ul>
  17. 17. Data Environment <ul><li>Shared: los datos dentro de una región paralela son compartidos, lo cual significa que son visibles y accesibles desde otras hebras simultáneamente Por defecto todas las variables son compartidas excepto las utilizadas en bucles.
  18. 18. Private: los datos contenidos en una región paralela son exclusivamente accedidos por la hebra que lo esté ejecutando.
  19. 19. Default: permite al programador especificar el comportamiento de las variables sin ámbito de una región paralela. Podrán ser compartidos o no.
  20. 20. Firstprivate: como private excepto la inicialización del valor es actualizada antes de la construcción.
  21. 21. Lastprivate: como private excepto que el valor original es actualizado después de la construcción.
  22. 22. Reduction: un camino seguro para reunir todo el trabajo de todas las hebras. </li></ul>
  23. 23. Synchronization <ul><li>Critical section: el código que se encuentre en sección crítica será ejecutado solo por una hebra al mismo tiempo.
  24. 24. Atomic: similar a la anterior, pero avisa al compilador para un uso especial y mejorar el rendimiento.
  25. 25. Ordered: el bloque estructurado es ejecutado en el orden en el cual las iteraciones podrían ser ejecutadas en un bucle secuencial.
  26. 26. Barrier: cada subproceso espera a que todos los otros hilos de un equipo hayan llegado a este punto.
  27. 27. Nowait: especifica que cada hebra complete su trabajo asignado sin esperar a que finalicen las demás hebras. </li></ul>
  28. 28. Runtime Variables <ul><li>OMP_SCHEDULE
  29. 29. OMP_NUM_THREADS
  30. 30. OMP_NESTED
  31. 31. OMP_DYNAMIC </li></ul>
  32. 32. Runtime Functions <ul><li>omp_get_max_threads
  33. 33. omp_get_num_threads
  34. 34. omp_get_thread_num
  35. 35. omp_init_lock
  36. 36. omp_unset_lock </li></ul>
  37. 37. ¿Por dónde empiezo? Procesador de texto (Gedit, Kate, Emacs, …) GCC (Compilador) g++ -fopenmp HelloWorld.cpp -o HelloWorld
  38. 38. Entorno de Desarrollo Integrado
  39. 39. ¡Hola Mundo! #include <omp.h> #include <iostream> #include <sstream> int main (int argc, char *argv[]) { int th_id, nthreads; #pragma omp parallel private(th_id) { th_id = omp_get_thread_num(); std::ostringstream ss; ss << &quot;Hello World from thread &quot; << th_id << std::endl; std::cout << ss.str(); #pragma omp barrier #pragma omp master { nthreads = omp_get_num_threads(); std::cout << &quot;There are &quot; << nthreads << &quot; threads&quot; << std::endl; } } return 0; }
  40. 40. Vídeo
  41. 41. Depuración TotalView (Etnus) PGDBG Graphical Symbolic Debugger GDB
  42. 42. Pros <ul><li>No utiliza el paso de mensajes como MPI.
  43. 43. Los datos y la descomposición en hebras las maneja OpenMP de forma automática.
  44. 44. Paralelismo incremental: puede trabajar en una porción de tiempo al mismo tiempo sin realizar un cambio exagerado en el código.
  45. 45. Código unificado para aplicaciones secuenciales y en paralelo.
  46. 46. Los constructores OpenMP son tratados como comentarios cuando se usa una compliación en secuencial.
  47. 47. Se reducen menos bugs al hacer menos cambios en el código con motivo de lo anteriormente mencionado.
  48. 48. Granularidad gruesa y granularidad fina son posibles con OpenMP.
  49. 49. Existe abundante información en internet. </li></ul>
  50. 50. Contras <ul><li>Difícil depuración de errores.
  51. 51. Actualmente, solo funciona eficientemente en plataformas de multiprocesadores con memoria compartida.
  52. 52. La escalabilidad está limitada por la memoria de la arquitectura.
  53. 53. No soporta comparte-and-swap.
  54. 54. No puede utilizase en GPU.
  55. 55. La documentación que realmente ha sido de provecho se encuentra en inglés. </li></ul>
  56. 56. Si os ha interesado... Presentación: http://www.slideshare.net/JoseCasero/openmp Video: http://www.youtube.com/watch?v=eHdQ0Ck4Bds
  57. 57. Fuentes Http://www.openmp.org/ http://en.wikipedia.org/wiki/OpenMP http://es.wikipedia.org/wiki/OpenMP http://alvaromamanialiaga.blogspot.com/2010/09/granularidad-en-sistemas-distribuidos.html

×