SlideShare una empresa de Scribd logo
UD3 - OpenMP
Programación de Memoria Compartida
ARQUITECTURA DE COMPUTADORES
1. Qué es OpenMP. Compiladores y lenguajes
que lo admiten
OpenMP es una interfaz de programación de aplicaciones (API) para la
programación paralela de memoria compartida multiplataforma. “MP” son las
siglas de multiprocesamiento. OpenMP está diseñado para sistemas en las que
cada hilo o proceso pueden, potencialmente, tener acceso a toda la memoria
disponible. Cuando se programa con OpenMP, consideramos nuestro sistema como
una colección de núcleos o CPUs (que procesan los hilos), y en que todos tienen
acceso a la memoria principal.
1. Qué es OpenMP. Compiladores y lenguajes
que lo admiten
2. Como configurar un entorno de desarrollo
en OpenMP y C++
El ambiente de desarrollo Code::Blocks
Code::Blocks es un entorno de desarrollo integrado libre y multiplataforma para
el desarrollo de programas en lenguaje C y C++ disponible para Microsoft
Windows, Apple OSX y Linux. Está basado en la plataforma de interfaces
gr ́aficas WxWidgets, por lo que se ha portado a diversos sistemas operativos, y
está licenciado bajo la licencia pública general de GNU. Sus distintas versiones
junto a la documentaci ́on correspondiente est ́an disponibles en
http://www.codeblocks.org. Code::Blocks puede enlazarse a una variedad de
compiladores, como el Microsoft Visual Studio Toolkit, el compilador C++ de
Intel y, en particular, el compilador MinGW. Este ultimo es una implementación
de los compiladoresGCC para la plataforma Win32, lo que permite hacer uso de
sus conocidas capacidades en ambientes Windows.
2. Como configurar un entorno de desarrollo
en OpenMP y C++
Instalación del compilador Code::Blocks
La versión 12.11 del ambiente de desarrollo Code::Blocks est ́a disponible para
Microsoft Windows en http://www.codeblocks.org/downloads/26. En esta
p ́agina hay dos versiones: codeblocks-12.11-setup.exe y codeblocks-
12.11mingw-setup.exe. Es necesario bajar esta ́ultima versióon, pues solo ésta
contiene la versión 4.7.1 de 32 bits del compilador GCC y del depurador GDB de
Twilight Dragon Media (MinGW TDM-GCC).
Una vez obtenido el archivo de instalación, éste se ejecuta, lo que instala el
compilador en la ruta de acceso por omisión, c:ProgramilesCodeBlocks. Es
posible instalar el compilador en otro directorio, si así se quisiera.
2. Como configurar un entorno de desarrollo
en OpenMP y C++
Instalación de la biblioteca OpenMP
Para utilizar la biblioteca OpenMP con Code::Blocks, es necesario además
instalar el paquete OpenMP para TDM-GCC, gcc-4.7.1-tdm-1-openmp.zip, el
cual puede obtenerse de http://tdm-gcc.tdragon.net/download. Este paquete
debe instalarse en el directorio raíz de instalación del compilador MinGW,
c:Program FilesCodeBlocksMinGW
2. Como configurar un entorno de desarrollo
en OpenMP y C++
Definición de las opciones del proyecto
Una vez creado un proyecto en el ambiente de desarrollo Code::Blocks, se
deben definir las opciones del proyecto de manera de utilizar la biblioteca
OpenMP. Para ello, acceda a la opción Build Options... del menú Project . Allí, en
la pestaña Compiler Settings, agregue la opción -fopenmp bajo la pestaña Other
options. Luego, en la pestaña Linker Settings, en la ventana other linker options
agregue también la opción -fopenmp
2. Como configurar un entorno de desarrollo
en OpenMP y C++
Verificando la instalación
Finalmente, verifique su instalación compilando y ejecutando exitosamente el
siguiente programa en OpenMP. Su salida debe indicar la versión de OpenMP
en uso, el número de procesadores disponibles y muestra además cómo crear
hebras usando el pragma parallel.
2. Como configurar un entorno de desarrollo
en OpenMP y C++
Verificando la instalación
#include <omp.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n_hebras, h_id, n_procs;
printf("Esto es OpenMP, version %dn", _OPENMP);
// Numero de procesadores
n_procs = omp_get_num_procs();
2. Como configurar un entorno de desarrollo
en OpenMP y C++
Verificando la instalación
printf("Numero de procesadores: %dn", n_procs);
// Creacion de hebras
omp_set_num_threads(n_procs);
#pragma omp parallel
printf("Soy la hebra %d de %dn", omp_get_thread_num(),
omp_get_num_threads());
return 0;
}
3. Descripción general de las directivas de
OpenMP a partir de un código de ejemplo
OpenMP comienza a través de directivas, con funciones propias (que pueden ser
condicionalmente compiladas) y variables de entorno, que pueden modificar el
comportamiento en tiempo de ejecución.
1. Directiva de formato. Cada directiva inicia con #pragma omp ...
#pragma omp directive-name[clause[,] clause]...
2. Constructor paralelo. Las siguientes directivas definen una región paralela, la
cual es una parte del programa que puede ser ejecutada por múltiples threads
en paralelo. Este es el constructor fundamental que inicia la ejecución paralela.
#pragma omp parallel [clause[,] clause]...
{
bloque de código
}
3. Descripción general de las directivas de
OpenMP a partir de un código de ejemplo
La cláusula puede ser:
• if(expresión escalar)
• private(lista de variables)
• firstprivate(lista de variables)
• default(shared | none)
• shared(lista de variables)
• copyin(lista de variables)
• reduction(operador:lista de variables)
• num_threads(expresión entera)
3. Descripción general de las directivas de
OpenMP a partir de un código de ejemplo
Entre las cláusulas que se pueden utilizar, las más usadas son:
• private(lista de variables) En esta la lista de variables puede ser separada por "," y para
cada una de ellas se genera una copia en cada thread, esta copia no tiene relación con la
original y no es inicializada a menos que se utilice firstprivate.
• shared(lista de variables) En esta las variables de la lista son comunes a todos los threads
y cada uno de ellos puede modificarla afectándola en forma global.
• threadprivate(lista de variables) Hace que la lista sea privada a cada thread pero globales
dentro de un thread.
• reduction(operador:lista de variables) Realiza una operación de reducción sobre las
variables que aparecen en la lista utilizando el operador/intrínseco especificado. El
operador puede ser: +, *, -, &(and), |(or), ^(eqv), &&(neqv). El intrínseco puede ser: ||
(max), (min), (and), (or).
3. Descripción general de las directivas de
OpenMP a partir de un código de ejemplo
Al final de una región paralela hay una sincronización implícita. Solo el thread master
continúa la ejecución. Cuando un thread encuentra un constructor paralelo, un grupo
de threads es creado si uno de los siguientes casos es verdadero:
• No está la cláusula if presente.
• Si al evaluar la expresión de if tiene un valor diferente de cero.
• Este thread se convierte en el thread maestro de un grupo, con el número de thread
0, y todos los threads, incluyendo el maestro ejecutan la región paralela. Si el valor
de la expresión if se hace cero la región es serializada nuevamente. Para determinar
el número de threads necesarios, las siguientes reglas deben ser consideradas en
orden. La primera regla que cumple la condición es aplicada:
3. Descripción general de las directivas de
OpenMP a partir de un código de ejemplo
1. Si la cláusula num_threads está presente, entonces la expresión entera en la cláusula
es el número de threads requerido.
2. Si la función omp_set_num_threads de la librería es llamada, entonces el valor del
argumento es el número de threads requeridos.
3. Si la variable de entorno OMP_NUM_THREADS es definida entonces el valor de esta
variable de entorno es el número de threads requeridos.
4. Si ninguno de los métodos anteriormente mencionados es usado, entonces el número
de threads requeridos en el definido por defecto.
3. Descripción general de las directivas de
OpenMP a partir de un código de ejemplo
3. Constructor for La directiva for identifica un constructor de trabajo compartido
el cual especifica que las iteraciones del ciclo asociado deben ser ejecutadas en
paralelo.
#pragma omp for[clause[,] clause]...
{
ciclo for
}
3. Descripción general de las directivas de
OpenMP a partir de un código de ejemplo
Las cláusulas que se pueden utilizar son las siguientes:
• private(lista de variables)
• firstprivate(lista de variables)
• lastprivate(lista de variables)
• reduction(operador:lista de variables)
• ordered
• schedule(categoría, tamaño_tramo)
• nowait
La cláusula lastprivate hace que la lista se comporte como si hubiese sido declarada
privada, pero el último thread que ejecuta la sentencia de distribución de trabajo, actualiza
con su valor privado (de la lista) el que hubiera antes del constructor.
3. Descripción general de las directivas de
OpenMP a partir de un código de ejemplo
La cláusula ordered es una instancia donde una parte de un ciclo puede ser ejecutada en
orden serial, cuando el resto del ciclo se ejecuta en paralelo.
La cláusula schedule especifica cuántas iteraciones del for son divididas entre el número de
threads, el valor de tamaño_tramo es especificado en el for, es invariante y es un número
positivo. Las categorías utilizadas en esta cláusula puede ser una de las siguientes:
• static: cuando ésta es usada, el número de iteraciones es dividido en tramos de tamaño
"tamaño_tramo" y es asignado en forma de "Round Robin".
• dynamic: cuando se usa esta categoría, la cantidad de iteraciones es dividida en una serie de
tramos, cada una contiene "tamaño_tramo" iteraciones. Cada thread ejecuta su tramo y
espera por más trabajo asignado.
• guided: para esta categoría las iteraciones son asignadas a los threads en tramos con tamaño
decreciente. Cuando un thread finaliza el tramo de iteraciones asignado, a este se le asigna
otro tramo dinámicamente hasta que se termine la repartición.
• runtime: cuando se usa runtime, las categorías de schedule son obtenidas en tiempo de
ejecución con la configuración dada en la variable de entorno OMP_SCHEDULE.
3. Descripción general de las directivas de
OpenMP a partir de un código de ejemplo
Finalmente la cláusula nowait evita que haya una sincronización entre threads al final de la
directiva de distribución de trabajo.
Ejemplo
#include <omp.h>
#include <stdio.h>
#include <stdlib.h>
3. Descripción general de las directivas de
OpenMP a partir de un código de ejemplo
int main(int argc, char **argv)
{
int pid;
#pragma omp parallel private( pid )
{
pid = omp_get_thread_num(); // entrega el nro de thread
printf("Soy el thread=%dn",pid);
}
return 0;
}
3. Descripción general de las directivas de
OpenMP a partir de un código de ejemplo
1. Indicar la cantidad de threads, a través de variables de entorno:
setenv OMP_NUM_THREADS 4
2. Compilar la aplicación en un procesador intel
icpc -o salida.exe prueba_1.cc –openmp
3. Ejecución de la aplicación.
>./salida.exe
antes del pragma ...
Soy el thread=0
Soy el thread=3
Soy el thread=2
Soy el thread=1

