Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Paralela en
Fortran95
usando OpenMP
Miguel Hermanns
Introducción y
Programación Paralela en Fortran95 motivación
Regiones paralelas
usando OpenMP Conceptos y
terminologı́a
(Parte I) Cláusulas de datos
Directivas de
distribución de
trabajo
Miguel Hermanns
Directivas
combinadas
Universidad Politécnica de Madrid, España
Recomendaciones
Resumen
26 de abril de 2007
Programación
Estructura de la clase Paralela en
Fortran95
usando OpenMP
Miguel Hermanns
Regiones paralelas
2 Caracterı́sticas fundamentales de OpenMP
Conceptos y
terminologı́a
3 Regiones paralelas y regiones seriales Cláusulas de datos
Directivas de
distribución de
4 Conceptos generales y terminologı́a habitual trabajo
Directivas
combinadas
5 Variables compartidas y variables privadas Recomendaciones
Resumen
6 Distribución de la carga computacional
7 Recomendaciones personales
Programación
¿Qué es OpenMP? Paralela en
Fortran95
usando OpenMP
Miguel Hermanns
El OpenMP Application Program Interface (API) es:
Introducción y
motivación
Conjunto de directivas de compilación, librerı́as y
Regiones paralelas
variables de entorno que permiten expresar el paralelismo
Conceptos y
de tareas en programas escritos en C, C++ y Fortran terminologı́a
Cláusulas de datos
Directivas de
distribución de
trabajo
Directivas
combinadas
Recomendaciones
Resumen
Toda la información está disponible en la página web:
www.openmp.org
Programación
¿Quién define OpenMP? Paralela en
Fortran95
usando OpenMP
El estándar es definido y revisado por el comité Miguel Hermanns
Regiones paralelas
compuesto actualmente por: (1/2) Conceptos y
terminologı́a
Directivas de
distribución de
cOMPunity (Comunidad de usuarios de OpenMP) trabajo
Directivas
Edinburgh Parallel Computing Centre (EPCC) combinadas
Recomendaciones
Laboratorio NASA Ames Resumen
Fujitsu
Hewlett Packard
Programación
¿Quién define OpenMP? Paralela en
Fortran95
usando OpenMP
El estándar es definido y revisado por el comité Miguel Hermanns
Regiones paralelas
compuesto actualmente por: (2/2) Conceptos y
terminologı́a
Directivas de
distribución de
Intel Corporation trabajo
Directivas
KAI Software Lab (KSL) combinadas
Recomendaciones
NEC Corporation Resumen
Sun Microsystems
Conceptos y
terminologı́a
El estándar ANSI X3H5 fracasó por falta de apoyo
Cláusulas de datos
Directivas
El estándar OpenMP se introdujo para resolver esto: combinadas
Recomendaciones
En 1997 se publicó la versión 1.0
Resumen
Cláusulas de datos
Tipos de directivas en OpenMP: Directivas de
distribución de
Directivas de distribución de trabajo trabajo
Directivas
Directivas de sincronización de tareas combinadas
Recomendaciones
Resumen
Tipos de cláusulas en OpenMP:
Cláusulas de datos
Cláusulas de comportamiento
Cláusulas de sincronı́a
Programación
Caracterı́sticas fundamentales de OpenMP Paralela en
Fortran95
usando OpenMP
Introducción y
!$OMP: precede a todas las directivas de OpenMP: motivación
Regiones paralelas
! $OMP PARALLEL DEFAULT ( NONE ) SHARED (A , B ) &
Conceptos y
! $OMP PRIVATE (C , D ) REDUCTION (+: A ) terminologı́a
Cláusulas de datos
Directivas de
!$: precede a lı́neas que sólo se compilan con OpenMP: distribución de
trabajo
Interval = ( b - a ) Directivas
combinadas
! $ Interval = ( b - a ) * O M P _ g e t _ t h r e a d _ n u m () / &
!$ ( O M P _ g e t _ n u m _ t h r e a d s () - 1) Recomendaciones
Resumen
Miguel Hermanns
Regiones paralelas
Sencillo: no requiere el envı́o de mensajes como en MPI
Conceptos y
terminologı́a
La descomposición de los datos es automática Cláusulas de datos
Directivas de
Admite la paralelización incremental del código distribución de
trabajo
Directivas
Mismo código fuente para las versiones serial y paralela combinadas
Recomendaciones
Elevada portabilidad
Programación
Caracterı́sticas fundamentales de OpenMP Paralela en
Fortran95
usando OpenMP
Miguel Hermanns
Regiones paralelas
Requiere un compilador que entienda OpenMP
Conceptos y
terminologı́a
El estándar sólo contempla C y Fortran Cláusulas de datos
Directivas de
Sólo es eficiente en máquinas de memoria compartida distribución de
trabajo
Directivas
En general la eficiencia paralela es baja combinadas
Recomendaciones
IBM XL Introducción y
motivación
Conceptos y
terminologı́a
Portland Group Compilers and Tools
Cláusulas de datos
Absoft Pro FortranMP Directivas de
distribución de
trabajo
Lahey/Fujitsu Fortran 95
Directivas
combinadas
Fujitsu-Siemens Fortran 95 (Solaris)
Recomendaciones
PathScale
GNU GCC (a partir de la versión 4.2)
HP
Programación
Compiladores que soportan OpenMP Paralela en
Fortran95
usando OpenMP
Miguel Hermanns
Introducción y
El soporte para OpenMP ha de ser activado: motivación
Regiones paralelas
Conceptos y
Versión serial de un programa: terminologı́a
Cláusulas de datos
hermanns@bender:~$ ifort ejemplo.f90 Directivas de
distribución de
trabajo
Recomendaciones
hermanns@bender:~$ ifort -openmp ejemplo.f90
Resumen
Introducción y
Definen una región paralela motivación
Regiones paralelas
!$OMP PARALLEL crea un conjunto de tareas Conceptos y
terminologı́a
Las cláusulas especifican condiciones a cumplir Cláusulas de datos
Directivas de
Todas las tareas ejecutan las instrucciones distribución de
trabajo
Recomendaciones
Sintáxis de la directiva: Resumen
Introducción y
! $OMP PARALLEL motivación
write (* ,*) " Hello " Regiones paralelas
! $OMP END PARALLEL
Conceptos y
terminologı́a
Cláusulas de datos
6Representación gráfica 1.delOpenMP
ejemplo:
Fortran Application Program Interface
Directivas de
distribución de
trabajo
thread 0 Directivas
serial region combinadas
E
x Recomendaciones
e
c
u Resumen
t
i
o
n
parallel region thread 0 thread 1 thread Np
...
write(*,*) "Hello" write(*,*) "Hello" write(*,*) "Hello"
Figure 1.1: Graphical representation of the example explaining the working principle of the
Programación
Maneras de especificar el número de tareas Paralela en
Fortran95
usando OpenMP
Regiones paralelas
La subrutina OMP set num threads: Conceptos y
terminologı́a
use omp_lib
Cláusulas de datos
Resumen
La cláusula NUM THREADS:
! $OMP PARALLEL NUM_THREADS (4)
...
! $OMP END PARALLEL
Introducción y
Crear una región paralela es algo costoso motivación
Regiones paralelas
Cláusulas de datos
Si condition = TRUE entonces ejecuta en paralelo
Directivas de
distribución de
Si condition = FALSE entonces ejecuta en serie trabajo
Directivas
combinadas
Sólo se puede imponer una condición
Recomendaciones
Resumen
Conceptos y
terminologı́a
Lo controla la variable de entorno OMP NESTED, que
Cláusulas de datos
puede ser OMP NESTED=TRUE u OMP NESTED=FALSE
Directivas de
distribución de
El compilador no está obligado por el estándar a trabajo
soportarlo Directivas
combinadas
Recomendaciones
! $OMP PARALLEL
Resumen
write (* ,*) " Hello "
! $OMP PARALLEL
write (* ,*) " Hi "
! $OMP END PARALLEL
Miguel Hermanns
Introducción y
motivación
serial region thread 0
Regiones paralelas
Conceptos y
terminologı́a
E Cláusulas de datos
x
e Directivas de
thread 0 thread 1 c distribución de
parallel region u trabajo
t
Hello Hello i Directivas
o combinadas
n
Recomendaciones
Resumen
nested parallel thread 0 thread 1 thread 0 thread 1
regions
Hi Hi Hi Hi
Figure 1.2: Graphical representation of the example explaining the concept of nested parallel
regions.
Programación
Regiones paralelas anidadas Paralela en
Fortran95
usando OpenMP
Introducción y
Permite desarrollar códigos paralelos y acoplarlos motivación
Regiones paralelas
Permite usar librerı́as paralelas en programas paralelos Conceptos y
terminologı́a
Ejemplos de librerı́as paralelizadas con OpenMP: Cláusulas de datos
Directivas de
Intel Math Kernel Library distribución de
trabajo
FFTW
LAPACK
...
Programación
Conceptos generales y terminologı́a habitual Paralela en
Fortran95
usando OpenMP
Miguel Hermanns
Directiva: instrucción de OpenMP que especifica la
acción a realizar Introducción y
motivación
Regiones paralelas
Cláusula: instrucción de OpenMP que impone Conceptos y
terminologı́a
condiciones a la directiva que le precede
Cláusulas de datos
Directivas de
Tarea: unidad de ejecución con memoria y stack propios distribución de
trabajo
Directivas
Región serial: parte de un programa que es ejecutada combinadas
Resumen
Miguel Hermanns
Tarea maestra: tarea que crea a las demás tareas al
inicio de una región paralela y cuyo número de tarea Introducción y
motivación
siempre es el 0
Regiones paralelas
Conceptos y
Bloque estructurado: bloque de lı́neas de código con terminologı́a
Directivas de
única salida lógica en su parte inferior distribución de
trabajo
Directivas
Rutina thread-safe: una rutina es thread-safe cuando combinadas
es capaz de ser utilizada de manera simultánea e Recomendaciones
Miguel Hermanns
Caracterı́sticas generales de estas cláusulas:
Introducción y
motivación
Especifican propiedades “paralelas” de las variables Regiones paralelas
Conceptos y
Pueden aparecer tantas veces como sea necesario terminologı́a
Cláusulas de datos
Directivas
Restricciones generales de estas cláusulas: combinadas
Recomendaciones
Miguel Hermanns
Especifica que una variable es compartida por las tareas:
Introducción y
! $OMP PARALLEL SHARED (c , d ) motivación
... Regiones paralelas
! $OMP END PARALLEL
3.1. Data scope attribute clauses 39 Conceptos y
terminologı́a
Cláusulas de datos
Shared memory Directivas de
distribución de
serial region thread 0 trabajo
c d
E Directivas
x
e combinadas
c
u Recomendaciones
t
Shared memory i Resumen
o
n
parallel region thread 0 thread 1 thread N
... c d
Figure 3.2: Graphical representation of the effect of the SHARED clause on the variables c and
d of the presented example.
Programación
La cláusula SHARED Paralela en
Fortran95
usando OpenMP
Miguel Hermanns
Caracterı́sticas de las variables compartidas:
Introducción y
motivación
Todas las tareas ven su contenido
Regiones paralelas
Conceptos y
Todas las tareas pueden cambiar su contenido terminologı́a
Cláusulas de datos
Todas las tareas ven los cambios realizados
Directivas de
distribución de
trabajo
Recomendaciones
Los cambios no son inmediatos (cache coherency )
Resumen
Miguel Hermanns
Especifica que una variable es privada a cada tarea:
Introducción y
! $OMP PARALLEL PRIVATE (a , b ) motivación
... Regiones paralelas
! $OMP END PARALLEL
38 3. PRIVATE, SHARED & Co. Conceptos y
terminologı́a
Cláusulas de datos
Shared memory Directivas de
distribución de
serial region thread 0 trabajo
a b
E Directivas
x
e combinadas
c
u Recomendaciones
t
Shared memory i Resumen
o
n
parallel region thread 0 thread 1 thread N
...
a b a b a b
Figure 3.1: Graphical representation of the effect of the PRIVATE clause on the variables a and
b of the presented example.
Programación
La cláusula PRIVATE Paralela en
Fortran95
usando OpenMP
Miguel Hermanns
Caracterı́sticas de las variables privadas:
Introducción y
motivación
Cada tarea tiene su propia versión de la variable
Regiones paralelas
Conceptos y
Eso se consigue replicando la variable en memoria terminologı́a
Cláusulas de datos
Las otras tareas no pueden ver su contenido
Directivas de
distribución de
trabajo
Recomendaciones
Su valor inicial no está definido
Resumen
integer :: a ,b ,c , d Introducción y
motivación
Directivas de
Shared memory distribución de
trabajo
Figure 3.3: Graphical representation of the effect of the DEFAULT clause on the variables of the
Programación
La cláusula DEFAULT Paralela en
Fortran95
usando OpenMP
Caracterı́sticas de la cláusula: Miguel Hermanns
Regiones paralelas
Admite tres opciones: PRIVATE, SHARED y NONE
Conceptos y
terminologı́a
Con NONE todas las variables deben ser definidas
Cláusulas de datos
Directivas
! $OMP PARALLEL DEFAULT ( SHARED ) combinadas
a = 1
b = 2 Recomendaciones
Resumen
call ejemplo (a , b )
a = 2 Introducción y
b = 1 motivación
Regiones paralelas
! $OMP PARALLEL PRIVATE ( a ) FIRSTPRIVATE ( b )
... Conceptos y
terminologı́a
! $OMP END PARALLEL
3.1. Data scope attribute clauses 41 Cláusulas de datos
Directivas de
distribución de
Shared memory trabajo
Figure 3.4: Graphical representation of the example given in the description of the
Programación
La cláusula FIRSTPRIVATE Paralela en
Fortran95
usando OpenMP
Miguel Hermanns
Caracterı́sticas de las variables FIRSTPRIVATE:
Introducción y
motivación
Cada tarea tiene su propia versión de la variable
Regiones paralelas
Conceptos y
Eso se consigue replicando la variable en memoria terminologı́a
Cláusulas de datos
Las otras tareas no pueden ver su contenido
Directivas de
distribución de
Su valor es inicializado con la variable original trabajo
Directivas
combinadas
Recomendaciones
Peculiaridades de las variables FIRSTPRIVATE:
Resumen
Introducción y
SHARED, PRIVATE, DEFAULT, FIRSTPRIVATE motivación
Regiones paralelas
Conceptos y
Cláusulas de datos adicionales: terminologı́a
Cláusulas de datos
LASTPRIVATE, REDUCTION, COPYIN, COPYPRIVATE Directivas de
distribución de
trabajo
Recomendaciones
Una variable sólo puede aparecer en una cláusula, salvo
Resumen
en FIRSTPRIVATE y LASTPRIVATE a la vez
Miguel Hermanns
Caracterı́sticas de estas directivas:
Introducción y
Distribuyen una carga de trabajo sobre varias tareas motivación
Regiones paralelas
Cláusulas de datos
Funcionan en regiones seriales y en regiones paralelas Directivas de
distribución de
trabajo
Incluyen al final una sincronización implicita
Directivas
combinadas
Recomendaciones
Restricciones de estas directivas: Resumen
Miguel Hermanns
Caracterı́sticas de la directiva:
Introducción y
motivación
Distribuye la carga de un bucle entre las tareas Regiones paralelas
Conceptos y
La descomposición se hace en el espacio de iteraciones terminologı́a
Cláusulas de datos
Recomendaciones
Directivas
thread 0 combinadas
serial region
E Recomendaciones
x
e Resumen
c
u
t
!$OMP DO i
o
n
parallel region thread 0 thread 1 thread 9
...
do i = 1, 100 do i = 101, 200 do i = 901, 1000
Figure 2.1: Graphical representation of the example explaining the general working principle
Programación
La directiva !$OMP DO Paralela en
Fortran95
usando OpenMP
Restricciones de la directiva !$OMP DO:
Miguel Hermanns
Regiones paralelas
En Fortran, el bucle no puede ser del tipo do while
Conceptos y
terminologı́a
El contador debe ser el mismo para todas las tareas Cláusulas de datos
Directivas de
distribución de
Sólo admite bloques estructurados de código trabajo
Directivas
Las variables SHARED sólo se actualizan al final combinadas
Recomendaciones
Resumen
Programación
La directiva !$OMP SECTIONS Paralela en
Fortran95
usando OpenMP
Miguel Hermanns
Caracterı́sticas de la directiva:
Introducción y
motivación
Cada tarea ejecuta una de las secciones Regiones paralelas
Conceptos y
Cada sección es ejecutada una única vez terminologı́a
Cláusulas de datos
Directivas
combinadas
! $OMP SECTIONS clause1 clause2 ...
! $OMP SECTION Recomendaciones
... Resumen
! $OMP SECTION
...
...
! $OMP END SECTIONS end_clause
Programación
La
16 directiva !$OMP SECTIONS 2. OpenMP constructs Paralela en
Fortran95
usando OpenMP
!$OMP SECTIONS
Ejemplo de asignación de tareas:
!$OMP SECTION Miguel Hermanns
write(*,*) "Hello"
! $OMP
!$OMP SECTIONS
SECTION
write(*,*) "Hi" Introducción y
! $OMP SECTION motivación
!$OMP SECTION
write (* ,*) " Hello "
write(*,*) "Bye"
! $OMP Regiones paralelas
!$OMP END SECTION
SECTIONS
write (* ,*) " Hi " Conceptos y
Now each
! $OMP of the messages Hello, Hi and Bye is printed only once on the screen. This
SECTION terminologı́a
example
writeis shown
(* ,*)graphically
" Bye " in figure 2.2. The OpenMP specification does not specify Cláusulas de datos
the way in which the different tasks are distributed over the team of threads, leaving this
! $OMP END SECTIONS
point open to the compiler developers. Directivas de
distribución de
trabajo
Directivas
thread 0 combinadas
serial region
E Recomendaciones
x
e Resumen
c
u
t
!$OMP SECTIONS i
o
n
parallel region thread 0 thread 1 thread 2
write(*,*) "Hello" write(*,*) "Hi" write(*,*) "Bye"
Figure 2.2: Graphical representation of the example explaining the working principle of the
Programación
La directiva !$OMP SECTIONS Paralela en
Fortran95
usando OpenMP
Restricciones de la directiva:
Miguel Hermanns
Regiones paralelas
Cada sección debe ser un bloque estructurado de código
Conceptos y
terminologı́a
No se crean nuevas tareas, se usan las existentes Cláusulas de datos
Directivas de
distribución de
Las variables SHARED sólo se actualizan al final trabajo
Directivas
combinadas
Recomendaciones
Resumen
Programación
La directiva !$OMP WORKSHARE Paralela en
Fortran95
usando OpenMP
Caracterı́sticas de la directiva:
Miguel Hermanns
Conceptos y
terminologı́a
Distribuye las instrucciones matriciales entre las tareas
Cláusulas de datos
Directivas de
Soporta las siguientes instrucciones matriciales: distribución de
trabajo
Resumen
Las instrucciones deben comportarse como si
estuvieran en una región serial
! $OMP WORKSHARE
...
! $OMP END WORKSHARE end_clause
Programación
La directiva !$OMP WORKSHARE Paralela en
Fortran95
usando OpenMP
Ejemplo de distribución de instrucciones matriciales: Miguel Hermanns
Directivas de
distribución de
trabajo
Directivas
serial region thread 0 combinadas
E
x Recomendaciones
e
c Resumen
u
t
!$OMP WORKSHARE i
o
? ? ? n
parallel region thread 0 thread 1 thread 9
...
A = matmul(B,C)|0 A = matmul(B,C)|1 A = matmul(B,C)|9
?
Programación
La directiva !$OMP WORKSHARE Paralela en
Fortran95
usando OpenMP
Restricciones de la directiva:
Miguel Hermanns
Regiones paralelas
El compilador debe insertar sincronizaciones suficientes
Conceptos y
para que el comportamiento sea el correcto terminologı́a
Cláusulas de datos
Directivas
combinadas
Existen restricciones al uso de variables PRIVATE
Recomendaciones
Resumen
Peculiaridad de la directiva:
Miguel Hermanns
Caracterı́sticas de las directivas combinadas:
Introducción y
motivación
Forma abreviada de escribir dos directivas consecutivas Regiones paralelas
Conceptos y
Equivalentes a una región paralela con una única terminologı́a
Directivas de
distribución de
Admiten las cláusulas de ambas directivas trabajo
Directivas
combinadas
Restricciones de las directivas combinadas: Recomendaciones
Resumen
El comportamiento de un programa no está definido si
éste depende de la asociación de una cláusula con la
región paralela o con la directiva de trabajo
Programación
Directivas combinadas de distribución de trabajo Paralela en
Fortran95
usando OpenMP
Equivalencia de las directivas combinadas: Miguel Hermanns
Cláusulas de datos
Directivas de
! $OMP PARALLEL distribución de
trabajo
! $OMP PARALLEL SECTIONS ! $OMP SECTIONS
... ... Directivas
! $OMP END PARALLEL SECTIONS ! $OMP END SECTIONS combinadas
Resumen
! $OMP PARALLEL
! $OMP PARALLEL WORKSHARE ! $OMP WORKSHARE
... ...
! $OMP END PARALLEL WORKSHARE ! $OMP END WORKSHARE
! $OMP END PARALLEL
Programación
Recomendaciones personales Paralela en
Fortran95
usando OpenMP
Miguel Hermanns
1 Revisar el estándar a la hora de programar con OpenMP
Introducción y
motivación
2 Buscar sencillez y no optar por soluciones rebuscadas Regiones paralelas
Conceptos y
terminologı́a
3 Especificar el número de tareas con OMP NUM THREADS
Cláusulas de datos
Directivas de
4 Usar las cláusulas de datos sólo con !$OMP PARALLEL distribución de
trabajo
Directivas
combinadas
5 Declarar todas las variables como SHARED y sólo las
Recomendaciones
mı́nimas necesarias como PRIVATE
Resumen
Miguel Hermanns
Regiones paralelas
2 Caracterı́sticas fundamentales de OpenMP
Conceptos y
terminologı́a
3 Regiones paralelas y regiones seriales Cláusulas de datos
Directivas de
distribución de
4 Conceptos generales y terminologı́a habitual trabajo
Directivas
combinadas
5 Variables compartidas y variables privadas Recomendaciones
Resumen
6 Distribución de la carga computacional
7 Recomendaciones personales
Programación
Agradecimientos Paralela en
Fortran95
usando OpenMP
Miguel Hermanns
Introducción y
motivación
Regiones paralelas
Conceptos y
terminologı́a
Cláusulas de datos
Oscar Flores Directivas de
Universidad Politécnica de Madrid distribución de
trabajo
Directivas
combinadas
Recomendaciones
Resumen