Está en la página 1de 11

Introduccin al OpenMP

Trabajo final del curso Introduccin a Grid Computing


XI Escuela Internacional de Informtica, del 1 al 5 de Octubre de 2007

Gabriela A. Rodrguez
DNI: 32944500

Introduccin al OpenMP

ABSTRACT
OpenMP ha sido desarrollado especficamente para procesamiento de
memoria compartida en paralelo. De hecho se ha vuelto el estndar de
paralelizacin en este tipo de arquitecturas.
En este trabajo se describe el uso de OpenMP para explotar el
paralelismo en arquitecturas de memoria compartida. Tanto en el uso de
directivas, que se insertan directamente en el cdigo serial para convertirlo en
cdigo paralelo, como en el uso de funciones de la biblioteca de OpenMP para
los mismos propsitos.

Rodrguez Gabriela
DNI: 32944500

-2-

Introduccin al OpenMP

INTRODUCCIN
En computacin de alto rendimiento, hay herramientas que ayudan a la
programacin con multi-hilos (multi-threads) en paralelo, procesamiento en
memoria distribuida y plataformas de multiprocesadores de memoria
compartida.
En plataformas de multiprocesadores de memoria distribuida., cada procesador
tiene su propia memoria cuyo contenido no est fcilmente disponible a otros
procesadores. El compartimiento de informacin entre procesadores es
usualmente facilitado por el .paso de mensajes. (message passing) usando los
estndares de libreras de paso de mensajes como lo es MPI.
En multiprocesadores de memoria compartida, la memoria entre procesadores
se puede compartir. Bibliotecas de paso de mensajes como MPI puede ser, y
son usadas para el procesamiento de tareas en paralelo. Sin embargo, un
programa basado en directivas de .aplicacin de programas de interfase de
API, (Aplication Program Interface) como OpenMP ha sido desarrollado
especficamente para procesamiento de memoria compartida en paralelo.
OpenMP tiene amplio apoyo de los mejores fabricantes de Hardware y
Software de computadores. En una forma similar al logro de MPI como el
estndar para procesamiento de memoria distribuida de paralela, OpenMP ha
surgido como el estndar para computar de memoria compartida en paralelo.
Ambos de estos estndares se pueden usar en unin con Fortran 77, el Fortran
90, C o C + + para aplicaciones de computacin en paralelo. Vale la pena notar
que para un grupo de un solo procesador y computadores de
multiprocesadores de memoria compartida, es posible usar ambos estndares
en el mismo programa de aplicacin para realizar un aumento en la potencia
del procesamiento. MPI se usa para conectar todas mquinas dentro del grupo
para formar una mquina virtual, mientras OpenMP se usa para explotar el
paralelismo de la memoria compartida en mquinas individuales de memoria
compartida dentro del grupo.

Rodrguez Gabriela
DNI: 32944500

-3-

Introduccin al OpenMP

DESARROLLO
Qu es OpenMP?
OpenMP es una API que nos permite aadir concurrencia a las aplicaciones
mediante paralelismo con memoria compartida. Se basa en la creacin de hilos
de ejecucin paralelos compartiendo las variables del proceso padre que los
crea.
OpenMP comprende de tres componentes complementarios:
- Un conjunto de directivas de compilador usado por el programador para
comunicarse con el compilador en paralelismo.
#pragma omp <directiva> {<clusula>}* <\n>
- Una librera de funciones en tiempo de ejecucin que habilita la colocacin
e interroga sobre los parmetros paralelos que se van a usar, tal como nmero
de los hilos que van a participar y el nmero de cada hilo.
- Un nmero limitado de las variables de entorno que pueden ser usadas para
definir en tiempo de ejecucin parmetros del sistema en paralelo tales como el
nmero de hilos.

Modelo de paralelizacin

MPI vs. OpenMP


MPI puro
Ventajas:
- Portable a mquinas con
memoria distribuida o
compartida.
- Escalea ms alla de un
nodo
- No data placement problem
Desventajas:
- Difcil de desarrollar y
corregir
- High latency, low bandwidth
- Communicacin explcita
- Difficult load balancing
Rodrguez Gabriela
DNI: 32944500

OpenMP puro
Ventajas:
- Fcil de implementar
paralelismo
- Low latency, high bandwidth
- Communicacin implcita
- Dynamic load balancing
Desventajas:
- Slo en mquinas con
memoria compartida
- Escalea slo en un nodo
- Possible data placement
problem
- No specific thread order
-4-

Introduccin al OpenMP

Uso de hilos de ejecucin (threads)


Un proceso puede consistir de mltiples threads, cada uno con su propio flujo
de control pero compartiendo el mismo espacio de direcciones.

Desarrollo de tareas en serial y regiones paralelas

Un programa comienza con un solo hilo (Master) que puede iniciar otros hilos
(constituyendo un equipo de hilos) en una seccin paralela que son recogidos
al final (modelo fork/join).
Cmo interactan los threads?
Al ser OpenMP es un modelo de memoria compartida, los threads se
comunican utilizando variables compartidas.
El uso inadecuado de variables compartidas origina carreras crticas, es por
esto que para controlar las carreras crticas, se requiere el uso de
sincronizacin para protegerse de los conflictos de datos.
La sincronizacin es costosa, entonces es til modificar cmo se almacenan los
datos para minimizar la necesidad de sincronizacin.