Más contenido relacionado

La actualidad más candente

Uso de hilos
Uso de hilosUso de hilos
Uso de hilos
Monse Espinosa
 
Uso de apis en java
Uso de apis en javaUso de apis en java
Uso de apis en java
Andres Alejandro Figueroa
 
Multitarea e hilos en java con ejemplos
Multitarea e hilos en java con ejemplosMultitarea e hilos en java con ejemplos
Multitarea e hilos en java con ejemplos
Carlos Anibal Riascos Hurtado
 
Uso de apis en java
Uso de apis en javaUso de apis en java
Uso de apis en java
Andres Alejandro Figueroa
 
Librerias java
Librerias javaLibrerias java
Sistemas Distribuidos y Paralelismo - Unidad 2
Sistemas Distribuidos y Paralelismo - Unidad 2Sistemas Distribuidos y Paralelismo - Unidad 2
Sistemas Distribuidos y Paralelismo - Unidad 2
ingnucious
 
37 reunir información del sistema
37  reunir información del sistema37  reunir información del sistema
37 reunir información del sistema
josemanuelacostarendon
 
PROGRAMACIÓN PARALELA
PROGRAMACIÓN PARALELAPROGRAMACIÓN PARALELA
PROGRAMACIÓN PARALELA
Raquel Solano
 
