programación paralela en...
TRANSCRIPT
![Page 1: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/1.jpg)
Programación Paralela en
OpenMp
Proyecto PAPIME PE104911
Facultad de Ingeniería
Universidad Nacional Autónoma de México
Elba Karen Sáenz García- Oscar René Valdez
Casillas1
![Page 2: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/2.jpg)
• Utilidad de realizar procesamiento paralelo en
computadoras con arquitectura de memoria
compartida que permitan la ejecución
simultanea de varios hilos.
Elba Karen Sáenz García- Oscar René Valdez
Casillas2
![Page 3: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/3.jpg)
Memoria compartida
• En el hardware de una computadora , la
memoria compartida se refiere a un bloque de
memoria de acceso aleatorio a la que se
puede acceder por varias unidades de
procesamiento diferentes.
Elba Karen Sáenz García- Oscar René Valdez
Casillas3
![Page 4: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/4.jpg)
Memoria Compartida
En software, la memoria compartida
• Es un método de comunicación entre
procesos/hilos, es decir, una manera de
intercambiar datos entre programas que se
ejecutan al mismo tiempo. Un proceso creará
un espacio en la memoria RAM a la que otros
procesos pueden tener acceso.
Elba Karen Sáenz García- Oscar René Valdez
Casillas4
![Page 5: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/5.jpg)
Arquitectura de Memoria Compartida
Casi todas las computadoras actuales cuentan
con una arquitectura de memoria compartida
con múltiples unidades de procesamiento
conectadas a la misma memoria física.
Elba Karen Sáenz García- Oscar René Valdez
Casillas5
![Page 6: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/6.jpg)
Multicore
• La carrera de creación de procesadores cada vez más rápidos sufrió un punto de inflexión con la aparición de procesadores con arquitectura multicore.
• Esta arquitectura permitía frenar la escalada de consumo de potencia.
• Las arquitecturas multicore permiten obtener un rendimiento equivalente sin la contraprestación del consumo y esto ha provocado un gran desarrollo en los últimos años.
• Ejemplo
– Samsung Galaxy S4 con un procesador con 8 cores.
Elba Karen Sáenz García- Oscar René Valdez
Casillas6
![Page 7: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/7.jpg)
Multicore
• Para poder aprovechar la potencia que
ofrecen estos procesadores los
desarrolladores de software deben
transformar las actuales aplicaciones
secuenciales en paralelas.
Elba Karen Sáenz García- Oscar René Valdez
Casillas7
![Page 8: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/8.jpg)
Referencia para diseño de programas
paralelos
• Seguir etapas de diseño de un programa paralelo (Ian- Foster)
http://www.mcs.anl.gov/~itf/dbpp/
• The Multicore Association en su MulticoreProgramming Practices ofrece un método para escribir software en arquitecturas multicoreutilizando Cy C++– Algunos integrantes: CriticalBlue, Freescale, Intel,
PolyCore Software, Texas Instruments, Wind River’s Virtutech subsidiary.
Elba Karen Sáenz García- Oscar René Valdez
Casillas8
![Page 9: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/9.jpg)
Etapas de Diseño
Aplicar las etapas en el diseño de programas paralelos :
– Particionamiento
– Comunicación
– Aglomeración
– Mapeo
– Particionamiento
– Aglomeración
– Comunicación
– Mapeo
Elba Karen Sáenz García- Oscar René Valdez
Casillas9
![Page 10: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/10.jpg)
Etapas de fase de diseño
• Particionamiento (descomposición de tareas). Detección de niveles de paralelismo y granularidad; así como de algoritmos paralelos.
• Comunicación (estructura necesaria para coordinar la ejecución). Manejo de alta cohesión y bajo acoplamiento entre subprocesos .
• Aglomeración: Evaluación de tareas y estructura con respecto al rendimiento y costo, combinando tareas para mejorar. Aplicación de paradigmas de programación paralela.
• Mapeo. (asignación de tareas a unidades de procesamiento). Decisión de la distribución de los procesos en los procesadores
Elba Karen Sáenz García- Oscar René Valdez
Casillas10
![Page 11: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/11.jpg)
Fase Diseño V1
problema
particionamiento
tareas
comunicación
subprocesos concomunicación
Elba Karen Sáenz García- Oscar René Valdez
Casillas11
![Page 12: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/12.jpg)
Fase Diseño V1
Elba Karen Sáenz García- Oscar René Valdez
Casillas12
aglomeración
subprocesos concomunicación
programasparalelos
mapeo
procesadores
Paradigmas de programación paralela
Planificación de procesos
![Page 13: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/13.jpg)
Fase Diseño V2
Elba Karen Sáenz García- Oscar René Valdez
Casillas13
![Page 14: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/14.jpg)
Multicore Programming PracticesAborda un conjunto de fases con el objetivo de parelelizar una
aplicación:
• Análisis de la aplicación y diseño de alto nivel: el objetivo de esta fase es analizar las características de la aplicación.
• Implementacion y diseño de bajo nivel: Selección de los patrones de diseño, algoritmos y estructuras de datos para la posterior codificación de la concurrencia necesaria.
• Depuración: La introducción de concurrencia implica condiciones especiales en la depuración del código.
• Rendimiento: Es un proceso de optimización en el que se analiza la mejora del rendimiento conseguido, identificando nuevos cuellos de botella en la ejecución del código, incluyendo comunicaciones, sincronización, bloqueos, equilibrado de carga y ubicación de los datos.
Elba Karen Sáenz García- Oscar René Valdez
Casillas14
![Page 15: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/15.jpg)
Particionamiento
o Descomposición
• Descomposición de dominio o datos
• Descomposición funcional o tareas
Elba Karen Sáenz García- Oscar René Valdez
Casillas15
![Page 16: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/16.jpg)
Descomposición de dominio
Elba Karen Sáenz García- Oscar René Valdez
Casillas16
Encontrar el elemento mayor en un arreglo de enteros
Primero se trabaja en la división de los datos y
después es el cómputo asociado
![Page 17: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/17.jpg)
Descomposición de dominio
Elba Karen Sáenz García- Oscar René Valdez
Casillas17
CPU 0 CPU 1 CPU 2 CPU 3
Encontrar el elemento mayor en un arreglo de enteros
![Page 18: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/18.jpg)
Descomposición de dominio
Elba Karen Sáenz García- Oscar René Valdez
Casillas18
CPU 0 CPU 1 CPU 2 CPU 3
Encontrar el elemento mayor en un arreglo de enteros
![Page 19: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/19.jpg)
Descomposición de dominio
Elba Karen Sáenz García- Oscar René Valdez
Casillas19
CPU 0 CPU 1 CPU 2 CPU 3
Encontrar el elemento mayor en un arreglo de enteros
![Page 20: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/20.jpg)
Descomposición de dominio
Elba Karen Sáenz García- Oscar René Valdez
Casillas20
CPU 0 CPU 1 CPU 2 CPU 3
Encontrar el elemento mayor en un arreglo de enteros
![Page 21: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/21.jpg)
Descomposición de dominio
Elba Karen Sáenz García- Oscar René Valdez
Casillas21
CPU 0 CPU 1 CPU 2 CPU 3
Encontrar el elemento mayor en un arreglo de enteros
![Page 22: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/22.jpg)
Descomposición de dominio
Elba Karen Sáenz García- Oscar
René Valdez Casillas22
CPU 0 CPU 1 CPU 2 CPU 3
Encontrar el elemento mayor en un arreglo de enteros
![Page 23: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/23.jpg)
Descomposición de dominio
Elba Karen Sáenz García- Oscar René Valdez
Casillas23
CPU 0 CPU 1 CPU 2 CPU 3
Encontrar el elemento mayor en un arreglo de enteros
![Page 24: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/24.jpg)
Descomposición de dominio
Elba Karen Sáenz García- Oscar René Valdez
Casillas24
CPU 0 CPU 1 CPU 2 CPU 3
Encontrar el elemento mayor en un arreglo de enteros
![Page 25: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/25.jpg)
Descomposición de dominio
Elba Karen Sáenz García- Oscar René Valdez
Casillas25
CPU 0 CPU 1 CPU 2 CPU 3
Encontrar el elemento mayor en un arreglo de enteros
![Page 26: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/26.jpg)
Descomposición de dominio
Elba Karen Sáenz García- Oscar René Valdez
Casillas26
CPU 0 CPU 1 CPU 2 CPU 3
Encontrar el elemento mayor en un arreglo de enteros
![Page 27: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/27.jpg)
Descomposición de dominio
Elba Karen Sáenz García- Oscar René Valdez
Casillas27
CPU 0 CPU 1 CPU 2 CPU 3
Encontrar el elemento mayor en un arreglo de enteros
![Page 28: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/28.jpg)
Descomposición Funcional
• Primero se trabaja en la división de tareas o
funciones y despues en los datos asociados a
cada tarea
Elba Karen Sáenz García- Oscar René Valdez
Casillas28
![Page 29: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/29.jpg)
Descomposición Funcional
Elba Karen Sáenz García- Oscar René Valdez
Casillas29
f()
s()
r()
q()h()
g()
![Page 30: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/30.jpg)
Descomposición Funcional
Elba Karen Sáenz García- Oscar René Valdez
Casillas30
f()
s()
r()
q()h()
g()
CPU 0
CPU 2
CPU 1
![Page 31: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/31.jpg)
Descomposición Funcional
Elba Karen Sáenz García- Oscar René Valdez
Casillas31
f()
s()
r()
q()h()
g()
CPU 0
CPU 2
CPU 1
![Page 32: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/32.jpg)
Descomposición Funcional
Elba Karen Sáenz García- Oscar René Valdez
Casillas32
f()
s()
r()
q()h()
g()
CPU 0
CPU 2
CPU 1
![Page 33: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/33.jpg)
Descomposición Funcional
Elba Karen Sáenz García- Oscar René Valdez
Casillas33
f()
s()
r()
q()h()
g()
CPU 0
CPU 2
CPU 1
![Page 34: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/34.jpg)
Descomposición Funcional
Elba Karen Sáenz García- Oscar René Valdez
Casillas34
f()
s()
r()
q()h()
g()
CPU 0
CPU 2
CPU 1
![Page 35: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/35.jpg)
Descomposición pipilined
Elba Karen Sáenz García- Oscar René Valdez
Casillas35
![Page 36: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/36.jpg)
Gráfica de dependencias
Grafica = (nodo, flecha)
• Nodo por cada
– variable (excepto variables índice)
– Constante
– Operador o función
• Flechas indican uso de variables y constantes
Elba Karen Sáenz García- Oscar René Valdez
Casillas36
![Page 37: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/37.jpg)
Gráfica de dependencias
Ejemplo #1
Elba Karen Sáenz García- Oscar René Valdez
Casillas37
for (i = 0; i < 3; i++)
a[i] = b[i] / 2.0;
b[0] b[1] b[2]
a[0] a[1] a[2]
///
2 2 2
![Page 38: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/38.jpg)
Gráfica de dependencias
Ejemplo #1
Elba Karen Sáenz García- Oscar René Valdez
Casillas38
for (i = 0; i < 3; i++)
a[i] = b[i] / 2.0;
b[0] b[1] b[2]
a[0] a[1] a[2]
///
2 2 2
![Page 39: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/39.jpg)
Gráfica de dependencias
Ejemplo #2
Elba Karen Sáenz García- Oscar René Valdez
Casillas39
for (i = 1; i < 4; i++)
a[i] = a[i-1] * b[i];
b[1] b[2] b[3]
a[1] a[2] a[3]
***
a[0]
![Page 40: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/40.jpg)
Gráfica de dependencias
Ejemplo #2
Elba Karen Sáenz García- Oscar René Valdez
Casillas40
for (i = 1; i < 4; i++)
a[i] = a[i-1] * b[i];
b[1] b[2] b[3]
a[1] a[2] a[3]
***
a[0]
![Page 41: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/41.jpg)
Gráfica de dependencias
Ejemplo #3
Elba Karen Sáenz García- Oscar René Valdez
Casillas41
a = f(x, y, z);
b = g(w, x);
t = a + b;
c = h(z);
s = t / c;
x
f
w y z
ab
g
t
c
s
/
h
![Page 42: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/42.jpg)
Gráfica de dependencias
Ejemplo #3
Elba Karen Sáenz García- Oscar René Valdez
Casillas42
a = f(x, y, z);
b = g(w, x);
t = a + b;
c = h(z);
s = t / c;
x
f
w y z
ab
g
t
c
s
/
h
![Page 43: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/43.jpg)
Gráfica de dependencias
Ejemplo #4
Elba Karen Sáenz García- Oscar René Valdez
Casillas43
for (i = 0; i < 3; i++)
a[i] = a[i] / 2.0;
a[0] a[1] a[2]
a[0] a[1] a[2]
///
2 2 2
![Page 44: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/44.jpg)
Gráfica de dependencias
Ejemplo #4
Elba Karen Sáenz García- Oscar René Valdez
Casillas44
for (i = 0; i < 3; i++)
a[i] = a[i] / 2.0;
a[0] a[1] a[2]
a[0] a[1] a[2]
///
2 2 2
![Page 45: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/45.jpg)
Otros ejemplos
Elba Karen Sáenz García- Oscar René Valdez
Casillas45
![Page 46: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/46.jpg)
¿Es posible encontrar paralelismo?
• Renderizar una foto
• Búsqueda de una palabra en un documento
• Actualizar una hoja de cálculo
• Compilar un programa
Elba Karen Sáenz García- Oscar René Valdez
Casillas46
![Page 47: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/47.jpg)
Conceptos de Paralelismo
Elba Karen Sáenz García- Oscar René Valdez
Casillas47
![Page 48: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/48.jpg)
Paralelismo
• Existen dos visiones del paralelismo:
– Paralelismo Hardware: definido por la arquitectura
de la máquina
– Paralelismo Software: Definido por la estructura
del programa. Se manifiesta en las instrucciones
que no tienen dependencia
Elba Karen Sáenz García- Oscar René Valdez
Casillas48
![Page 49: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/49.jpg)
Niveles de paralelismo• Paralelismo a nivel de tarea o trabajo: Diferentes tareas
se ejecutan simultáneamente en diferentes Unidades de procesamiento (UP).
• Paralelismo a nivel de programa: Dividir tarea en subtareas y asignarlas a diferentes UP.
• Paralelismo a nivel de instrucción: Ejecutar instrucciones independientes en forma simultánea.
• Paralelismo a nivel de bit: De bajo nivel, se logra a través del hardware
Elba Karen Sáenz García- Oscar René Valdez
Casillas49
![Page 50: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/50.jpg)
Concurrencia y paralelismo
• Programa concurrente: Es aquél que define acciones que pueden realizarse simultáneamente
• Programa paralelo: Es un programa concurrente diseñado para su ejecución en un hardware paralelo
• Programa distribuido: Es un programa paralelo diseñado para su ejecución en una red de procesadores autónomos que no comparten la memoria
Elba Karen Sáenz García- Oscar René Valdez
Casillas50
![Page 51: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/51.jpg)
Modelos de programación
• Shared Memory
• Threads
• Distributed Memory / Message Passing
• Data Parallel
• Hybrid
• Single Program Multiple Data (SPMD)
• Multiple Program Multiple Data (MPMD)
Elba Karen Sáenz García- Oscar René Valdez
Casillas51
![Page 52: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/52.jpg)
Alternativas para modelo de memoria
compartida
• En el caso de memoria compartida.
– trabajar con procesos (UNIX)
– usar threads: Pthreads (POSIX), Java, OpenMP…
Elba Karen Sáenz García- Oscar René Valdez
Casillas52
![Page 53: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/53.jpg)
Introducción a
Open Multiprocessing (OpenMP)
Proyecto PAPIME PE104911
Elba Karen Sáenz García- Oscar René Valdez
Casillas53
![Page 54: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/54.jpg)
¿Qué es OpenMP?
• API para programación multiproceso en computadoras con arquitectura de memoria compartida, en múltiples plataformas.
• Formada por
– directivas del compilador
– bibliotecas de funciones
– variables de ambiente,
No un lenguaje.
• Basado en el modelo de hilos.
Elba Karen Sáenz García- Oscar René Valdez
Casillas54
![Page 55: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/55.jpg)
Open MPDefinido por un grupo de proveedores de hardware y de software AMD
(OpenMP ARB 1997)
• BCS - Barcelona Supercomputing Center
• CAPS-Entreprise
• Convey Computer
• Cray
• Fujitsu
• HP
• IBM
• Intel
• Microsoft
• NEC
• NVIDIA
• Oracle Corporation
• Signalogic
• The Portland Group, Inc.
• Texas Instruments
Mas información en www.openmp.org
Elba Karen Sáenz García- Oscar René Valdez
Casillas55
![Page 56: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/56.jpg)
¿Qué es OpenMP?
• Modelo de programación paralelo.
• Paralelismo de memoria compartida.
• Extensiones para lenguajes de programación
existentes (C,C++, Fortran)
• Combina código serial y paralelo en un solo
archivo fuente.
Elba Karen Sáenz García- Oscar René Valdez
Casillas56
![Page 57: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/57.jpg)
Algunos Compiladores
Compañía Compilador Información
GNU gcc Usado en Linux, Solaris, AIX, MacOSX, Windows
OpenMP 3.1 y soportado desde GCC 4.7
–fopenmp
IBM XL C/C++ /
Fortran
Usado en AIX y Linux.
Oracle C/C++ / Fortran Solaris y Linux
Intel C/C++ / Fortran
(10.1)
Windows, Linux y MacOSX.
/Qopenmp y -openmp
Elba Karen Sáenz García- Oscar René Valdez
Casillas57
![Page 58: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/58.jpg)
Algunas preguntas
• ¿Qué es un proceso?
• ¿Qué es un hilo?
• ¿Qué se comparte entre los hilos?
• ¿Cuál es la diferencia entre hilo y proceso?
Elba Karen Sáenz García- Oscar René Valdez
Casillas58
![Page 59: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/59.jpg)
Proceso
• Programa en algún estado en ejecución.
– Poseen espacios de memoria independientes
– Los cambios de estado (cambios de contexto) son
relativamente costosos en términos de tiempo.
Elba Karen Sáenz García- Oscar René Valdez
Casillas59
![Page 60: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/60.jpg)
Estados de un proceso
Elba Karen Sáenz García- Oscar René Valdez
Casillas60
![Page 61: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/61.jpg)
Estados de un proceso
• En un principio, un proceso no existe.
• Una vez creado el proceso pasa al estado
denominado Listo(está en condiciones de hacer
uso de la CPU en cuanto se le dé la oportunidad.
• Un proceso puede pasar de Ejecución a
Bloqueado cuando ha de esperar porque ocurra
un determinado evento o suceso.
– Espera por la terminación de una operación de E/S o
finalización de otra tarea de otro proceso
Elba Karen Sáenz García- Oscar René Valdez
Casillas61
![Page 62: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/62.jpg)
Hilos (Thread)
• Dentro de un proceso puede haber varios hilos de ejecución.
• Un hilo, también llamado hebra, proceso ligero, flujo, subproceso o “thread” es un programa en ejecución que comparte la imagen de memoria y otros recursos del proceso con otros hilos.
• Por tanto, un hilo puede definirse como cada secuencia de control dentro de un proceso que ejecuta sus instrucciones de forma independiente.
Elba Karen Sáenz García- Oscar René Valdez
Casillas62
![Page 63: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/63.jpg)
Procesos con un solo hilo y con
múltiples hilos
Elba Karen Sáenz García- Oscar René Valdez
Casillas63
Código Datos Archivos Código Datos Archivos
Hilo Hilos
Mono-hilo Multi-hilo
![Page 64: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/64.jpg)
Hilos y procesos
Elba Karen Sáenz García- Oscar René Valdez
Casillas64
un procesoun hilo
varios procesosun hilo por proceso
varios procesosvarios hilos por proceso
un procesovarios hilos
![Page 65: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/65.jpg)
Empezando con OpenMP
Proyecto PAPIME PE104911
Elba Karen Sáenz García- Oscar René Valdez
Casillas65
![Page 66: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/66.jpg)
Arquitectura de OpenMP
• Fork/join (Maestro esclavo)
• Trabajo Y Datos Compartido entre hilos
• Maneja sincronización (barreras, otras)
Elba Karen Sáenz García- Oscar René Valdez
Casillas66
![Page 67: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/67.jpg)
Fork / Join
Elba Karen Sáenz García- Oscar René Valdez
Casillas67
F
O
R
K
J
O
I
N
J
O
I
N
F
O
R
K
Master
ThreadParallel
Regions
![Page 68: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/68.jpg)
Sintaxis
• Directivas o pragmas
– #pragma omp construct [clause [clause]…]
– Clausulas: Especifican atributos para compartir
datos y calendarización
Una pragma en C o C++ es un directivo al
compilador.
Elba Karen Sáenz García- Oscar René Valdez
Casillas68
![Page 69: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/69.jpg)
Regiones paralelas
Elba Karen Sáenz García- Oscar René Valdez
Casillas69
#pragma omp parallel
Thread
1
Thread
2
Thread
3
Implicit Barrier
Master Thread
![Page 70: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/70.jpg)
Regiones paralelas
• Los hilos son creados desde el pragma
parallel.
• Los datos son compartidos entre los hilos.
Elba Karen Sáenz García- Oscar René Valdez
Casillas70
C/C++ : #pragma omp parallel
{
bloque código
}
![Page 71: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/71.jpg)
¿Cuántos hilos?
• Num. Hilos = Num. Procesadores o núcleos
• Intel lo usa de esta forma.
• Se definen más hilos con la variable de
ambiente
OMP_NUM_THREADS.
Elba Karen Sáenz García- Oscar René Valdez
Casillas71
![Page 72: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/72.jpg)
Actividad 1
• Compilar la versión serial.
#include <stdio.h>
int main() {
int i;
printf(“Hola Mundo\n");
for(i=0;i<6;i++)
printf("Iter:%d\n",i);
printf(“Adios \n");
}
Elba Karen Sáenz García- Oscar René Valdez
Casillas72
![Page 73: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/73.jpg)
Actividad 1
• Agregar la directiva para ejecutar las primeras
cuatro líneas del main en paralelo.
• Compilar con la opción -fopenmp
• ¿Qué sucede?
Elba Karen Sáenz García- Oscar René Valdez
Casillas73
![Page 74: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/74.jpg)
Actividad 2
• Aumentar el número de hilos a 4 y ejecutar el
programa
• $ export OMP_NUM_THREADS=4
• Ejecutar el programa con más hilos y describir
lo que sucede.
Elba Karen Sáenz García- Oscar René Valdez
Casillas74
![Page 75: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/75.jpg)
Número de hilos en la región paralela
El número de hilos que se generan para ejecutar una región
paralela se controla:
Elba Karen Sáenz García- Oscar René Valdez
Casillas75
a. estáticamente, mediante una variable de entorno:
> export OMP_NUM_THREADS=4
b. en ejecución, mediante una función :
omp_set_num_threads(4);
c. en ejecución, mediante una cláusula del “pragma
parallel”:
num_threads(4)
Regiones paralelas
![Page 76: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/76.jpg)
Work – Sharing
constructor for
#pragma omp paralell
#pragma omp for
for(i=0;i<100;i++) {
Realizar Trabajo();
}
• Divide las iteraciones entre los hilos.
• Debe estar especificada en una región paralela
Elba Karen Sáenz García- Oscar René Valdez
Casillas76
![Page 77: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/77.jpg)
#pragma omp parallel#pragma omp for
for(i = 0; i < 12; i++) c[i] = a[i] + b[i]
#pragma omp parallel
#pragma omp for
Implicit barrier
i = 0
i = 1
i = 2
i = 3
i = 4
i = 5
i = 6
i = 7
i = 8
i = 9
i = 10
i = 11
#pragma omp parallel
#pragma omp for
Implicit barrier
i = 0
i = 1
i = 2
i = 3
i = 4
i = 5
i = 6
i = 7
i = 8
i = 9
i = 10
i = 11
Elba Karen Sáenz García- Oscar René Valdez
Casillas77
![Page 78: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/78.jpg)
Combinando Pragmas
• Estos dos segmentos de código son equivalentes.
Elba Karen Sáenz García- Oscar René Valdez
Casillas78
#pragma omp parallel {
#pragma omp forfor (i=0; i< MAX; i++) {
res[i] = huge();}
}
#pragma omp parallel forfor (i=0; i< MAX; i++) {
res[i] = huge();}
![Page 79: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/79.jpg)
Actividad
• Modificar el programa de la actividad 1 para
dividir el número de iteraciones entre los
hilos.
Elba Karen Sáenz García- Oscar René Valdez
Casillas79
![Page 80: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/80.jpg)
Variables Compartidas y Privadas
El hilo maestro tiene como contexto el conjunto de variables del programa, y existe a lo largo de toda la ejecución del programa.
Al crearse nuevos hilos, cada uno incluye su propio contexto, con su propia pila, utilizada como stack frame para las rutinas invocadas por el hilo
Las variables definidas por el hilo maestro son compartidas por todos los hilos. Sin embargo, algunas variables deberán ser propias de cada , privadas.
.
Elba Karen Sáenz García- Oscar René Valdez
Casillas80
Regiones paralelas
![Page 81: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/81.jpg)
Condiciones de carrera
• Una condición de carrera (race condition)
ocurre cuando dos o mas hilos acceden a un
recurso compartido sin control.
• Lo más común es el conflicto en el
almacenamiento• Acceso concurrente de la misma dirección de memoria
por varios hilos
• Al menos un hilo está escribiendo
Elba Karen Sáenz García- Oscar René Valdez
Casillas81
![Page 82: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/82.jpg)
Variables Compartidas y Privadas
Elba Karen Sáenz García- Oscar René Valdez
Casillas82
Shared-Memory Model and Threads
Shared
Variables
Private
Variables
Private
Variables
Thread
Thread
![Page 83: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/83.jpg)
Ejemplo descomposición de dominio
código secuencial:
int a[1000], i;
for ( i = 0; i < 1000; i++) a[ i]= foo (i);
Thread 0:
for ( i=0;i<500 ; i++) a[ i] = foo (i);
Thread 1:
for ( i=500;i<1000 ; i++) a[ i] = foo (i);
Elba Karen Sáenz García- Oscar René Valdez
Casillas83
Shared
Private
![Page 84: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/84.jpg)
Descomposición Funcionalvolatile int e;
main () {int x[10], j, k, m; j = f(x, k); m = g(x. k);
}
int f(int *x, int k){
int a; a = e * x[k] * x[k]; return a;}
int g(int *x, int k){
int a; k = k-1; a = e / x[k]; return a;}
Elba Karen Sáenz García- Oscar René Valdez
Casillas84
Thread 0
Thread 1
Variables locales a funciones: Private
![Page 85: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/85.jpg)
Clausulas
• shared(X )
Elba Karen Sáenz García- Oscar René Valdez
Casillas85
Se declara la variable X como compartida por todos los
hilos.
Sólo existe una copia, y todos los hilos acceden y modifican
dicha copia.
Se declara la variable Y como privada en cada hilo. Se crean
P copias, una por hilo(sin inicializar!).
Se destruyen al finalizar la ejecución de los hilos.
R.P.: Cláusulas de ámbito
���� private(Y)
![Page 86: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/86.jpg)
Ejemplo
Realizar un programa que sume dos arreglos unidimensionales y los almacene en un tercer arreglo.
float x, y ; int I, c[N];
#pragma omp parallel for private( x,y )for( i=0; i<N; i++) {
x = a[ i]; y = b[ i];c[ i] = x + y;
}
Elba Karen Sáenz García- Oscar René Valdez
Casillas86
![Page 87: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/87.jpg)
Ejemplo
problemas con private• Se requiere realizar el producto entre dos vectores de dimensión n.
float prod_punto(float* a, float* b, int N) {
float sum = 0.0;#pragma omp parallel for
for (int i=0; i<N; i++){
sum += a[i] * b[i];}
return sum;}
Elba Karen Sáenz García- Oscar René Valdez
Casillas87
![Page 88: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/88.jpg)
Funciones de ambiente
• void omp_set_num_threads(int nthreads)
• int omp_get_num_threads(void)
• int omp_get_max_threads(void)
• int omp_get_thread_num(void)
• int omp_get_num_procs(void)
Elba Karen Sáenz García- Oscar René Valdez
Casillas88
![Page 89: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/89.jpg)
¿Quién soy yo? ¿Cuántos somos?
• Cada hilo paralelo se identifica por un número. El 0 es el hilo
maestro.
• Dos funciones de la bibliotreca omp.h:
Elba Karen Sáenz García- Oscar René Valdez
Casillas89
nth = omp_get_num_threads();
devuelve el número de hilos generados.
tid = omp_get_thread_num();
devuelve el identificador del thread.
Regiones paralelas
![Page 90: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/90.jpg)
Ejercicio
• Realizar un programa donde dentro de una
región paralela se muestren los identificadores
de los hilos y el número total de hilos.
Elba Karen Sáenz García- Oscar René Valdez
Casillas90
![Page 91: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/91.jpg)
Región crítica
• Una región o sección crítica es una secuencia
de instrucciones que no debe ser
interrumpida por otros proceso
Elba Karen Sáenz García- Oscar René Valdez
Casillas91
![Page 92: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/92.jpg)
Constructor critical
Elba Karen Sáenz García- Oscar René Valdez
Casillas92
float dot_prod(float* a, float* b, int N) {
float sum = 0.0;#pragma omp parallel forfor (int i=0; i<N; i++){
#pragma omp criticalsum += a[i] * b[i];
}return sum;
}
// Sintaxis: #pragma omp critical [(lock_name)]
¿Cuál será el problema aquí?
![Page 93: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/93.jpg)
Ejercicio- paralelizar#include <omp.h>
#include <stdio.h>
#include <stdlib.h>
#define SIZE 10
int main()
{
int i;
int max;
int a[SIZE];
for (i = 0; i < SIZE; i++)
{
a[i] = rand();
printf("%d\n", a[i]);
}
max = a[0];
for (i = 1; i < SIZE; i++)
{
if (a[i] > max)
{
max = a[i];
}
}
printf("max = %d\n", max);
}
Elba Karen Sáenz García- Oscar René Valdez
Casillas93
![Page 94: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/94.jpg)
Asignando Iteraciones
• La cláusula schedule permite dividir las
iteraciones de los ciclos entre los hilos, indica
como las iteraciones se asignan a los hilos.
Elba Karen Sáenz García- Oscar René Valdez
Casillas94
![Page 95: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/95.jpg)
Clausula schedule
• schedule(static ,[chunk])– Bloques de iteraciones de tamaño “chunk” a los
hilos
– Distribución Round robin
• schedule (dynamic,[chunk])– Los hilos toman un numero “chunk” de
iteraciones, cuando estan sin trabajo.
• schedule(guided,[chunck])Cada thread toma iteraciones dinámicamente y
– progresivamente va tomando menos iteraciones.
Elba Karen Sáenz García- Oscar René Valdez
Casillas95
![Page 96: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/96.jpg)
Elba Karen Sáenz García- Oscar René Valdez
Casillas96
![Page 97: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/97.jpg)
Ejemplo
#pragma omp parallel for schedule (static, 8)
for( int i = start; i <= end; i += 2 )
{
if ( TestForPrime(i) ) gPrimesFound++;
}
Elba Karen Sáenz García- Oscar René Valdez
Casillas97
![Page 98: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/98.jpg)
Referencias
• Introduction to parallel programming, Intel Software College, junio 2007
• Multicore programming practices guide, TheMulticore Association
• www.openmp.org
• R. Chandra .Parallel Programming in OpenMP ,Morgan Kaufmann, 2001.
• B. Chapman ,Using OpenMP, The MIT Press, 2008.
Elba Karen Sáenz García- Oscar René Valdez
Casillas98
![Page 99: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/99.jpg)
Programación Paralela en OpenMp
Parte 2
Proyecto PAPIME PE104911
Facultad de Ingeniería UNAM
Elba Karen Sáenz García- Oscar René Valdez
Casillas 99
![Page 100: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/100.jpg)
Clausula reduction
• Las operaciones de reducción son comunes en
muchas aplicaciones paralelas.
• Utilizan variables a las que acceden todos los
procesos/hilos y sobre las que se efectúa
alguna operación de “acumulación” en modo
atómico.
Elba Karen Sáenz García- Oscar René Valdez
Casillas100
![Page 101: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/101.jpg)
Elba Karen Sáenz García- Oscar René Valdez
Casillas
Cláusula reduction
#pragma omp reduction(operator:variable)
OJO: no se sabe en qué orden se va a ejecutar la operación
--> debe ser conmutativa (cuidado con el redondeo).
#pragma omp parallel private(X) reduction(+:sum){
X = ……sum = sum + X;…
}
La operador de
reducción a utilizar.
101
![Page 102: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/102.jpg)
Elba Karen Sáenz García- Oscar René Valdez
Casillas
Operaciones utilizados en reducciones
(C/C++) Operator Initial Value
+ 0
* 1
- 0
^ 0
Operator Initial Value
& 0
| 0
&& 1
|| 0
102
![Page 103: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/103.jpg)
Actividad
• Realizar un programa que realice el producto
punto de dos vectores de dimensión n.
• Paralelizar el programa.
Elba Karen Sáenz García- Oscar René Valdez
Casillas103
![Page 104: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/104.jpg)
Cálculo del número Pi
• π= ∫0
1
4/(1+x2) dx
• La Regla de rectángulo consiste de estimar el
área debajo de la curva y=4/(1+x2) entre x=0 y
x=1 mediante áreas de rectángulos
Elba Karen Sáenz García- Oscar René Valdez
Casillas104
![Page 105: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/105.jpg)
Código Serial#include <stdio.h>
#include <time.h>
long long num_steps = 1000000000;
double step;
int main(int argc, char* argv[])
{
clock_t start, stop;
double x, pi, sum=0.0;
int i;
start = clock();
for (i=0; i<num_steps; i++)
{
x = (i + .5)*step;
sum = sum + 4.0/(1.+ x*x);
}
pi = sum*step;
stop = clock();
printf(“El valor de Pi es %15.12f\n",pi);
printf(“El tiempo para calcular PI fue %f segundos\n",((double)(stop -start)/1000.0));
return 0;
}
Elba Karen Sáenz García- Oscar René Valdez
Casillas105
![Page 106: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/106.jpg)
Para medir tiempo en OpenMP
double empezar,terminar;
empezar=omp_get_wtime( );
…código
terminar=omp_get_wtime();
printf(“TIEMPO=%lf\n”,empezar-terminar)
El resultado es en segundos.
Elba Karen Sáenz García- Oscar René Valdez
Casillas106
![Page 107: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/107.jpg)
Una Solución
#include <omp.h>
static long num_steps = 100000; double step;
#define NUM_THREADS 2
void main ()
{
int i; double x, pi, sum[NUM_THREADS];
step = 1.0/(double) num_steps;
omp_set_num_threads(NUM_THREADS)
#pragma omp parallel
{
double x; int id;
id = omp_get_thread_num();
sum[id] = 0;
#pragma omp for
for (i=id;i< num_steps; i++){
x = (i+0.5)*step;
sum[id] += 4.0/(1.0+x*x);
}
}
for(i=0, pi=0.0;i<NUM_THREADS;i++)
pi += sum[i] * step;
}Elba Karen Sáenz García- Oscar René Valdez
Casillas107
![Page 108: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/108.jpg)
Otra Solución
#include <omp.h>
static long num_steps = 100000; double step;
#define NUM_THREADS 2
void main ()
{
int i; double x, pi, sum = 0.0;
step = 1.0/(double) num_steps;
omp_set_num_threads(NUM_THREADS);
#pragma omp parallel for reduction(+:sum) private(x)
for (i=1;i<= num_steps; i++){
x = (i-0.5)*step;
sum = sum + 4.0/(1.0+x*x);
}
pi = step * sum;
}
Elba Karen Sáenz García- Oscar René Valdez
Casillas108
![Page 109: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/109.jpg)
Clausula firstprivate
• Las variables privadas no se inicializan y al
terminar la región paralela tienen un valor
indefinido.
• Para inicializar una variable privada se utiliza
firstprivate.
Elba Karen Sáenz García- Oscar René Valdez
Casillas109
![Page 110: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/110.jpg)
Ejemplo
X = Y = Z = 0;
#pragma omp parallelprivate(Y) firstprivate(Z)
{...X = Y = Z = 1;
}
...
valores dentro de la
región paralela?
X ====Y ====Z ====
valores fuera de la región
paralela?
X = Y = = = = Z ====
? (0)? (0)
1
0
0
?
Elba Karen Sáenz García- Oscar René Valdez
Casillas110
![Page 111: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/111.jpg)
¿Cómo se puede paralelizar el siguiente
código?
x[0] = complex_function ();
for (i=0;j< n;i ++) {
for (j=1;j<4;j++)
x[j]=g( i,x [j -1]);
sol[ i] = x[1] – x[3 ];}
Se pueden dividir las itereciones del ciclo exterior sij y x son privadas. Sin embargo, x[0] se necesitaen la primera iteración del bucle interior.
Elba Karen Sáenz García- Oscar René Valdez
Casillas111
![Page 112: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/112.jpg)
Una solución
x[0] = complex_function ();
#pragma omp parallel for private[j] firstprivate (x)
for (i -0;j< n;i ++) {
for (j=1;j<4;j++)
x[j]=g( i,x [j -1]);
sol[ i] = x[1] – x[3];}
Elba Karen Sáenz García- Oscar René Valdez
Casillas112
![Page 113: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/113.jpg)
Descomposicion Funcional
v = alpha();w = beta();x = gamma(v, w);y = delta();printf ("%6.2f\n", epsilon(x,y));
alpha beta
gamma delta
epsilon
Elba Karen Sáenz García- Oscar René Valdez
Casillas113
![Page 114: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/114.jpg)
¿Cómo se paraleliza?
Elba Karen Sáenz García- Oscar René Valdez
Casillas
alpha beta
gamma delta
epsilon
114
![Page 115: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/115.jpg)
Paralelismo funcional
Secciones Paralelas
•Secciones independientes de código, se
pueden ejecutar de forma concurrente
Serial Parallel
#pragma omp parallel sections
{
#pragma omp section
phase1();
#pragma omp section
phase2();
#pragma omp section
phase3();
}
Elba Karen Sáenz García- Oscar René Valdez
Casillas115
![Page 116: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/116.jpg)
Constructor section
Permite usar paralelismo de funcional (descomposición
funcional).
Reparte secciones de código independiente a hilos
diferentes.
Cada sección paralela es ejecutada por un sólo hilo, y
cada hilo ejecuta ninguna o alguna sección.
Una barrera implícita sincroniza el final de las secciones
o
Rep. de tareas: funciones
Elba Karen Sáenz García- Oscar René Valdez
Casillas116
![Page 117: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/117.jpg)
Posible solución
#pragma omp parallel sections{
#pragma omp section /* Opcional */v = alpha();
#pragma omp sectionw = beta();
#pragma omp sectiony = delta();
}x = gamma(v, w);printf ("%6.2f\n", epsilon(x,y));}
Elba Karen Sáenz García- Oscar René Valdez
Casillas117
![Page 118: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/118.jpg)
Otra Posibilidad
alpha beta
gamma delta
epsilon
Ejecutar alpha ybeta en paralelo.Ejecutar gama ydelta en paralelo.
Elba Karen Sáenz García- Oscar René Valdez
Casillas118
![Page 119: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/119.jpg)
Otra posibilidad#pragma omp parallel sections{#pragma omp section
v=alpha();#pragama omp section
w=beta();}#pragma omp parallel sections
{#pragma omp section
y=delta();#pragma omp section
x=gamma(v,w);}
printf(“%6.2f\n”,epsilon(x,y);
Elba Karen Sáenz García- Oscar René Valdez
Casillas119
![Page 120: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/120.jpg)
Con dos secciones#pragma omp parallel
{#pragma omp sections
{#pragma omp section
v = alpha();#pragma omp section
w = beta();}
#pragma omp sections{#pragma omp section
x = gamma(v, w);#pragma omp section
y = delta();}
}printf ("%6.2f\n", epsilon(x,y));Elba Karen Sáenz García- Oscar René Valdez
Casillas120
![Page 121: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/121.jpg)
Ejemplo de secciones
#pragma omp parallel sections
{
#pragma omp section
for( i=0;i< n;i ++)
c[ i]=a[ i]+b[ i];
#pragma omp section
for(j=0;j< n;j ++)
d[j]=e[j]+f[j];
}
Elba Karen Sáenz García- Oscar René Valdez
Casillas121
![Page 122: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/122.jpg)
Una posibilidad mejor
#pragma omp parallel{
#pragma omp forfor( i=0;i< n;i ++)
c[ i]=a[ i]+b[ i];#pragma omp for
for(j=0;j< n;j ++)d[j]=e[j]+f[j];
}
Elba Karen Sáenz García- Oscar René Valdez
Casillas122
![Page 123: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/123.jpg)
o simplemente
#pragma parallel for
for( i=0;i< n;i ++)
{
c[ i]=a[ i]+b[ i];
d[ i]=e[ i]+f[ i];
}
Elba Karen Sáenz García- Oscar René Valdez
Casillas123
![Page 124: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/124.jpg)
Barreras Implícitas
• Algunos constructores tiene barreras
implícitas
– Parallel
– For
– Single
• Barreras no necesarias perjudican el
desempeño
Elba Karen Sáenz García- Oscar René Valdez
Casillas124
![Page 125: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/125.jpg)
Ejercicio
• Paralelizar los dos códigos proporcionados,
utilizando los constructores y clausulas vistos.
Elba Karen Sáenz García- Oscar René Valdez
Casillas125
![Page 126: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/126.jpg)
Referencias
• www.openmp.org
• OpenMP 2.5 Specifications
• “”Rohit Chandra, Parallel Programming in OpenMP. Morgan KaufmannPublishers.
• Comunidad
– The community of OpenMP researchers and developers in
academia and industry
– http://www.compunity.org/
• Articulos conferencias:
– WOMPAT, EWOMP, WOMPEI, IWOMP
• http://www.nic.uoregon.edu/iwomp2005/index.html#program
Elba Karen Sáenz García- Oscar René Valdez
Casillas126
![Page 127: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/127.jpg)
Programación Paralela en OpenMp
Parte 3
Proyecto PAPIME PE104911
Facultad de Ingeniería UNAM
127Elba Karen Sáenz García- Oscar René Valdez
Casillas
![Page 128: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/128.jpg)
Constructor Barrier
• Barrera Explicita
• Cada hilo espera hasta que todos lleguen a la
barrera#pragma omp parallel shared (A, B, C) {
DoSomeWork(A,B);printf(“Processed A into B\n”);
#pragma omp barrier DoSomeWork(B,C);printf(“Processed B into C\n”);
}
Elba Karen Sáenz García- Oscar René Valdez
Casillas128
![Page 129: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/129.jpg)
Constructor single
• Define un bloque básico de código, dentro de
una región paralela, que debe ser ejecutado
por un único hilo.
• Ejemplo, una operación de entrada/salida.
• No se especifica qué hilo ejecutará la tarea.
Elba Karen Sáenz García- Oscar René Valdez
Casillas129
![Page 130: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/130.jpg)
Constructor single
• #pragma omp single
#pragma omp parallel{
DoManyThings();#pragma omp single{
ExchangeBoundaries();} // Hilos esperan
DoManyMoreThings();}
Elba Karen Sáenz García- Oscar René Valdez
Casillas130
![Page 131: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/131.jpg)
#pragma omp parallel
{
... ;
#pragma omp single
inicializar(A);
#pragma omp for
for(i=0; i<N; i++)
A[i] = A[i] * A[i] + 1;
... ;
#pragma omp single
copiar(B,A);
}
Elba Karen Sáenz García- Oscar René Valdez
Casillas131
singlesinglesinglesingle
for
singlesinglesinglesingle
parallel
![Page 132: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/132.jpg)
Constructor maestro
#pragma omp master { }
#pragma omp parallel{
DoManyThings();#pragma omp master{ // si no es el maestro,salta
ExchangeBoundaries();}DoManyMoreThings();
}
Elba Karen Sáenz García- Oscar René Valdez
Casillas132
![Page 133: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/133.jpg)
#include <omp.h>
#include <stdio.h>
int main( )
{
int a[5], i;
#pragma omp parallel
{
#pragma omp for
for (i = 0; i < 5; i++)
a[i] = i * i;
#pragma omp master
for (i = 0; i < 5; i++)
printf_s("a[%d] = %d\n", i, a[i]);
#pragma omp barrier
#pragma omp for
for (i = 0; i < 5; i++)
a[i] += i;
}
}
Elba Karen Sáenz García- Oscar René Valdez
Casillas133
![Page 134: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/134.jpg)
Barreras Implícitas
• Algunos constructores tiene barreras
implícitas
– Parallel
– For
– Single
• Barreras no necesarias perjudican el
desempeño
Elba Karen Sáenz García- Oscar René Valdez
Casillas134
![Page 135: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/135.jpg)
Clausula nowait
• Permite ignorar barreras implicitas
#pragma omp for nowait
for(...)
{...};
#pragma single nowait
{ [...] }
#pragma omp for schedule(dynamic,1) nowait
for(int i=0; i<n; i++)
a[i] = bigFunc1(i);
#pragma omp for schedule(dynamic,1)
for(int j=0; j<m; j++)
b[j] = bigFunc2(j);
Elba Karen Sáenz García- Oscar René Valdez
Casillas135
![Page 136: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/136.jpg)
Constructor atomic
• Asegura que una posición específica de memoria debe ser modificada de forma atómica, sin permitir que múltiples hilos intenten escribir en ella de forma simultánea. (sección critica).
• La sentencia debe tener una de las siguientes formas:
x <operacion-binaria> = <expr>
x++
++x
x---
---x
•
Elba Karen Sáenz García- Oscar René Valdez
Casillas136
![Page 137: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/137.jpg)
Ejemplo atomic
#include <stdio.h>
#include <omp.h>
#define MAX 10
int main() {
int count = 0;
#pragma omp parallel num_threads(MAX)
{
#pragma omp atomic
count++;
}
printf("Number of threads: %d\n", count);
}
Elba Karen Sáenz García- Oscar René Valdez
Casillas137
![Page 138: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/138.jpg)
Paralelismo anidado
• Por defecto no es posible anidar regiones paralelas, hay que indicarlo explícitamente mediante:– una llamada a una función
omp_set_nested(TRUE);– una variable de entorno
> export OMP_NESTED=TRUE
• Una función devuelve el estado de dicha opción:
• omp_get_nested(); (true o false)
Elba Karen Sáenz García- Oscar René Valdez
Casillas138
![Page 139: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/139.jpg)
Paralelismo anidado
Elba Karen Sáenz García- Oscar René Valdez
Casillas139
Master
Región paralela externa
Región paralela anidada
Región paralela externa
![Page 140: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/140.jpg)
Paralelismo anidado
• OpenMP 3.0 mejora el soporte al paralelismo anidado:
• -La función omp_set_num_threads() puede ser invocada dentro de una región paralela para controlar el grado del siguiente nivel de paralelismo.
• Permite conocer el nivel de anidamiento mediante omp_get_level() y omp_get_active_level().
• Se puede tener acceso al identificador del padre de nivel n omp_get_ancestor_thread_num(n)y al número de threadsen dicho nivel.
Elba Karen Sáenz García- Oscar René Valdez
Casillas140
![Page 141: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/141.jpg)
Paralelismo anidado#include <omp.h>
#include <stdio.h>
void report_num_threads(int level)
{
#pragma omp single{printf("Level %d: number of threads in the team - %d\n",level, omp_get_num_threads());
}
}
Elba Karen Sáenz García- Oscar René Valdez
Casillas141
![Page 142: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/142.jpg)
int main() {
omp_set_dynamic(0);
#pragma omp parallel num_threads(2)
{
report_num_threads(1);
#pragma omp parallel num_threads(2)
{
report_num_threads(2);
#pragma omp parallel num_threads(2)
{
report_num_threads(3);
}
}
} return(0);
}
Elba Karen Sáenz García- Oscar René Valdez
Casillas142
![Page 143: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/143.jpg)
Variable de ambiente
SUNW_MP_MAX_POOL_THREADS
• Máximo numero de hilos esclavos en una
región paralela
• Valor por defecto 1023
Elba Karen Sáenz García- Oscar René Valdez
Casillas143
![Page 144: Programación Paralela en OpenMplcomp89.fi-b.unam.mx/licad/assets/ProgramacionOpenMP/Programaci... · Introducción a Open Multiprocessing (OpenMP) Proyecto PAPIME PE104911 Elba Karen](https://reader030.vdocuments.mx/reader030/viewer/2022013016/5ba1813009d3f2b66a8c6ba2/html5/thumbnails/144.jpg)
Referencias
• R. Chandra et al,Parallel Programming in OpenMP,Morgan Kaufmann, 2001.
• B. Chapman et al Using OpenMP, The MIT Press, 2008.
• www.openmp.org
• Introduction to parallel programming, Intel Software College, junio 2007
Elba Karen Sáenz García- Oscar René Valdez
Casillas144