Aprovechamiento del Paralelismo


En OpenMP, estas son las dos principales formas de aprovechamiento para
asignacin de trabajo en hilos. Estos son:
Niveles de Loop Paralelos
Regiones Paralelas
En el primer aprovechamiento, loops individuales son paralelizados con cada
uno de los hilos empezando una nica asignacin para el ndice del loop. A
esto se le llama paralelismo de fina granulacin.
En el aprovechamiento de regiones paralelas, cualquier seccin del cdigo
puede ser paralelizado no precisamente por loops. Esto es algunas veces
llamado paralelismo de gruesa granulacin. El trabajo es distribuido
explcitamente en cada uno de los hilos usando el nico identificador para cada
hilo.
Rodrguez Gabriela
DNI: 32944500

Introduccin al OpenMP
Comparacin entre los dos tipos de aprovechamiento de paralelismo en
OpenMP:

Directivas en OpenMP
OpenMP entra en un programa nuevo o existente a travs de directivas, con
funciones propias (que pueden ser condicionalmente compiladas) y variables
de entorno, que pueden modificar el comportamiento en tiempo de ejecucin.

Directiva de Formato
Cada directiva inicia con #pragma omp ...
#pragma omp directive-name[clause[,] clause]...

Constructor Paralelo
Las siguientes directivas definen una regin paralela, la cual es una parte del
programa que puede ser ejecutada por mltiples hilos en paralelo. Este es el
constructor fundamental que inicia la ejecucin paralela.
#pragma omp parallel [clause[,] clause]...
{
bloque de cdigo
}

Rodrguez Gabriela
DNI: 32944500

Introduccin al OpenMP
Entre las clusulas que se pueden utilizar, las ms 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 hilo, esta copia no
tiene relacin 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 hilos y cada uno de
ellos puede modificarla afectndola en forma global.
threadprivate(lista de variables)
Hace que la lista sea privada a cada hilo pero globales dentro de un hilo.
copyin(lista de variables) hace que al comienzo de una regin paralela los
valores de la lista del hilo maestro se copien a las variables privadas del resto
de los hilos.
reduction(operador:lista de variables)
Realiza una operacin de reduccin sobre las variables que aparecen en la
lista utilizando el operador/intrnseco especificado.
El operador puede ser: +, *, ., &(and), |(or), ^(eqv), &&(neqv).
El intrnseco puede ser: || (max), (min), (iand), (ior).
Al final de una regin paralela hay una sincronizacin implcita. Solo el hilo
master continua la ejecucin.
Cuando un hilo encuentra un constructor paralelo, un grupo de hilos es creado
si uno de los siguientes casos es verdadero:
- No est la clusula if presente.
- Si al evaluar la expresin de if tiene un valor diferente de cero.
Este hilo se convierte en el hilo maestro de un grupo, con el nmero de hilo 0, y
todos los hilos, incluyendo el maestro, ejecutan la regin paralela. Si el valor de
la expresin if se hace cero la regin es serializada nuevamente.

Constructor de Trabajo Compartido


OpenMP define los siguientes constructores de trabajo compartido:
- for directive
- sections directive
- single directive

Constructor for
La directiva for identifica un constructor de trabajo compartido el cual especifica
que las iteraciones del loop asociado deben ser ejecutadas en paralelo.
#pragma omp for[clause[,] clause]...
{ loop del for
}

Rodrguez Gabriela
DNI: 32944500

Introduccin al OpenMP
Constructor Sections
En la directiva sections cada seccin es ejecutada una vez por un hilo en el
grupo. La sintaxis de la directiva sections es la siguiente:
#pragma omp sections[clause[,] clause]...
{
#pragma omp section
{bloque de cdigo }
#pragma omp section
{bloque de cdigo }
}

Constructor Single
Esta directiva se utiliza para referirse a que en cada tramo del cdigo va a
ejecutarse por un solo hilo. La sintaxis de la directiva single es la siguiente:
#pragma omp single[clause[,] clause]...
{
bloque de cdigo
}

Sincronizacin
Constructores de sincronizacin:
- Directiva master
- Directiva critical
- Directiva barrier
- Directiva atomic
- Directiva flush
- Directiva ordered

Constructor master
Este constructor especifica que el bloque de cdigo es ejecutado por el hilo
maestro, los dems
saltan el bloque y continan la ejecucin.
#pragma omp master
{
bloque de cdigo
}

Constructor critical
Este constructor identifica que el bloque de cdigo es accedido por un solo hilo
a la vez. Cada hilo espera el comienzo de bloque hasta que ningn otro hilo lo
est ejecutando.

Rodrguez Gabriela
DNI: 32944500

Introduccin al OpenMP
#pragma omp critical [(nombre)]
{ bloque de cdigo
}
En la opcin nombre puede ser usada para identificar la regin crtica.