39 o profile
39  o profile39  o profile
39 o profile
Aprende Viendo
 
Zenmap
ZenmapZenmap
Zenmap
xwilberhp
 
Apunt2a
Apunt2aApunt2a
Apunt2a
pabesacv
 
Concurrencia en Java
Concurrencia en JavaConcurrencia en Java
Concurrencia en Java
Cristian
 
11 suplemments
11 suplemments11 suplemments
11 suplemments
cyberleon95
 
Servicios de comunicaciones (i)
Servicios de comunicaciones (i)Servicios de comunicaciones (i)
Servicios de comunicaciones (i)
Dani Gutiérrez Porset
 
Slides sesion8 matlab - IF y bucles
Slides sesion8 matlab - IF y buclesSlides sesion8 matlab - IF y bucles
Slides sesion8 matlab - IF y bucles
matlab_usc
 
Hilos – threads en java
Hilos – threads   en javaHilos – threads   en java
Hilos – threads en java
Carlos Anibal Riascos Hurtado
 
37 supervisión del sistema
37  supervisión del sistema37  supervisión del sistema
37 supervisión del sistema
Aprende Viendo
 
Hilos En Java
Hilos En JavaHilos En Java
S Incronizacion De Procesos
S Incronizacion De ProcesosS Incronizacion De Procesos
S Incronizacion De Procesos
AcristyM
 
Niveles de ejecución en debian
Niveles de ejecución en debianNiveles de ejecución en debian
Niveles de ejecución en debian
frangp5438
 

La actualidad más candente (20)

Uso de hilos
Uso de hilosUso de hilos
Uso de hilos
 
Uso de apis en java
Uso de apis en javaUso de apis en java
Uso de apis en java
 
Multitarea e hilos en java con ejemplos
Multitarea e hilos en java con ejemplosMultitarea e hilos en java con ejemplos
Multitarea e hilos en java con ejemplos
 
Uso de apis en java
Uso de apis en javaUso de apis en java
Uso de apis en java
 
Librerias java
Librerias javaLibrerias java
Librerias java
 
Sistemas Distribuidos y Paralelismo - Unidad 2
Sistemas Distribuidos y Paralelismo - Unidad 2Sistemas Distribuidos y Paralelismo - Unidad 2
Sistemas Distribuidos y Paralelismo - Unidad 2
 
37 reunir información del sistema
37  reunir información del sistema37  reunir información del sistema
37 reunir información del sistema
 
PROGRAMACIÓN PARALELA
PROGRAMACIÓN PARALELAPROGRAMACIÓN PARALELA
PROGRAMACIÓN PARALELA
 
39 o profile
39  o profile39  o profile
39 o profile
 
Zenmap
ZenmapZenmap
Zenmap
 
Apunt2a
Apunt2aApunt2a
Apunt2a
 
Concurrencia en Java
Concurrencia en JavaConcurrencia en Java
Concurrencia en Java
 
11 suplemments
11 suplemments11 suplemments
11 suplemments
 
Servicios de comunicaciones (i)
Servicios de comunicaciones (i)Servicios de comunicaciones (i)
Servicios de comunicaciones (i)
 
Slides sesion8 matlab - IF y bucles
Slides sesion8 matlab - IF y buclesSlides sesion8 matlab - IF y bucles
Slides sesion8 matlab - IF y bucles
 
Hilos – threads en java
Hilos – threads   en javaHilos – threads   en java
Hilos – threads en java
 
37 supervisión del sistema
37  supervisión del sistema37  supervisión del sistema
37 supervisión del sistema
 
Hilos En Java
Hilos En JavaHilos En Java
Hilos En Java
 
S Incronizacion De Procesos
S Incronizacion De ProcesosS Incronizacion De Procesos
S Incronizacion De Procesos
 
Niveles de ejecución en debian
Niveles de ejecución en debianNiveles de ejecución en debian
Niveles de ejecución en debian
 

Destacado

Taller de baterias
Taller de bateriasTaller de baterias
Taller de baterias
RiosMedia Rios
 
Taller de baterías
Taller de bateríasTaller de baterías
Taller de baterías
manurial
 
Taller de baterías
Taller de bateríasTaller de baterías
Taller de baterías
Raúl Nieto
 
taller de baterias
taller de bateriastaller de baterias
taller de baterias
julenbalenziaga
 
Taller de Baterías
Taller de BateríasTaller de Baterías
Taller de Baterías
jorret
 
Fundamentos Físicos: Taller de baterías.
Fundamentos Físicos: Taller de baterías.Fundamentos Físicos: Taller de baterías.
Fundamentos Físicos: Taller de baterías.
jorgeMjurado
 
Presentación tipos de pilas y sus voltajes
Presentación tipos de pilas y sus voltajesPresentación tipos de pilas y sus voltajes
Presentación tipos de pilas y sus voltajes
Timoteo Fagua Sanchez
 
COMO SUBIR DIAPOSITIVAS A SLIDESHARE
COMO SUBIR DIAPOSITIVAS A SLIDESHARECOMO SUBIR DIAPOSITIVAS A SLIDESHARE
COMO SUBIR DIAPOSITIVAS A SLIDESHARE
MARCO ANDRES CHARRY PATARROYO
 

Destacado (8)

Taller de baterias
Taller de bateriasTaller de baterias
Taller de baterias
 
Taller de baterías
Taller de bateríasTaller de baterías
Taller de baterías
 
Taller de baterías
Taller de bateríasTaller de baterías
Taller de baterías
 
taller de baterias
taller de bateriastaller de baterias
taller de baterias
 
Taller de Baterías
Taller de BateríasTaller de Baterías
Taller de Baterías
 
Fundamentos Físicos: Taller de baterías.
Fundamentos Físicos: Taller de baterías.Fundamentos Físicos: Taller de baterías.
Fundamentos Físicos: Taller de baterías.
 
Presentación tipos de pilas y sus voltajes
Presentación tipos de pilas y sus voltajesPresentación tipos de pilas y sus voltajes
Presentación tipos de pilas y sus voltajes
 
COMO SUBIR DIAPOSITIVAS A SLIDESHARE
COMO SUBIR DIAPOSITIVAS A SLIDESHARECOMO SUBIR DIAPOSITIVAS A SLIDESHARE
COMO SUBIR DIAPOSITIVAS A SLIDESHARE
 

Similar a Ud3 inocente alcaide

Openmp
OpenmpOpenmp
Openmp
Unex
 
Manual de configuracion de un cluster en Debian
Manual de configuracion de un cluster en DebianManual de configuracion de un cluster en Debian
Manual de configuracion de un cluster en Debian
lavp28
 
Curso MATLAB
Curso MATLABCurso MATLAB
Curso MATLAB
educadorrr
 
Características Generales de EIGRP
Características Generales de EIGRPCaracterísticas Generales de EIGRP
Características Generales de EIGRP
Hugo Alberto Rivera Diaz
 
Sistema Operativo UNIX
Sistema Operativo UNIXSistema Operativo UNIX
Sistema Operativo UNIX
Nekszer Lopez Espinoza
 
Amoeba 100716124109-phpapp01 (1)
Amoeba 100716124109-phpapp01 (1)Amoeba 100716124109-phpapp01 (1)
Amoeba 100716124109-phpapp01 (1)
Markiups Basantes
 
Descripcion Net-SNMP
Descripcion Net-SNMP Descripcion Net-SNMP
Descripcion Net-SNMP
Feerr Sosa Hernandez
 
Estructura de un algoritmo en pseudocódigo
Estructura de un algoritmo en pseudocódigoEstructura de un algoritmo en pseudocódigo
Estructura de un algoritmo en pseudocódigo
Abrirllave
 
Programación multihebra en java
Programación multihebra en javaProgramación multihebra en java
Programación multihebra en java
Laboratorios ACME
 
Viernes Tecnicos DTrace
Viernes Tecnicos DTraceViernes Tecnicos DTrace
Viernes Tecnicos DTrace
José Juan Mora Pérez
 
Segundo blog arquitectura de hardware tercer corte
Segundo blog arquitectura de hardware tercer corteSegundo blog arquitectura de hardware tercer corte
Segundo blog arquitectura de hardware tercer corte
Sebastian Gonzalez
 
Introduccion al assembler
Introduccion al assemblerIntroduccion al assembler
Introduccion al assembler
Romi Walter Miranda
 
Introduccion al assembler[1]
Introduccion al assembler[1]Introduccion al assembler[1]
Introduccion al assembler[1]
Juan Guillermo Escobar Uribe
 
Estructura de un programa en c
Estructura de un programa en cEstructura de un programa en c
Estructura de un programa en c
Armando Jori
 
Mrtg ubuntu
Mrtg ubuntuMrtg ubuntu
Mrtg ubuntu
Cheli Hedz
 
Amoeba
AmoebaAmoeba
Amoeba
tanialeonela
 
Lenguaje C para Administradores de Red / Script III - Memoria
Lenguaje C para Administradores de Red / Script III - MemoriaLenguaje C para Administradores de Red / Script III - Memoria
Lenguaje C para Administradores de Red / Script III - Memoria
sirfids
 
Xd1
Xd1Xd1
Xd1
Maus Mb
 
Vip genial fantastico 23 pags imprimir clase 64498987-uso-de-la-herramienta-nmap
Vip genial fantastico 23 pags imprimir clase 64498987-uso-de-la-herramienta-nmapVip genial fantastico 23 pags imprimir clase 64498987-uso-de-la-herramienta-nmap
Vip genial fantastico 23 pags imprimir clase 64498987-uso-de-la-herramienta-nmap
xavazquez
 
28 el directorio sysconfig
28  el directorio sysconfig28  el directorio sysconfig
28 el directorio sysconfig
Aprende Viendo
 

Similar a Ud3 inocente alcaide (20)

Openmp
OpenmpOpenmp
Openmp
 
Manual de configuracion de un cluster en Debian
Manual de configuracion de un cluster en DebianManual de configuracion de un cluster en Debian
Manual de configuracion de un cluster en Debian
 
Curso MATLAB
Curso MATLABCurso MATLAB
Curso MATLAB
 
Características Generales de EIGRP
Características Generales de EIGRPCaracterísticas Generales de EIGRP
Características Generales de EIGRP
 
Sistema Operativo UNIX
Sistema Operativo UNIXSistema Operativo UNIX
Sistema Operativo UNIX
 
Amoeba 100716124109-phpapp01 (1)
Amoeba 100716124109-phpapp01 (1)Amoeba 100716124109-phpapp01 (1)
Amoeba 100716124109-phpapp01 (1)
 
Descripcion Net-SNMP
Descripcion Net-SNMP Descripcion Net-SNMP
Descripcion Net-SNMP
 
Estructura de un algoritmo en pseudocódigo
Estructura de un algoritmo en pseudocódigoEstructura de un algoritmo en pseudocódigo
Estructura de un algoritmo en pseudocódigo
 
Programación multihebra en java
Programación multihebra en javaProgramación multihebra en java
Programación multihebra en java
 
Viernes Tecnicos DTrace
Viernes Tecnicos DTraceViernes Tecnicos DTrace
Viernes Tecnicos DTrace
 
Segundo blog arquitectura de hardware tercer corte
Segundo blog arquitectura de hardware tercer corteSegundo blog arquitectura de hardware tercer corte
Segundo blog arquitectura de hardware tercer corte
 
Introduccion al assembler
Introduccion al assemblerIntroduccion al assembler
Introduccion al assembler
 