Constructor barrier
En barrier cada hilo espera hasta que cada uno de los dems hilos termine.
...
#pragma omp barrier

Constructor atomic
Este constructor es un caso especfico del constructor critical que puede ser
usada para ciertas declaraciones simples Esta se utiliza solo para la
actualizacin de una localizacin en memoria.
#pragma omp atomic
declaracin de expresin
La declaracin de expresin puede ser una de las siguientes formas:
x++
++x
x
x

Constructor flush
La directiva flush puede ser usada para identificar un punto de sincronizacin
en el programa, se habla de un punto de sincronizacin como un punto en la
ejecucin del programa donde la ejecucin de hilos necesita hacer una
consistente vista de memoria.
Esto significa que una evaluacin previa de expresiones a los cuales estos
objetos se refieren son completados y subsecuentemente evaluados sin tener
que ser iniciados.
...
#pragma omp flush(lista de variables)

Principales funciones
omp_set_num_threads: Esta funcin determina por defecto el nmero de
hilos para ser usado en la subsiguiente regin en paralela que no tiene la
clusula num_threads especificada.
omp_get_num_threads: Esta funcin retorna el nmero hilos actuales en el
grupo que ejecuta una regin en paralelo la cual es llamada.
omp_get_max_threads: devuelve el mximo valor que puede ser retornado
por el
llamado a la funcin omp_get_num_threads.

Rodrguez Gabriela
DNI: 32944500

Introduccin al OpenMP
omp_get_threads_num: retorna el nmero del hilo con el cual este grupo de
hilos estaejecutando la funcin. El nmero de hilo est entre cero (0) y
omp_set_num_threads() - 1 (incluido).
El nmero del hilo maestro es siempre el cero (0).
omp_get_num_procs: devuelve el mximo nmero de procesadores que
puede asignado para el programa.
omp_in_parallel: devuelve un valor diferente de cero si sta es llamada desde
una extensin dinmica de una regin paralela es ejecutada en paralelo, en
otro caso devuelve un valor de cero.
omp_get_dynamic: Esta funcin devuelve un valor diferente de cero si el
ajuste de hilos dinmico es activo, en caso contrario devuelve cero.
omp_set_dynamic: activa o desactiva el ajuste dinmico del nmero de hilos
disponible para la ejecucin de una regin en paralelo.
omp_set_nested: activa o desactiva paralelismo anidado.
omp_get_nested: devuelve un valor diferente de cero si el paralelismo anidado
esta activo y devuelve cero si esta inactivo.

Variables de Entorno
A continuacin se presentan las variables de entorno relacionadas en OpenMP,
las cuales controlan la ejecucin del cdigo en paralelo.
OMP_SCHEDULE: Especifica como se va a distribuir el trabajo en cada uno de
los hilos, esta funcin solo se utiliza para los constructores for o parallel for y
este puede ser esttico o dinmico.
OMP_NUM_THREADS: Asigna la cantidad de hilos que se van a utilizar
durante la ejecucin. Si se hace un llamado a funcin: omp_set_num_thread el
nmero de hilos va a cambiar.
OMP_DYNAMIC: La variable de entorno OMP_DYNAMIC activa o desactiva
un ajuste dinmico del nmero de hilos disponibles para una ejecucin .for. o
de una regin paralela.
OMP_NESTED: Esta funcin activa o desactiva el paralelismo anidado excepto
que el paralelismo anidado est activo o inactivo llamado por la funcin
omp_set_nested.

Rodrguez Gabriela
DNI: 32944500

10

Introduccin al OpenMP

CONCLUSIN
Mediante este trabajo, pude interiorizarme en el uso de OpenMP para aadir
concurrencia a programas mediante paralelismo con memoria compartida.
La eleccin del tema tuvo que ver con que fue uno de los puntos tratados en el
curso que ms me interes, a pesar de no haber sido el que ms entend.
Es por esto, que me sirvi para clarificar los conceptos aprendidos en el curso
de Computacin GRID y para aprender algo ms sobre el tema. Sin embargo,
queda muchsimo para profundizar al respecto, por ello el presente trabajo
reviste el carcter de introductorio.
De todo lo dicho y lo desarrollado en el presente trabajo puedo concluir en que
la paralelizacin usando OpenMP en mquinas con memoria compartida, es
SIMPLE, no necesita mayores modificaciones al programa, y en general da
buenos resultados para modestos nmeros de procesadores.

REFERENCIAS
-

www.openmp.org

An Introduction Into OpenMP. Ruud van der Pas, IWOMP 2005,


University of Oregon, June 1-4, 2005

www.compunity.org

Programacin de Arquitecturas paralelas, Introduccin a OpenMP y


MPI. Jos Miguel Mantas Ruiz, Depto. de Lenguajes y Sistemas
Informticos, Universidad de Granada, Marzo 2007

OpenMP. Oscar Rafael Garca Regis Enrique Cruz Martnez

Rodrguez Gabriela
DNI: 32944500

11

También podría gustarte