Introduccion al assembler[1]
Introduccion al assembler[1]Introduccion al assembler[1]
Introduccion al assembler[1]
 
Estructura de un programa en c
Estructura de un programa en cEstructura de un programa en c
Estructura de un programa en c
 
Mrtg ubuntu
Mrtg ubuntuMrtg ubuntu
Mrtg ubuntu
 
Amoeba
AmoebaAmoeba
Amoeba
 
Lenguaje C para Administradores de Red / Script III - Memoria
Lenguaje C para Administradores de Red / Script III - MemoriaLenguaje C para Administradores de Red / Script III - Memoria
Lenguaje C para Administradores de Red / Script III - Memoria
 
Xd1
Xd1Xd1
Xd1
 
Vip genial fantastico 23 pags imprimir clase 64498987-uso-de-la-herramienta-nmap
Vip genial fantastico 23 pags imprimir clase 64498987-uso-de-la-herramienta-nmapVip genial fantastico 23 pags imprimir clase 64498987-uso-de-la-herramienta-nmap
Vip genial fantastico 23 pags imprimir clase 64498987-uso-de-la-herramienta-nmap
 
28 el directorio sysconfig
28  el directorio sysconfig28  el directorio sysconfig
28 el directorio sysconfig
 

Último

GRAFICAS AÑOSsssssssss (2022 - 2023).pdf
GRAFICAS AÑOSsssssssss (2022 - 2023).pdfGRAFICAS AÑOSsssssssss (2022 - 2023).pdf
GRAFICAS AÑOSsssssssss (2022 - 2023).pdf
Jose Calderas
 
Taller de Robots Velocistas2 esquema....
Taller de Robots Velocistas2 esquema....Taller de Robots Velocistas2 esquema....
Taller de Robots Velocistas2 esquema....
lawjose243
 
Focos SSO Fin de Semana del 31 MAYO A al 02 de JUNIO de 2024.pdf
Focos SSO Fin de Semana del 31 MAYO A  al 02 de JUNIO  de 2024.pdfFocos SSO Fin de Semana del 31 MAYO A  al 02 de JUNIO  de 2024.pdf
Focos SSO Fin de Semana del 31 MAYO A al 02 de JUNIO de 2024.pdf
PatoLokooGuevara
 
PRES 3. METROLOGÍA DE GASES Y RADIACIONES IONIZANTES.pptx
PRES 3. METROLOGÍA DE GASES Y RADIACIONES IONIZANTES.pptxPRES 3. METROLOGÍA DE GASES Y RADIACIONES IONIZANTES.pptx
PRES 3. METROLOGÍA DE GASES Y RADIACIONES IONIZANTES.pptx
brandonsinael
 
1. Introduccion a las excavaciones subterraneas (1).pdf
1. Introduccion a las excavaciones subterraneas (1).pdf1. Introduccion a las excavaciones subterraneas (1).pdf
1. Introduccion a las excavaciones subterraneas (1).pdf
raulnilton2018
 
Infografía operaciones básicas construcción .pdf
Infografía operaciones básicas construcción .pdfInfografía operaciones básicas construcción .pdf
Infografía operaciones básicas construcción .pdf
Carlos Pulido
 
Calculo-de-Camaras-Frigorificas.pdf para trabajos
Calculo-de-Camaras-Frigorificas.pdf para trabajosCalculo-de-Camaras-Frigorificas.pdf para trabajos
Calculo-de-Camaras-Frigorificas.pdf para trabajos
JuanCarlos695207
 
INGLES_LISTA_DE_VOCABULARIO una lista completa
INGLES_LISTA_DE_VOCABULARIO una lista completaINGLES_LISTA_DE_VOCABULARIO una lista completa
INGLES_LISTA_DE_VOCABULARIO una lista completa
JaimmsArthur
 
muros de contencion, diseño y generalidades
muros de contencion, diseño y generalidadesmuros de contencion, diseño y generalidades
muros de contencion, diseño y generalidades
AlejandroArturoGutie1
 
Cuadro sinoptico de clasificacion de las industrias.pdf
Cuadro sinoptico de clasificacion de las industrias.pdfCuadro sinoptico de clasificacion de las industrias.pdf
Cuadro sinoptico de clasificacion de las industrias.pdf
LizetGuadalupeHernan
 
S09 PBM-HEMORRAGIAS 2021-I Grabada 1.pptx
S09 PBM-HEMORRAGIAS 2021-I Grabada 1.pptxS09 PBM-HEMORRAGIAS 2021-I Grabada 1.pptx
S09 PBM-HEMORRAGIAS 2021-I Grabada 1.pptx
yamilbailonw
 
Medicion-Del-Agua-de-Riego-Aforo 2023.pptx
Medicion-Del-Agua-de-Riego-Aforo 2023.pptxMedicion-Del-Agua-de-Riego-Aforo 2023.pptx
Medicion-Del-Agua-de-Riego-Aforo 2023.pptx
MONICADELROCIOMUNZON1
 
AE 34 Serie de sobrecargas aisladas_240429_172040.pdf
AE  34 Serie de sobrecargas aisladas_240429_172040.pdfAE  34 Serie de sobrecargas aisladas_240429_172040.pdf
AE 34 Serie de sobrecargas aisladas_240429_172040.pdf
sebastianpech108
 
Dosificacion de hormigon NCH 170 actualizada
Dosificacion de hormigon NCH 170 actualizadaDosificacion de hormigon NCH 170 actualizada
Dosificacion de hormigon NCH 170 actualizada
pipex55
 
DIAPOSITIVA DE LA NORMA ISO 22000 EXPOSICI�N.pptx
DIAPOSITIVA DE LA NORMA ISO 22000 EXPOSICI�N.pptxDIAPOSITIVA DE LA NORMA ISO 22000 EXPOSICI�N.pptx
DIAPOSITIVA DE LA NORMA ISO 22000 EXPOSICI�N.pptx
KeylaArlethTorresOrt
 
exposicion sobre los tipos de cortes de rolas para la produccion de chapas
exposicion sobre los tipos de cortes de rolas para la produccion de chapasexposicion sobre los tipos de cortes de rolas para la produccion de chapas
exposicion sobre los tipos de cortes de rolas para la produccion de chapas
raul958375
 
NOM-001-SEDE-2012.pdf instalación eléctrica
NOM-001-SEDE-2012.pdf instalación eléctricaNOM-001-SEDE-2012.pdf instalación eléctrica
NOM-001-SEDE-2012.pdf instalación eléctrica
gabyp22
 
Sesión 03 universidad cesar vallejo 2024
Sesión 03 universidad cesar vallejo 2024Sesión 03 universidad cesar vallejo 2024
Sesión 03 universidad cesar vallejo 2024
FantasticVideo1
 
Infografia de operaciones basicas de la construccion.pdf
Infografia de operaciones basicas de la construccion.pdfInfografia de operaciones basicas de la construccion.pdf
Infografia de operaciones basicas de la construccion.pdf
DanielMelndez19
 
Material magnetismo.pdf material del electromagnetismo con fórmulas
Material magnetismo.pdf material del electromagnetismo con fórmulasMaterial magnetismo.pdf material del electromagnetismo con fórmulas
Material magnetismo.pdf material del electromagnetismo con fórmulas
michiotes33
 

Último (20)

GRAFICAS AÑOSsssssssss (2022 - 2023).pdf
GRAFICAS AÑOSsssssssss (2022 - 2023).pdfGRAFICAS AÑOSsssssssss (2022 - 2023).pdf
GRAFICAS AÑOSsssssssss (2022 - 2023).pdf
 
Taller de Robots Velocistas2 esquema....
Taller de Robots Velocistas2 esquema....Taller de Robots Velocistas2 esquema....
Taller de Robots Velocistas2 esquema....
 
Focos SSO Fin de Semana del 31 MAYO A al 02 de JUNIO de 2024.pdf
Focos SSO Fin de Semana del 31 MAYO A  al 02 de JUNIO  de 2024.pdfFocos SSO Fin de Semana del 31 MAYO A  al 02 de JUNIO  de 2024.pdf
Focos SSO Fin de Semana del 31 MAYO A al 02 de JUNIO de 2024.pdf
 
PRES 3. METROLOGÍA DE GASES Y RADIACIONES IONIZANTES.pptx
PRES 3. METROLOGÍA DE GASES Y RADIACIONES IONIZANTES.pptxPRES 3. METROLOGÍA DE GASES Y RADIACIONES IONIZANTES.pptx
PRES 3. METROLOGÍA DE GASES Y RADIACIONES IONIZANTES.pptx
 
1. Introduccion a las excavaciones subterraneas (1).pdf
1. Introduccion a las excavaciones subterraneas (1).pdf1. Introduccion a las excavaciones subterraneas (1).pdf
1. Introduccion a las excavaciones subterraneas (1).pdf
 
Infografía operaciones básicas construcción .pdf
Infografía operaciones básicas construcción .pdfInfografía operaciones básicas construcción .pdf
Infografía operaciones básicas construcción .pdf
 
Calculo-de-Camaras-Frigorificas.pdf para trabajos
Calculo-de-Camaras-Frigorificas.pdf para trabajosCalculo-de-Camaras-Frigorificas.pdf para trabajos
Calculo-de-Camaras-Frigorificas.pdf para trabajos
 
INGLES_LISTA_DE_VOCABULARIO una lista completa
INGLES_LISTA_DE_VOCABULARIO una lista completaINGLES_LISTA_DE_VOCABULARIO una lista completa
INGLES_LISTA_DE_VOCABULARIO una lista completa
 
muros de contencion, diseño y generalidades
muros de contencion, diseño y generalidadesmuros de contencion, diseño y generalidades
muros de contencion, diseño y generalidades
 
Cuadro sinoptico de clasificacion de las industrias.pdf
Cuadro sinoptico de clasificacion de las industrias.pdfCuadro sinoptico de clasificacion de las industrias.pdf
Cuadro sinoptico de clasificacion de las industrias.pdf
 
S09 PBM-HEMORRAGIAS 2021-I Grabada 1.pptx
S09 PBM-HEMORRAGIAS 2021-I Grabada 1.pptxS09 PBM-HEMORRAGIAS 2021-I Grabada 1.pptx
S09 PBM-HEMORRAGIAS 2021-I Grabada 1.pptx
 
Medicion-Del-Agua-de-Riego-Aforo 2023.pptx
Medicion-Del-Agua-de-Riego-Aforo 2023.pptxMedicion-Del-Agua-de-Riego-Aforo 2023.pptx
Medicion-Del-Agua-de-Riego-Aforo 2023.pptx
 
AE 34 Serie de sobrecargas aisladas_240429_172040.pdf
AE  34 Serie de sobrecargas aisladas_240429_172040.pdfAE  34 Serie de sobrecargas aisladas_240429_172040.pdf
AE 34 Serie de sobrecargas aisladas_240429_172040.pdf
 
Dosificacion de hormigon NCH 170 actualizada
Dosificacion de hormigon NCH 170 actualizadaDosificacion de hormigon NCH 170 actualizada
Dosificacion de hormigon NCH 170 actualizada
 
DIAPOSITIVA DE LA NORMA ISO 22000 EXPOSICI�N.pptx
DIAPOSITIVA DE LA NORMA ISO 22000 EXPOSICI�N.pptxDIAPOSITIVA DE LA NORMA ISO 22000 EXPOSICI�N.pptx
DIAPOSITIVA DE LA NORMA ISO 22000 EXPOSICI�N.pptx
 
exposicion sobre los tipos de cortes de rolas para la produccion de chapas
exposicion sobre los tipos de cortes de rolas para la produccion de chapasexposicion sobre los tipos de cortes de rolas para la produccion de chapas
exposicion sobre los tipos de cortes de rolas para la produccion de chapas
 
NOM-001-SEDE-2012.pdf instalación eléctrica
NOM-001-SEDE-2012.pdf instalación eléctricaNOM-001-SEDE-2012.pdf instalación eléctrica
NOM-001-SEDE-2012.pdf instalación eléctrica
 
Sesión 03 universidad cesar vallejo 2024
Sesión 03 universidad cesar vallejo 2024Sesión 03 universidad cesar vallejo 2024
Sesión 03 universidad cesar vallejo 2024
 
Infografia de operaciones basicas de la construccion.pdf
Infografia de operaciones basicas de la construccion.pdfInfografia de operaciones basicas de la construccion.pdf
Infografia de operaciones basicas de la construccion.pdf
 
Material magnetismo.pdf material del electromagnetismo con fórmulas
Material magnetismo.pdf material del electromagnetismo con fórmulasMaterial magnetismo.pdf material del electromagnetismo con fórmulas
Material magnetismo.pdf material del electromagnetismo con fórmulas
 

Ud3 inocente alcaide

  • 1. UD3 - OpenMP Programación de Memoria Compartida ARQUITECTURA DE COMPUTADORES
  • 2. 1. Qué es OpenMP. Compiladores y lenguajes que lo admiten OpenMP es una interfaz de programación de aplicaciones (API) para la programación paralela de memoria compartida multiplataforma. “MP” son las siglas de multiprocesamiento. OpenMP está diseñado para sistemas en las que cada hilo o proceso pueden, potencialmente, tener acceso a toda la memoria disponible. Cuando se programa con OpenMP, consideramos nuestro sistema como una colección de núcleos o CPUs (que procesan los hilos), y en que todos tienen acceso a la memoria principal.
  • 3. 1. Qué es OpenMP. Compiladores y lenguajes que lo admiten
  • 4. 2. Como configurar un entorno de desarrollo en OpenMP y C++ El ambiente de desarrollo Code::Blocks Code::Blocks es un entorno de desarrollo integrado libre y multiplataforma para el desarrollo de programas en lenguaje C y C++ disponible para Microsoft Windows, Apple OSX y Linux. Está basado en la plataforma de interfaces gr ́aficas WxWidgets, por lo que se ha portado a diversos sistemas operativos, y está licenciado bajo la licencia pública general de GNU. Sus distintas versiones junto a la documentaci ́on correspondiente est ́an disponibles en http://www.codeblocks.org. Code::Blocks puede enlazarse a una variedad de compiladores, como el Microsoft Visual Studio Toolkit, el compilador C++ de Intel y, en particular, el compilador MinGW. Este ultimo es una implementación de los compiladoresGCC para la plataforma Win32, lo que permite hacer uso de sus conocidas capacidades en ambientes Windows.
  • 5. 2. Como configurar un entorno de desarrollo en OpenMP y C++ Instalación del compilador Code::Blocks La versión 12.11 del ambiente de desarrollo Code::Blocks est ́a disponible para Microsoft Windows en http://www.codeblocks.org/downloads/26. En esta p ́agina hay dos versiones: codeblocks-12.11-setup.exe y codeblocks- 12.11mingw-setup.exe. Es necesario bajar esta ́ultima versióon, pues solo ésta contiene la versión 4.7.1 de 32 bits del compilador GCC y del depurador GDB de Twilight Dragon Media (MinGW TDM-GCC). Una vez obtenido el archivo de instalación, éste se ejecuta, lo que instala el compilador en la ruta de acceso por omisión, c:ProgramilesCodeBlocks. Es posible instalar el compilador en otro directorio, si así se quisiera.
  • 6. 2. Como configurar un entorno de desarrollo en OpenMP y C++ Instalación de la biblioteca OpenMP Para utilizar la biblioteca OpenMP con Code::Blocks, es necesario además instalar el paquete OpenMP para TDM-GCC, gcc-4.7.1-tdm-1-openmp.zip, el cual puede obtenerse de http://tdm-gcc.tdragon.net/download. Este paquete debe instalarse en el directorio raíz de instalación del compilador MinGW, c:Program FilesCodeBlocksMinGW
  • 7. 2. Como configurar un entorno de desarrollo en OpenMP y C++ Definición de las opciones del proyecto Una vez creado un proyecto en el ambiente de desarrollo Code::Blocks, se deben definir las opciones del proyecto de manera de utilizar la biblioteca OpenMP. Para ello, acceda a la opción Build Options... del menú Project . Allí, en la pestaña Compiler Settings, agregue la opción -fopenmp bajo la pestaña Other options. Luego, en la pestaña Linker Settings, en la ventana other linker options agregue también la opción -fopenmp
  • 8. 2. Como configurar un entorno de desarrollo en OpenMP y C++ Verificando la instalación Finalmente, verifique su instalación compilando y ejecutando exitosamente el siguiente programa en OpenMP. Su salida debe indicar la versión de OpenMP en uso, el número de procesadores disponibles y muestra además cómo crear hebras usando el pragma parallel.
  • 9. 2. Como configurar un entorno de desarrollo en OpenMP y C++ Verificando la instalación #include <omp.h> #include <stdio.h> #include <stdlib.h> int main() { int n_hebras, h_id, n_procs; printf("Esto es OpenMP, version %dn", _OPENMP); // Numero de procesadores n_procs = omp_get_num_procs();
  • 10. 2. Como configurar un entorno de desarrollo en OpenMP y C++ Verificando la instalación printf("Numero de procesadores: %dn", n_procs); // Creacion de hebras omp_set_num_threads(n_procs); #pragma omp parallel printf("Soy la hebra %d de %dn", omp_get_thread_num(), omp_get_num_threads()); return 0; }
  • 11. 3. Descripción general de las directivas de OpenMP a partir de un código de ejemplo OpenMP comienza a través de directivas, con funciones propias (que pueden ser condicionalmente compiladas) y variables de entorno, que pueden modificar el comportamiento en tiempo de ejecución. 1. Directiva de formato. Cada directiva inicia con #pragma omp ... #pragma omp directive-name[clause[,] clause]... 2. Constructor paralelo. Las siguientes directivas definen una región paralela, la cual es una parte del programa que puede ser ejecutada por múltiples threads en paralelo. Este es el constructor fundamental que inicia la ejecución paralela. #pragma omp parallel [clause[,] clause]... { bloque de código }
  • 12. 3. Descripción general de las directivas de OpenMP a partir de un código de ejemplo La cláusula puede ser: • if(expresión escalar) • private(lista de variables) • firstprivate(lista de variables) • default(shared | none) • shared(lista de variables) • copyin(lista de variables) • reduction(operador:lista de variables) • num_threads(expresión entera)
  • 13. 3. Descripción general de las directivas de OpenMP a partir de un código de ejemplo Entre las cláusulas que se pueden utilizar, las más usadas son: • private(lista de variables) En esta la lista de variables puede ser separada por "," y para cada una de ellas se genera una copia en cada thread, esta copia no tiene relación con la original y no es inicializada a menos que se utilice firstprivate. • shared(lista de variables) En esta las variables de la lista son comunes a todos los threads y cada uno de ellos puede modificarla afectándola en forma global. • threadprivate(lista de variables) Hace que la lista sea privada a cada thread pero globales dentro de un thread. • reduction(operador:lista de variables) Realiza una operación de reducción sobre las variables que aparecen en la lista utilizando el operador/intrínseco especificado. El operador puede ser: +, *, -, &(and), |(or), ^(eqv), &&(neqv). El intrínseco puede ser: || (max), (min), (and), (or).
  • 14. 3. Descripción general de las directivas de OpenMP a partir de un código de ejemplo Al final de una región paralela hay una sincronización implícita. Solo el thread master continúa la ejecución. Cuando un thread encuentra un constructor paralelo, un grupo de threads es creado si uno de los siguientes casos es verdadero: • No está la cláusula if presente. • Si al evaluar la expresión de if tiene un valor diferente de cero. • Este thread se convierte en el thread maestro de un grupo, con el número de thread 0, y todos los threads, incluyendo el maestro ejecutan la región paralela. Si el valor de la expresión if se hace cero la región es serializada nuevamente. Para determinar el número de threads necesarios, las siguientes reglas deben ser consideradas en orden. La primera regla que cumple la condición es aplicada:
  • 15. 3. Descripción general de las directivas de OpenMP a partir de un código de ejemplo 1. Si la cláusula num_threads está presente, entonces la expresión entera en la cláusula es el número de threads requerido. 2. Si la función omp_set_num_threads de la librería es llamada, entonces el valor del argumento es el número de threads requeridos. 3. Si la variable de entorno OMP_NUM_THREADS es definida entonces el valor de esta variable de entorno es el número de threads requeridos. 4. Si ninguno de los métodos anteriormente mencionados es usado, entonces el número de threads requeridos en el definido por defecto.
  • 16. 3. Descripción general de las directivas de OpenMP a partir de un código de ejemplo 3. Constructor for La directiva for identifica un constructor de trabajo compartido el cual especifica que las iteraciones del ciclo asociado deben ser ejecutadas en paralelo. #pragma omp for[clause[,] clause]... { ciclo for }
  • 17. 3. Descripción general de las directivas de OpenMP a partir de un código de ejemplo Las cláusulas que se pueden utilizar son las siguientes: • private(lista de variables) • firstprivate(lista de variables) • lastprivate(lista de variables) • reduction(operador:lista de variables) • ordered • schedule(categoría, tamaño_tramo) • nowait La cláusula lastprivate hace que la lista se comporte como si hubiese sido declarada privada, pero el último thread que ejecuta la sentencia de distribución de trabajo, actualiza con su valor privado (de la lista) el que hubiera antes del constructor.
  • 18. 3. Descripción general de las directivas de OpenMP a partir de un código de ejemplo La cláusula ordered es una instancia donde una parte de un ciclo puede ser ejecutada en orden serial, cuando el resto del ciclo se ejecuta en paralelo. La cláusula schedule especifica cuántas iteraciones del for son divididas entre el número de threads, el valor de tamaño_tramo es especificado en el for, es invariante y es un número positivo. Las categorías utilizadas en esta cláusula puede ser una de las siguientes: • static: cuando ésta es usada, el número de iteraciones es dividido en tramos de tamaño "tamaño_tramo" y es asignado en forma de "Round Robin". • dynamic: cuando se usa esta categoría, la cantidad de iteraciones es dividida en una serie de tramos, cada una contiene "tamaño_tramo" iteraciones. Cada thread ejecuta su tramo y espera por más trabajo asignado. • guided: para esta categoría las iteraciones son asignadas a los threads en tramos con tamaño decreciente. Cuando un thread finaliza el tramo de iteraciones asignado, a este se le asigna otro tramo dinámicamente hasta que se termine la repartición. • runtime: cuando se usa runtime, las categorías de schedule son obtenidas en tiempo de ejecución con la configuración dada en la variable de entorno OMP_SCHEDULE.
  • 19. 3. Descripción general de las directivas de OpenMP a partir de un código de ejemplo Finalmente la cláusula nowait evita que haya una sincronización entre threads al final de la directiva de distribución de trabajo. Ejemplo #include <omp.h> #include <stdio.h> #include <stdlib.h>
  • 20. 3. Descripción general de las directivas de OpenMP a partir de un código de ejemplo int main(int argc, char **argv) { int pid; #pragma omp parallel private( pid ) { pid = omp_get_thread_num(); // entrega el nro de thread printf("Soy el thread=%dn",pid); } return 0; }
  • 21. 3. Descripción general de las directivas de OpenMP a partir de un código de ejemplo 1. Indicar la cantidad de threads, a través de variables de entorno: setenv OMP_NUM_THREADS 4 2. Compilar la aplicación en un procesador intel icpc -o salida.exe prueba_1.cc –openmp 3. Ejecución de la aplicación. >./salida.exe antes del pragma ... Soy el thread=0 Soy el thread=3 Soy el thread=2 Soy el thread=1