SlideShare une entreprise Scribd logo
1  sur  57
Télécharger pour lire hors ligne
Tomás Morales!!
Servicio de Modelización de la Calidad del Aire
El sistema de NWP HARMONIE:
Introducción a la Computación de Altas
Prestaciones
!
Agencia Estatal de Meteorología (AEMET) 20-23 octubre 2014, Madrid
El sistema de NWP HARMONIE!
!
Contenidos sección Computación de Altas Prestaciones en los modelos IFS /
HARMONIE. !
!
• Día 20: !
• Introducción a la computación de altas prestaciones: paralización de
código.!
• Programación en memoria compartida.!
• Introducción teórica. !
• Programación usando OpenMP.!
• Ejercicios prácticos.!
• OpenMP en los modelos IFS / HARMONIE.!
• Día 21:!
• Programación en memoria distribuida.!
• Introducción teórica. !
• Programación usando MPI.!
• Ejercicios prácticos.!
• MPI en los modelos IFS / HARMONIE.!
• Día 22:!
• Programación híbrida: memoria distribuida + memoria compartida.!
• Implementación híbrida.!
• Ejercicios prácticos.!
• Programación híbrida en los modelos IFS / HARMONIE.!
• Nuevas técnicas de paralización y optimización en los modelos IFS /
HARMONIE
Introducción a la Computación de Altas
Prestaciones.
!
• ¿ Por qué la Computación de Altas Prestaciones ?!
!
• ¿ Cómo se puede analizar la calidad de un algoritmo ?!
!
• ¿ Por qué el paradigma de Pase de Mensaje ?!
!
• ¿ Por qué el paradigma de Memoria Compartida ?!
!
• ¿ Tiene utilidad en los modelos meteorológicos ?
Cuestiones!
!
Introducción a la computación de Altas Prestaciones
!
Introducción a la computación de Altas Prestaciones
Conceptos iniciales!
¿ Qué es la Computación de Altas Prestaciones ?
!
Introducción a la computación de Altas Prestaciones
Conceptos iniciales!
Áreas que más demandan !
capacidad de computo:!
!
• Inteligencia Artificial
• Predicción del tiempo
• Procesado de imágenes
• Análisis de Datos ( meteorología, otros)
• etc
H+00 H+48
Tiempo de!
computo!
secuencial
NWP
H+00 H+48
NWP
Paso de tiempo numérico
datos/3datos/3 datos/3
P3P2P1
tiempo computo '
tiempo secuencial
3
¿ ?
!
Introducción a la computación de Altas Prestaciones
Conceptos iniciales!
datos
H+00 H+48
NWP
Paso de tiempo numérico
datos/3datos/3 datos/3
P3P2P1
tiempo computo '
tiempo secuencial
3
¿ ?
Depende del esquema
numérico, en el caso IFS/HARMONIE:
semi-Lagrangiano semi-implícito (SLSI)
datos
Conceptos iniciales!
!
Introducción a la computación de Altas Prestaciones
Conceptos!
!
Introducción a la computación de Altas Prestaciones
Arquitectura !
de Von Neumman
Ley de Moore
Conceptos!
!
Introducción a la computación de Altas Prestaciones
Taxonomía de Flynn!
!
• Una instrucción, un dato (SISD):!
Computador secuencial que no explota el paralelismo en las instrucciones ni en flujos de datos.
Ejemplos de arquitecturas SISD son las máquinas con uni-procesador o monoprocesador
tradicionales como el PC o los antiguos mainframe.
!
• Múltiples instrucciones, un dato (MISD):!
Poco común debido al hecho de que la efectividad de los múltiples flujos de instrucciones suele
precisar de múltiples flujos de datos.
!
• Una instrucción, múltiples datos (SIMD):!
Un computador que explota varios flujos de datos dentro de un único flujo de instrucciones para
realizar operaciones que pueden ser paralelizadas de manera natural. Por ejemplo, un procesador
vectorial.
!
• Múltiples instrucciones, múltiples datos (MIMD):!
Varios procesadores autónomos que ejecutan simultáneamente instrucciones diferentes sobre
datos diferentes. Los sistemas distribuidos suelen clasificarse como arquitecturas MIMD; bien sea
explotando un único espacio compartido de memoria, o uno distribuido.
Conceptos!
!
Introducción a la computación de Altas Prestaciones
Lo más común en los Modelo Numéricos de Predicción del Tiempo,
Calidad del Aire y Climatológicos.
Conceptos!
!
Introducción a la computación de Altas Prestaciones
Ley de Amdahl!
!
La aceleración de un código se define por la fracción de código (P) que puede
ser paralizado.
• Speedup: speedup =
1
P
N + S
P = 0 → no speedup
P = 1 → speedup infinito (teoría)
Sp =
Ts
Tp
Speedup y Eficiencia!
!
Introducción a la computación de Altas Prestaciones
• Speedup:!
!
- p = # de procesadores.
- Ts = tiempo de ejecución de un
algoritmo en secuencial.
- Tp = tiempo de ejecución de un
algoritmo paralelo con p
procesadores.
- Sp = P (velocidad lineal: ideal)
!
!
!
• Parallel efficiency: Ep =
Sp
p
=
Ts
pTp
Speedup y Eficiencia: Ec. calor!
!
Introducción a la computación de Altas Prestaciones
Numero procesadores: 8
Arquitectura de memoria: Memoria Compartida!
!
Introducción a la computación de Altas Prestaciones
CPU
CPU
CPUMEMORIACPU
UMA!
(Uniform Memory Access)
NUMA!
(Non-Uniform Memory Access)
CPU
MEMORIA
CPU
CPU
MEMORIA
CPU
CPU
MEMORIA
CPU
CPU
MEMORIA
CPU
Bus!
interconexión!
Noreste, Anayet
Arquitectura de memoria: Memoria Distribuida!
!
Introducción a la computación de Altas Prestaciones
Memoria CPU
Memoria CPU
Memoria CPU
Memoria CPU
network
Arquitectura de memoria: Memoria Distribuida-Compartida!
!
Introducción a la computación de Altas Prestaciones
Memoria
CPU
CPU
GPU
GPU
Memoria
CPU
CPU
GPU
GPU
Memoria
CPU
CPU
GPU
GPU
Memoria
CPU
CPU
GPU
GPU
Memoria
CPU
CPU
CPU
CPU
Memoria
CPU
CPU
CPU
CPU
Memoria
CPU
CPU
CPU
CPU
Memoria
CPU
CPU
CPU
CPU
network
network
Paradigmas de Programación en Paralelo!
!
Introducción a la computación de Altas Prestaciones
Programación en memoria compartida:!
• Pthreads!
• OpenMP!
• CAF!
!
Programación en memoria distribuida:!
• MPI!
!
Programación híbrida (distribuida + compartida):!
• MPI + OpenMP
!
• ¿ Por qué la Computación de Altas Prestaciones ?!
!
• ¿ Cómo se puede analizar la calidad de un algoritmo ?!
!
• ¿ Por qué el paradigma de Pase de Mensaje ?!
!
• ¿ Por qué el paradigma de Memoria Compartida ?!
!
• ¿ Tiene utilidad en los modelos meteorológicos ?
Cuestiones!
!
Introducción a la computación de Altas Prestaciones
!
Introducción a la computación de Altas Prestaciones
Programación en memoria compartida usando OpenMP!
• Application Program Interface (API) para para programación paralela en
memoria compartida multi-threads.
!
• El API soporta C/C++ y Fortran en una variedad de arquitectura.
!
• El API se compone de tres componentes principales:
!
•Directivas de compilación.
!
•Runtime Library Routines.
!
•Variables de entorno.
!
Introducción a la computación de Altas Prestaciones
OpenMP no es …!
• No es una paralización automática.
!
• Usuario tiene que incluir las directivas para paralizar el código.
!
• El compilador no ignora el uso de directivas.
!
• No paraleliza fuera de los bucles.
!
• No es un proyecto de investigación.
!
• Los compiladores más eficientes son los comerciales.
!
!
!
!
Introducción a la computación de Altas Prestaciones
OpenMP si es ..!
• Programación paralela para memoria compartida multiplataforma.
!
• OpenMP es portable: IBM, Intel,..
!
• OpenMP no es intrusivo
!
!
!
!
Introducción a la computación de Altas Prestaciones
Los componente de OpenMP !
• Directivas!
!
• Variables de entorno!
!
• Librerías en tiempo de ejecución!
!
!
!
!
!
OpenMP
Directivas Librerías
Variables
entorno
• Variables privadas/públicas!
!
• OS Threads
!
Introducción a la computación de Altas Prestaciones
Las directivas de OpenMP !
• Las directivas son “comentarios” espaciales en el código.
!
• Fortran: !$OMP
!
• C/C++ : !pragma omp
!
• Los comentarios especiales son interpretados por el compilar,
siempre que se le indique que utilice la API de OpenMP.
!
• Fortran:
!
gfortran -fopenmp -o program.x program.f90
!
¡ OpenMP no es intrusivo !
!
gfortran -o program.x program.f90
!
!
!
!
Introducción a la computación de Altas Prestaciones
Las directivas de OpenMP (2)!
int main() {
!
!
double
a[1000],b[1000],c[1000];
int i;
!
#pragma omp for
!
for (i = 0; i< 1000; i++){
a[i] = b[i] + c[i];
}
!
!
!
}
Program Ejemplo1
Implicit none
!
real(8) ::
a(1000),b(1000),c(1000)
integer :: i
!
!$OMP PARALLEL DO
!
do i=0,1000
a(i) = b(i) + c(i)
end do
!
!$OMP END PARALLEL DO
!
end
C Fortran
!
Introducción a la computación de Altas Prestaciones
Las directivas de OpenMP (3)!
1 ) Regiones paralelas!
!
!
!$OMP PARALLEL cláusula1 cláusula2...
Código paralelo
!
!$OMP END PARALLEL
Normas básicas!
!
1) Debe aparecer en la
misma rutina del
programa.!
!
2) Está permitido anidar
regiones paralelas.
Región serie
Región paralela
Thread 0
Thread 0 Thread 1
Thread
Np
!
Introducción a la computación de Altas Prestaciones
Las directivas de OpenMP (4)!
Prácticas: Ejecuta programa hello_treads.f90
Cláusulas:!
!
• Private (lista)
• Shared (lista)
• Default (Private | Shared | None )
• Firstprivate ( lista)
• Reduction (operator:lista)
• Copyin (lista)
• If ( expresión lógica)
• Num_threads (entero) !
!
Introducción a la computación de Altas Prestaciones
Las directivas de OpenMP (5)!
Región serie
Región paralela
Thread 0
Thread 0 Thread 1 Thread Np
Memoria
Compartida
Memoria
Compartida
a b
a ba b a b
Región serie
Región paralela
Thread 0
Thread 0 Thread 1 Thread Np
Memoria
Compartida
Memoria
Compartida
c d
c d
PRIVATE:
!
!$OMP PARALLEL
PRIVATE(a,b)
SHARED:
!
!$OMP PARALLEL
SHARED(c,d)
!
Introducción a la computación de Altas Prestaciones
Las directivas de OpenMP (5)!
DEFAULT (PRIVATE|SHARED|NONE):
!
!$OMP PARALLEL DEFAULT(PRIVATE) SHARED(a)
Para declarar muchas variables de golpe. “None” implica
declararlas todas.
Región serie
Región paralela
Thread 0
Thread 0 Thread 1 Thread Np
Memoria
Compartida
Memoria
Compartida
b = 1
a = 2
b = 1
a = ?
b = 1
a = ?
b = 1
a = ?
FIRSTPRIVATE(list):
!$OMP PARALLEL PRIVATE(a) FIRSTPRIVATE(b)
2) Bucles DO:
!
!$OMP DO cláusula1 cláusula2...
Código paralelo
!
!$OMP END DO cláusula de finalización
Región serie
Región paralela
Thread 0
Thread 0 Thread 1 Thread 3
i=1, 100 i=101, 200 i=201, 300
!
Introducción a la computación de Altas Prestaciones
Las directivas de OpenMP (6)!
Nota:
NOWAIT : existe una sincronización
implícita cuando finaliza elentorno
paralelo. Esta directiva anula dicha
sincronización, por lo que debe
t e n e r s e c u i d a d o a l u s a r
determinadas variables.
sincronizar
!
Introducción a la computación de Altas Prestaciones
Las directivas de OpenMP (6)!
REDUCTION (operador : lista):
Muchas veces hay variables en memoria compartida que sólo
deben ser actualizadas por un único hilo cada vez. Hay dos
opciones:
– Pongo barreras en el momento de actualizar la variable (lo
veremos): esto afecta al rendimiento.
– Creo una copia privada de la variable y la inicializo. Dejo que cada
hilo actualice su copia privada de la variable y al sincronizar los
hilos actualizo el valor de la variable con los diferentes parciales.
IF (EXPRESIÓN LÓGICA):
!$OMP PARALLEL IF (N > 1000)
Ejecución condicional: la región sólo se ejecuta en paralelo si se
cumple la condición expuesta en el IF.
NUM_THREADS ( entero ):
!$OMP PARALLEL IF (N > 1000)
Fija el número de hilos que ejecutarán la región paralela. Prevalece
sobre el valor fijado en las variables de entorno.
Sincronización de hilos:
!
!$OMP MASTER / !$OMP END MASTER: sólo el hilo 0 (el master) ejecuta el código.
El resto NO esperan. [SINGLE con NOWAIT]
!
!$OMP CRITIAL / !$OMP END CRITICAL: asegura que sólo un hilo ejecuta una
acción en concreto (escribir fichero, leer de teclado). El resto espera a que el
anterior termine para poder ejecutar ese fragmento de código.
!
!$OMP BARRIER: debe existir para todos los hilos o para ninguno. Todos esperan
hasta que llegan a ese punto. Si sólo 1 tiene la barrera, se produce un deadlock.
!
!$OMP ATOMIC: asegura que sólo 1 hilo actualiza una variable compartida. Por
ejemplo (a = a +1). [Critical]
!
Introducción a la computación de Altas Prestaciones
Las directivas de OpenMP (7)!
3) Secciones secuenciales:
!
!$OMP SINGLE cláusula1 cláusula2...
Código secuencial
!$OMP END SINGLE cláusula de finalización!
!
1) Sólo ejecuta un hilo, el resto esperan a que termine ese hilo, a menos que
cerremos con un NOWAIT.
!
2) No puede ejecutarse dentro de un bucle DO, ya que la carga de trabajo se
ha repartido ya ANTES de llegar a la sentencia SINGLE.
!
Introducción a la computación de Altas Prestaciones
Las directivas de OpenMP (8)!
Las variables de entrono de OpenMP (1) !
!
Introducción a la computación de Altas Prestaciones
• OMP_NUM_THREADS: especifica el número de threads que van a
ser usados dentro de la región paralelo. Este valor también se
puede cambiar a través de una función de librería.
!
export OMP_NUM_THREADS=2!
setenv OMP_NUM_THREADS 4!
set OMP_NUM_THREADS=4!
!
• OMP_SCHUDULE: Indica el tipo de scheduling para for y parallel
for!
!
• OMP_DYNAMIC: Autoriza o desautoriza el ajuste dinámico del
número de threads.!
!
• OMP_NESTED: Autoriza o desautoriza el anidamiento. Por defecto
no esta autorizado.
Librerías en tiempo de ejecución de OpenMP (1) !
!
Introducción a la computación de Altas Prestaciones
• omp_set_num_threads: Fija el número de hilos simultáneos.!
!
• omp_get_num_threads: Devuelve el número de hilos en ejecución.!
!
• omp_get_max_threads: Devuelve el número máximo de hilos que
lanzará nuestro programa en las zonas paralelas. Es muy útil para
reservar memoria para cada hilo.!
!
• omp_get_thread_num: Devuelve el número del thread dentro del equipo
(valor entre 0 y omp_get_num_threads()-1)!
!
• omp_get_num_procs: Devuelve en número de procesadores de nuestro
ordenador o disponibles (para sistemas virtuales).
Ejercicios OpenMP!
!
Introducción a la computación de Altas Prestaciones
Ejercicios !
!
• helloThreads!
!
• pi!
!
• Máquinas!
!
• noreste!
• ecgate!
• crayx30!
Objetivo:!
!
1) Analizar el código y distinguir los diferentes componentes de
OpenMP.
!
2) Variar el número de threads y analizar el speedup y la eficiencia
del cálculo del número pi dependiendo de la máquina.
ecgate!
!
The hardware consists of:
!
• 8 compute nodes, each with 2 Intel Xeon E5-2680 (Sandy Bridge-EP, total of 16 cores 2.7 GHz,
128 GB RAM) and 2 x 900 GB SAS HDD. One of these nodes serves as a 'login' node.
!
• 4 I/O server nodes, each with 1 Intel Xeon E5-2680 (Sandy Bridge-EP, 8 cores 2.7 GHz, 64 GB
RAM) and 2 x 900 GB SAS HDD
!
• 8 DS3524 plus 16 EXP3524 storage systems providing about 170 TB of raw disk space
Ejercicios OpenMP!
!
Introducción a la computación de Altas Prestaciones
Nota: Grano fino o grueso!
!
Introducción a la computación de Altas Prestaciones
Las aplicaciones a menudo se clasifican según la frecuencia con que sus
subtareas se sincronizan o comunican entre sí:!
!
1) Grano Grueso:!
!
1) si las tareas no deben comunicarse muchas veces por segundo.
2) se trata como procesos concurrentes que ejecutan en
monoprocesador com multiprogramación.
3) puede proporcionar en multiprocesador con pocos cambios.
!
2) Grano fino: !
!
1) si se comunican muchas veces por segundo.
2) aplicaciones altamente paralelas.
3) área muy especializada y fragmentada, con muchas propuestas
diferentes.
!
3) vergonzosamente paralelo: !
!
1) si nunca o casi nunca tiene que comunicarse.
2) Son las más fáciles de programar.
!
Introducción a la computación de Altas Prestaciones
Programación en memoria distribuida usando MPI!
Open MPI: !
Open Source High Performance Computing
MPI ( Message Passing Interface)
!
Introducción a la computación de Altas Prestaciones
Programación en memoria distribuida usando MPI!
MPI ( Message Passing Interface)
!
!
• Paradigma de programación para computación paralela!
!
!
• Objetivo: lograr la potabilidad a través de diferentes máquinas, de
forma similar al de un lenguaje de programación que permita ejecutar,
de forma transparente, aplicaciones sobre sistemas heterogéneos, sin
que se pierda rendimiento.!
!
• Implementaciones:!
• MPICH!
• LAM!
• CHIMP!
• UNIFY!
• MPI_FM!
• ………
!
Introducción a la computación de Altas Prestaciones
Programación en memoria distribuida usando MPI!
MPI Standards
!
• MPI-1(1994)
!
• MPI-2(1997)
!
• MPI-2.1(2008)
!
• MPI-3 (2012)
!
• Repositorio oficial MPI: http://www.mpi-forum.org
!
• Información: http://www.mcs.anl.gov/mpi
!
Introducción a la computación de Altas Prestaciones
Programación en memoria distribuida usando MPI!
MPICH MVAPICH Open MPI Cray MPI Tianhe MPI Intel MPI
IBM BG/Q
MPI
IBM PE
MPICH
IBM
Platform
SGI MPI
Fujitsu
MPI
Microsoft
MPI
NB collectives ✔ ✔ ✔ ✔ ✔ ✔ ✔ Q4 ‘14 ✔ ✔
Neighborhood
collectives
✔ ✔ ✔ ✔ ✔ ✔ ✔ Q4 ‘14 Q3 ‘15
RMA ✔ ✔ ✔ ✔ ✔ ✔ ✔ Q4 ‘14 Q3 ‘15
Shared
memory
✔ ✔ ✔ ✔ ✔ ✔ ✔ Q4 ‘14 Q3 ‘15
Tools
Interface
✔ ✔ ✔ (✔) Q4 ‘14 Q3 ‘15
Non-collective
comm. create
✔ ✔ ✔ ✔ ✔ ✔ ✔ Q4 ‘14 Q3 ‘15 ✔
F08 Bindings ✔ ✔ ✔ Q4 ‘14 Q3 ‘15
New
Datatypes
✔ ✔ ✔ ✔ ✔ ✔ ✔ Q4 ‘14 Q3 ‘15 ✔
Large Counts ✔ ✔ ✔ ✔ ✔ ✔ ✔ Q4 ‘14 Q3 ‘15
Matched
Probe
✔ ✔ ✔ ✔ ✔ ✔ ✔ Q4 ‘14 Q3 ‘15 ✔
MPI-3
Espacios en blancos no se tiene información
!
Introducción a la computación de Altas Prestaciones
Programación en memoria distribuida usando MPI!
• Cuando usar MPI!
!
• Si la potabilidad es necesaria.!
• En el desarrollo de bibliotecas paralelas.!
• La interrelación de los datos es dinámica o irregular y no se ajusta
a un modelo de datos paralelos. MPI, y en general el esquema de
pase de mensajes, facilitan la programación en estos casos.
!
• Cuando NO usar MPI!
• Si es posible usar HPF (High Performance Fortran) o Fortran 90
paralelo.
• Es posible usar una biblioteca de más alto nivel (la cual podría
estar escrita en MPI).
!
!
!
Introducción a la computación de Altas Prestaciones
Programación en memoria distribuida usando MPI!
Programa con MPI
#include <mpi.h>
#include <stdio.h>
!
int main(int argc, char ** argv)
{
int rank, size;
!
MPI_Init(&argc, &argv);
!
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
printf("I am %d of %dn", rank + 1, size);
!
MPI_Finalize();
return 0;!
}
Basic
requirements
for an MPI
program
!
Introducción a la computación de Altas Prestaciones
Programación en memoria distribuida usando MPI!
• MPI se compone de 129 funciones aunque muchos programas
pueden ser escritos solo con 6 funciones.!
!
• Forma de ejecutar un programa con funciones MPI.
mpif90 -g -o ejecutable.x programa.f90
!
mpirun -np 4 ./ejecutable.x
!
Introducción a la computación de Altas Prestaciones
Como escribir un programa usando MPI!
MPI Basic Send/Receive
!
• Simple modelo de comunicación
!
!
!
!
!
!
!
!
!
• La aplicación necesita:
• Cómo compilar y ejecutarla
• Cómo identificar los procesos
• Cómo describiré los datos para el paso de mensaje
Process 0 Process 1
Send(data)
Receive(data)
!
!
Introducción a la computación de Altas Prestaciones
Programación en memoria distribuida usando MPI!
Las funciones de la librería MPI se pueden agrupar en los siguientes
puntos:!
!
• Información del entorno.!
!
• Medición de tiempo. !
!
• Comunicación punto a punto.!
!
• Comunicaciones colectivas.!
!
• Procesamiento por grupos.
!
• Comunicaciones sin bloqueo.
!
• Definiendo topología sobre los procesos.!
!
Introducción a la computación de Altas Prestaciones
MPI: Información del entorno!
¿ Cuántos proceso hay ?!
!
!
!
!
!
!
!
!
!
!
!
¿ Quién soy yo ?!
!
!
!
!
!
!
!
!
!
!
!
!
¿ En dónde estoy corriendo ?!
!
Introducción a la computación de Altas Prestaciones
MPI: Medición de tiempo!
MPI_Wtime: devuelve un punto
flotante que representa el número de
segundos transcurridos a partir de cierto
tiempo pasado, el cual se garantiza que
no cambia durante la vida del proceso.
Es responsabilidad del usuario hacer la
conversión de segundos a otras
unidades de tiempo: horas, minutos, etc.	

!
!
!
!
!
MPI_Wtick: permite saber cuantos
segundos hay entre tics sucesivos del
reloj. Por ejemplo, si el reloj esta
implementado en hardware como un
contador que se incrementa cada
milisegundo, entonces MPI_Wtick debe
devolver 10-3.	

!
!
Introducción a la computación de Altas Prestaciones
MPI: Comunicación punto a punto!
¿ A quién se les envía los
datos ?!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
¿ Cómo hace el receptor
p a r a i d e n t i fi c a r e l
mensaje ?!
!
Introducción a la computación de Altas Prestaciones
MPI: Comunicación punto a punto (2)!
!
!
¿ Qué es lo se envía ?!
!
!
!
!
!
Introducción a la computación de Altas Prestaciones
MPI: Comunicación colectivas!
Pueden ser clasificadas en tres grupos: !
!
• Sincronización. Barreras para sincronizar.!
!
• Movimiento (transferencias) de datos. Operaciones para difundir,
recolectar y esparcir.!
!
• Cálculos colectivos. Operaciones para dicción global, tales como
suma, máximo, mínimo o cualquier función definida por el usuario.!
Memoria
CPU
CPU
CPU
CPU
Memoria
CPU
CPU
CPU
CPU
Memoria
CPU
CPU
CPU
CPU
Memoria
CPU
CPU
CPU
CPU
network
barrera
barrera
!
Introducción a la computación de Altas Prestaciones
MPI: Comunicación colectivas (2)!
¿ Cómo mandar los datos ?!
!
Introducción a la computación de Altas Prestaciones
MPI: Comunicación colectivas (3)!
A
B
D
C
B C D
A
A
A
A
Broadcast
Scatter
Gather
A
A
P0
P1
P2
P3
P0
P1
P2
P3
¿ Cómo mandar los datos ?!
!
Introducción a la computación de Altas Prestaciones
MPI: Comunicación colectivas (4)!
¿ Cómo recuperar los datos de los !
procesadores ?!
!
Introducción a la computación de Altas Prestaciones
MPI: Comunicación colectivas (4)!
P0
P1
P2
P3
P0
P1
P2
P3
A
B
D
C
A
B
D
C
f(ABCD)
f(A)
f(AB)
f(ABC)
f(ABCD)
Reduce
Scan
Información en la WEB
▪ MPI standard : http://www.mpi-forum.org/docs/docs.html
▪ MPICH : http://www.mpich.org
▪ MPICH mailing list: discuss@mpich.org
▪ MPI Forum : http://www.mpi-forum.org/
!
▪ Otras implementaciones MPI:
– MVAPICH (MPICH con InfiniBand) : http://mvapich.cse.ohio-state.edu/
– Intel MPI (MPICH derivative): http://software.intel.com/en-us/intel-
mpi-library/
– Microsoft MPI (MPICH derivative)
– Open MPI : http://www.open-mpi.org/
!
▪ Several MPI tutorials can be found on the web
!
Introducción a la computación de Altas Prestaciones
Programación en memoria distribuida usando MPI!

Contenu connexe

Tendances (7)

Pipelining
PipeliningPipelining
Pipelining
 
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
 
Interrupciones
InterrupcionesInterrupciones
Interrupciones
 
Unidad i
Unidad iUnidad i
Unidad i
 
Formato png
Formato pngFormato png
Formato png
 
Manejo de archivo
Manejo de archivoManejo de archivo
Manejo de archivo
 
Microcontroladores Registro Timer_0
Microcontroladores Registro Timer_0 Microcontroladores Registro Timer_0
Microcontroladores Registro Timer_0
 

En vedette

Plan empresas nubelo
Plan empresas nubeloPlan empresas nubelo
Plan empresas nubelo
Francesc Font
 
El arte islámico
El arte islámicoEl arte islámico
El arte islámico
Vicente1956
 

En vedette (20)

Databeer
DatabeerDatabeer
Databeer
 
Digipak finishedt
Digipak finishedtDigipak finishedt
Digipak finishedt
 
BIFM North Region 2015 Key Learning Event 2
BIFM North Region 2015 Key Learning Event 2BIFM North Region 2015 Key Learning Event 2
BIFM North Region 2015 Key Learning Event 2
 
Plan empresas nubelo
Plan empresas nubeloPlan empresas nubelo
Plan empresas nubelo
 
Bryant university
Bryant universityBryant university
Bryant university
 
Shirlaws : More Money, More Time, Less Stress
Shirlaws : More Money, More Time, Less StressShirlaws : More Money, More Time, Less Stress
Shirlaws : More Money, More Time, Less Stress
 
Campus
CampusCampus
Campus
 
Cubi for modelos
Cubi for modelosCubi for modelos
Cubi for modelos
 
INTEGRACOOP LIBRANZA
INTEGRACOOP LIBRANZAINTEGRACOOP LIBRANZA
INTEGRACOOP LIBRANZA
 
Autores del renacimiento europeo
Autores del renacimiento europeoAutores del renacimiento europeo
Autores del renacimiento europeo
 
Diseño Estratégico e Innovación.
Diseño Estratégico e Innovación.Diseño Estratégico e Innovación.
Diseño Estratégico e Innovación.
 
Cosas de niños
Cosas de niñosCosas de niños
Cosas de niños
 
Zalando Overview 2014
Zalando Overview 2014Zalando Overview 2014
Zalando Overview 2014
 
El arte islámico
El arte islámicoEl arte islámico
El arte islámico
 
Catalogo libro del rincon 2013-2014
Catalogo libro del rincon 2013-2014Catalogo libro del rincon 2013-2014
Catalogo libro del rincon 2013-2014
 
Bulls and bears
Bulls and bearsBulls and bears
Bulls and bears
 
¿Qué hace a un contenido viral?
¿Qué hace a un contenido viral?¿Qué hace a un contenido viral?
¿Qué hace a un contenido viral?
 
Introducción a Personal en Formación
Introducción a Personal en FormaciónIntroducción a Personal en Formación
Introducción a Personal en Formación
 
A non-interpolating semi-Lagrangian scheme for the continuity equation of the...
A non-interpolating semi-Lagrangian scheme for the continuity equation of the...A non-interpolating semi-Lagrangian scheme for the continuity equation of the...
A non-interpolating semi-Lagrangian scheme for the continuity equation of the...
 
Perl mpi
Perl mpiPerl mpi
Perl mpi
 

Similaire à El sistema NWP HARMONIE: Introducción a la Computación de Altas

Aprenda-ANSI-C-Como-si-estuviera-en-primero.pdf
Aprenda-ANSI-C-Como-si-estuviera-en-primero.pdfAprenda-ANSI-C-Como-si-estuviera-en-primero.pdf
Aprenda-ANSI-C-Como-si-estuviera-en-primero.pdf
Pablo Narvaez
 

Similaire à El sistema NWP HARMONIE: Introducción a la Computación de Altas (20)

1. Algoritmos y Programas
1. Algoritmos y Programas1. Algoritmos y Programas
1. Algoritmos y Programas
 
OpenMP.ppt
OpenMP.pptOpenMP.ppt
OpenMP.ppt
 
Diseño de Algoritmos Paralelos.pptx
Diseño de Algoritmos Paralelos.pptxDiseño de Algoritmos Paralelos.pptx
Diseño de Algoritmos Paralelos.pptx
 
Software libre y modelos de programación en la investigación con supercomputa...
Software libre y modelos de programación en la investigación con supercomputa...Software libre y modelos de programación en la investigación con supercomputa...
Software libre y modelos de programación en la investigación con supercomputa...
 
SO - Administración de Memoria
SO - Administración de MemoriaSO - Administración de Memoria
SO - Administración de Memoria
 
Clase 8 algoritmos_y_programas
Clase 8 algoritmos_y_programasClase 8 algoritmos_y_programas
Clase 8 algoritmos_y_programas
 
Introducción a la Computacion paralela
Introducción a la Computacion paralelaIntroducción a la Computacion paralela
Introducción a la Computacion paralela
 
Arquitectura clase-4
Arquitectura clase-4Arquitectura clase-4
Arquitectura clase-4
 
Aprenda ansi-c-como-si-estuviera-en-primero
Aprenda ansi-c-como-si-estuviera-en-primeroAprenda ansi-c-como-si-estuviera-en-primero
Aprenda ansi-c-como-si-estuviera-en-primero
 
Programación Funcional y Orientada a Objetos con Asincronismos
Programación Funcional y Orientada a Objetos con AsincronismosProgramación Funcional y Orientada a Objetos con Asincronismos
Programación Funcional y Orientada a Objetos con Asincronismos
 
Diseño de Algoritmos Paralelos.pptx
Diseño de Algoritmos Paralelos.pptxDiseño de Algoritmos Paralelos.pptx
Diseño de Algoritmos Paralelos.pptx
 
Unidad 1 interfaz
Unidad 1 interfazUnidad 1 interfaz
Unidad 1 interfaz
 
Clase 6 introduccion_a_la_programacion
Clase 6 introduccion_a_la_programacionClase 6 introduccion_a_la_programacion
Clase 6 introduccion_a_la_programacion
 
Curso MATLAB
Curso MATLABCurso MATLAB
Curso MATLAB
 
Presentacion info
Presentacion infoPresentacion info
Presentacion info
 
Computacion paralela
Computacion paralelaComputacion paralela
Computacion paralela
 
Paralelismo Concurrencia.ppt
Paralelismo Concurrencia.pptParalelismo Concurrencia.ppt
Paralelismo Concurrencia.ppt
 
Aprenda-ANSI-C-Como-si-estuviera-en-primero.pdf
Aprenda-ANSI-C-Como-si-estuviera-en-primero.pdfAprenda-ANSI-C-Como-si-estuviera-en-primero.pdf
Aprenda-ANSI-C-Como-si-estuviera-en-primero.pdf
 
Estilos de programación y sus lenguajes
Estilos de programación y sus lenguajesEstilos de programación y sus lenguajes
Estilos de programación y sus lenguajes
 
Lenguajes de programacion
Lenguajes de programacionLenguajes de programacion
Lenguajes de programacion
 

Dernier

Althusser, Louis. - Ideología y aparatos ideológicos de Estado [ocr] [2003].pdf
Althusser, Louis. - Ideología y aparatos ideológicos de Estado [ocr] [2003].pdfAlthusser, Louis. - Ideología y aparatos ideológicos de Estado [ocr] [2003].pdf
Althusser, Louis. - Ideología y aparatos ideológicos de Estado [ocr] [2003].pdf
frank0071
 
IAAS- EPIDEMIOLOGIA. antisepcsia, desinfección, epp
IAAS-  EPIDEMIOLOGIA. antisepcsia, desinfección, eppIAAS-  EPIDEMIOLOGIA. antisepcsia, desinfección, epp
IAAS- EPIDEMIOLOGIA. antisepcsia, desinfección, epp
CatalinaSezCrdenas
 
Derivadas- sus aplicaciones en la vida cotidiana
Derivadas- sus aplicaciones en la vida cotidianaDerivadas- sus aplicaciones en la vida cotidiana
Derivadas- sus aplicaciones en la vida cotidiana
pabv24
 
El Genoma Humano, Características, Definición, ETC
El Genoma Humano, Características, Definición, ETCEl Genoma Humano, Características, Definición, ETC
El Genoma Humano, Características, Definición, ETC
J0S3G4LV1S
 
Soporte vital basico maniobras de soporte vital basico
Soporte vital basico maniobras de soporte vital basicoSoporte vital basico maniobras de soporte vital basico
Soporte vital basico maniobras de soporte vital basico
NAYDA JIMENEZ
 

Dernier (20)

Trichomonas es un género de parásitos protozoarios flagelados.
Trichomonas es un género de parásitos protozoarios flagelados.Trichomonas es un género de parásitos protozoarios flagelados.
Trichomonas es un género de parásitos protozoarios flagelados.
 
CUADRO SINOPTICO IV PARCIAL/ TORAX . PDF
CUADRO SINOPTICO IV PARCIAL/ TORAX . PDFCUADRO SINOPTICO IV PARCIAL/ TORAX . PDF
CUADRO SINOPTICO IV PARCIAL/ TORAX . PDF
 
LOS PRIMEROS PSICÓLOGOS EXPERIMENTALES (1).pdf
LOS PRIMEROS PSICÓLOGOS EXPERIMENTALES (1).pdfLOS PRIMEROS PSICÓLOGOS EXPERIMENTALES (1).pdf
LOS PRIMEROS PSICÓLOGOS EXPERIMENTALES (1).pdf
 
La Célula, unidad fundamental de la vida
La Célula, unidad fundamental de la vidaLa Célula, unidad fundamental de la vida
La Célula, unidad fundamental de la vida
 
CASO CLÍNICO INFECCIONES Y TUMORES.pptx
CASO CLÍNICO INFECCIONES Y TUMORES.pptxCASO CLÍNICO INFECCIONES Y TUMORES.pptx
CASO CLÍNICO INFECCIONES Y TUMORES.pptx
 
Althusser, Louis. - Ideología y aparatos ideológicos de Estado [ocr] [2003].pdf
Althusser, Louis. - Ideología y aparatos ideológicos de Estado [ocr] [2003].pdfAlthusser, Louis. - Ideología y aparatos ideológicos de Estado [ocr] [2003].pdf
Althusser, Louis. - Ideología y aparatos ideológicos de Estado [ocr] [2003].pdf
 
Schuster, Nicole. - La metrópolis y la arquitectura del poder ayer hoy y mana...
Schuster, Nicole. - La metrópolis y la arquitectura del poder ayer hoy y mana...Schuster, Nicole. - La metrópolis y la arquitectura del poder ayer hoy y mana...
Schuster, Nicole. - La metrópolis y la arquitectura del poder ayer hoy y mana...
 
PRUEBA CALIFICADA 4º sec biomoleculas y bioelementos .docx
PRUEBA CALIFICADA 4º sec biomoleculas y bioelementos .docxPRUEBA CALIFICADA 4º sec biomoleculas y bioelementos .docx
PRUEBA CALIFICADA 4º sec biomoleculas y bioelementos .docx
 
La señal de los higos buenos y los higos malos
La señal de los higos buenos y los higos malosLa señal de los higos buenos y los higos malos
La señal de los higos buenos y los higos malos
 
IAAS- EPIDEMIOLOGIA. antisepcsia, desinfección, epp
IAAS-  EPIDEMIOLOGIA. antisepcsia, desinfección, eppIAAS-  EPIDEMIOLOGIA. antisepcsia, desinfección, epp
IAAS- EPIDEMIOLOGIA. antisepcsia, desinfección, epp
 
SESION 3º caracteristicas de los seres vivos.pdf
SESION 3º caracteristicas de los seres vivos.pdfSESION 3º caracteristicas de los seres vivos.pdf
SESION 3º caracteristicas de los seres vivos.pdf
 
Enfermeria_Geriatrica_TeresaPerezCastro.doc
Enfermeria_Geriatrica_TeresaPerezCastro.docEnfermeria_Geriatrica_TeresaPerezCastro.doc
Enfermeria_Geriatrica_TeresaPerezCastro.doc
 
Derivadas- sus aplicaciones en la vida cotidiana
Derivadas- sus aplicaciones en la vida cotidianaDerivadas- sus aplicaciones en la vida cotidiana
Derivadas- sus aplicaciones en la vida cotidiana
 
El Genoma Humano, Características, Definición, ETC
El Genoma Humano, Características, Definición, ETCEl Genoma Humano, Características, Definición, ETC
El Genoma Humano, Características, Definición, ETC
 
PRESENTACION PRE-DEFENSA PROYECTO I.pptx
PRESENTACION PRE-DEFENSA PROYECTO I.pptxPRESENTACION PRE-DEFENSA PROYECTO I.pptx
PRESENTACION PRE-DEFENSA PROYECTO I.pptx
 
Pelos y fibras. Criminalistica pelos y fibras
Pelos y fibras. Criminalistica pelos y fibrasPelos y fibras. Criminalistica pelos y fibras
Pelos y fibras. Criminalistica pelos y fibras
 
Soporte vital basico maniobras de soporte vital basico
Soporte vital basico maniobras de soporte vital basicoSoporte vital basico maniobras de soporte vital basico
Soporte vital basico maniobras de soporte vital basico
 
Mapa Conceptual Modelos de Comunicación .pdf
Mapa Conceptual Modelos de Comunicación .pdfMapa Conceptual Modelos de Comunicación .pdf
Mapa Conceptual Modelos de Comunicación .pdf
 
El Gran Atractor, la misteriosa fuerza que está halando a la Vía Láctea.pptx
El Gran Atractor, la misteriosa fuerza que está halando a la Vía Láctea.pptxEl Gran Atractor, la misteriosa fuerza que está halando a la Vía Láctea.pptx
El Gran Atractor, la misteriosa fuerza que está halando a la Vía Láctea.pptx
 
Mapa-conceptual-de-la-Seguridad-y-Salud-en-el-Trabajo-3.pptx
Mapa-conceptual-de-la-Seguridad-y-Salud-en-el-Trabajo-3.pptxMapa-conceptual-de-la-Seguridad-y-Salud-en-el-Trabajo-3.pptx
Mapa-conceptual-de-la-Seguridad-y-Salud-en-el-Trabajo-3.pptx
 

El sistema NWP HARMONIE: Introducción a la Computación de Altas

  • 1. Tomás Morales!! Servicio de Modelización de la Calidad del Aire El sistema de NWP HARMONIE: Introducción a la Computación de Altas Prestaciones ! Agencia Estatal de Meteorología (AEMET) 20-23 octubre 2014, Madrid
  • 2. El sistema de NWP HARMONIE! ! Contenidos sección Computación de Altas Prestaciones en los modelos IFS / HARMONIE. ! ! • Día 20: ! • Introducción a la computación de altas prestaciones: paralización de código.! • Programación en memoria compartida.! • Introducción teórica. ! • Programación usando OpenMP.! • Ejercicios prácticos.! • OpenMP en los modelos IFS / HARMONIE.! • Día 21:! • Programación en memoria distribuida.! • Introducción teórica. ! • Programación usando MPI.! • Ejercicios prácticos.! • MPI en los modelos IFS / HARMONIE.! • Día 22:! • Programación híbrida: memoria distribuida + memoria compartida.! • Implementación híbrida.! • Ejercicios prácticos.! • Programación híbrida en los modelos IFS / HARMONIE.! • Nuevas técnicas de paralización y optimización en los modelos IFS / HARMONIE
  • 3. Introducción a la Computación de Altas Prestaciones.
  • 4. ! • ¿ Por qué la Computación de Altas Prestaciones ?! ! • ¿ Cómo se puede analizar la calidad de un algoritmo ?! ! • ¿ Por qué el paradigma de Pase de Mensaje ?! ! • ¿ Por qué el paradigma de Memoria Compartida ?! ! • ¿ Tiene utilidad en los modelos meteorológicos ? Cuestiones! ! Introducción a la computación de Altas Prestaciones
  • 5. ! Introducción a la computación de Altas Prestaciones Conceptos iniciales! ¿ Qué es la Computación de Altas Prestaciones ?
  • 6. ! Introducción a la computación de Altas Prestaciones Conceptos iniciales! Áreas que más demandan ! capacidad de computo:! ! • Inteligencia Artificial • Predicción del tiempo • Procesado de imágenes • Análisis de Datos ( meteorología, otros) • etc H+00 H+48 Tiempo de! computo! secuencial NWP
  • 7. H+00 H+48 NWP Paso de tiempo numérico datos/3datos/3 datos/3 P3P2P1 tiempo computo ' tiempo secuencial 3 ¿ ? ! Introducción a la computación de Altas Prestaciones Conceptos iniciales! datos
  • 8. H+00 H+48 NWP Paso de tiempo numérico datos/3datos/3 datos/3 P3P2P1 tiempo computo ' tiempo secuencial 3 ¿ ? Depende del esquema numérico, en el caso IFS/HARMONIE: semi-Lagrangiano semi-implícito (SLSI) datos Conceptos iniciales! ! Introducción a la computación de Altas Prestaciones
  • 9. Conceptos! ! Introducción a la computación de Altas Prestaciones Arquitectura ! de Von Neumman Ley de Moore
  • 10. Conceptos! ! Introducción a la computación de Altas Prestaciones Taxonomía de Flynn! ! • Una instrucción, un dato (SISD):! Computador secuencial que no explota el paralelismo en las instrucciones ni en flujos de datos. Ejemplos de arquitecturas SISD son las máquinas con uni-procesador o monoprocesador tradicionales como el PC o los antiguos mainframe. ! • Múltiples instrucciones, un dato (MISD):! Poco común debido al hecho de que la efectividad de los múltiples flujos de instrucciones suele precisar de múltiples flujos de datos. ! • Una instrucción, múltiples datos (SIMD):! Un computador que explota varios flujos de datos dentro de un único flujo de instrucciones para realizar operaciones que pueden ser paralelizadas de manera natural. Por ejemplo, un procesador vectorial. ! • Múltiples instrucciones, múltiples datos (MIMD):! Varios procesadores autónomos que ejecutan simultáneamente instrucciones diferentes sobre datos diferentes. Los sistemas distribuidos suelen clasificarse como arquitecturas MIMD; bien sea explotando un único espacio compartido de memoria, o uno distribuido.
  • 11. Conceptos! ! Introducción a la computación de Altas Prestaciones Lo más común en los Modelo Numéricos de Predicción del Tiempo, Calidad del Aire y Climatológicos.
  • 12. Conceptos! ! Introducción a la computación de Altas Prestaciones Ley de Amdahl! ! La aceleración de un código se define por la fracción de código (P) que puede ser paralizado. • Speedup: speedup = 1 P N + S P = 0 → no speedup P = 1 → speedup infinito (teoría)
  • 13. Sp = Ts Tp Speedup y Eficiencia! ! Introducción a la computación de Altas Prestaciones • Speedup:! ! - p = # de procesadores. - Ts = tiempo de ejecución de un algoritmo en secuencial. - Tp = tiempo de ejecución de un algoritmo paralelo con p procesadores. - Sp = P (velocidad lineal: ideal) ! ! ! • Parallel efficiency: Ep = Sp p = Ts pTp
  • 14. Speedup y Eficiencia: Ec. calor! ! Introducción a la computación de Altas Prestaciones Numero procesadores: 8
  • 15. Arquitectura de memoria: Memoria Compartida! ! Introducción a la computación de Altas Prestaciones CPU CPU CPUMEMORIACPU UMA! (Uniform Memory Access) NUMA! (Non-Uniform Memory Access) CPU MEMORIA CPU CPU MEMORIA CPU CPU MEMORIA CPU CPU MEMORIA CPU Bus! interconexión! Noreste, Anayet
  • 16. Arquitectura de memoria: Memoria Distribuida! ! Introducción a la computación de Altas Prestaciones Memoria CPU Memoria CPU Memoria CPU Memoria CPU network
  • 17. Arquitectura de memoria: Memoria Distribuida-Compartida! ! Introducción a la computación de Altas Prestaciones Memoria CPU CPU GPU GPU Memoria CPU CPU GPU GPU Memoria CPU CPU GPU GPU Memoria CPU CPU GPU GPU Memoria CPU CPU CPU CPU Memoria CPU CPU CPU CPU Memoria CPU CPU CPU CPU Memoria CPU CPU CPU CPU network network
  • 18. Paradigmas de Programación en Paralelo! ! Introducción a la computación de Altas Prestaciones Programación en memoria compartida:! • Pthreads! • OpenMP! • CAF! ! Programación en memoria distribuida:! • MPI! ! Programación híbrida (distribuida + compartida):! • MPI + OpenMP
  • 19. ! • ¿ Por qué la Computación de Altas Prestaciones ?! ! • ¿ Cómo se puede analizar la calidad de un algoritmo ?! ! • ¿ Por qué el paradigma de Pase de Mensaje ?! ! • ¿ Por qué el paradigma de Memoria Compartida ?! ! • ¿ Tiene utilidad en los modelos meteorológicos ? Cuestiones! ! Introducción a la computación de Altas Prestaciones
  • 20. ! Introducción a la computación de Altas Prestaciones Programación en memoria compartida usando OpenMP! • Application Program Interface (API) para para programación paralela en memoria compartida multi-threads. ! • El API soporta C/C++ y Fortran en una variedad de arquitectura. ! • El API se compone de tres componentes principales: ! •Directivas de compilación. ! •Runtime Library Routines. ! •Variables de entorno.
  • 21. ! Introducción a la computación de Altas Prestaciones OpenMP no es …! • No es una paralización automática. ! • Usuario tiene que incluir las directivas para paralizar el código. ! • El compilador no ignora el uso de directivas. ! • No paraleliza fuera de los bucles. ! • No es un proyecto de investigación. ! • Los compiladores más eficientes son los comerciales. ! ! !
  • 22. ! Introducción a la computación de Altas Prestaciones OpenMP si es ..! • Programación paralela para memoria compartida multiplataforma. ! • OpenMP es portable: IBM, Intel,.. ! • OpenMP no es intrusivo ! ! !
  • 23. ! Introducción a la computación de Altas Prestaciones Los componente de OpenMP ! • Directivas! ! • Variables de entorno! ! • Librerías en tiempo de ejecución! ! ! ! ! ! OpenMP Directivas Librerías Variables entorno • Variables privadas/públicas! ! • OS Threads
  • 24. ! Introducción a la computación de Altas Prestaciones Las directivas de OpenMP ! • Las directivas son “comentarios” espaciales en el código. ! • Fortran: !$OMP ! • C/C++ : !pragma omp ! • Los comentarios especiales son interpretados por el compilar, siempre que se le indique que utilice la API de OpenMP. ! • Fortran: ! gfortran -fopenmp -o program.x program.f90 ! ¡ OpenMP no es intrusivo ! ! gfortran -o program.x program.f90 ! ! !
  • 25. ! Introducción a la computación de Altas Prestaciones Las directivas de OpenMP (2)! int main() { ! ! double a[1000],b[1000],c[1000]; int i; ! #pragma omp for ! for (i = 0; i< 1000; i++){ a[i] = b[i] + c[i]; } ! ! ! } Program Ejemplo1 Implicit none ! real(8) :: a(1000),b(1000),c(1000) integer :: i ! !$OMP PARALLEL DO ! do i=0,1000 a(i) = b(i) + c(i) end do ! !$OMP END PARALLEL DO ! end C Fortran
  • 26. ! Introducción a la computación de Altas Prestaciones Las directivas de OpenMP (3)! 1 ) Regiones paralelas! ! ! !$OMP PARALLEL cláusula1 cláusula2... Código paralelo ! !$OMP END PARALLEL Normas básicas! ! 1) Debe aparecer en la misma rutina del programa.! ! 2) Está permitido anidar regiones paralelas. Región serie Región paralela Thread 0 Thread 0 Thread 1 Thread Np
  • 27. ! Introducción a la computación de Altas Prestaciones Las directivas de OpenMP (4)! Prácticas: Ejecuta programa hello_treads.f90 Cláusulas:! ! • Private (lista) • Shared (lista) • Default (Private | Shared | None ) • Firstprivate ( lista) • Reduction (operator:lista) • Copyin (lista) • If ( expresión lógica) • Num_threads (entero) !
  • 28. ! Introducción a la computación de Altas Prestaciones Las directivas de OpenMP (5)! Región serie Región paralela Thread 0 Thread 0 Thread 1 Thread Np Memoria Compartida Memoria Compartida a b a ba b a b Región serie Región paralela Thread 0 Thread 0 Thread 1 Thread Np Memoria Compartida Memoria Compartida c d c d PRIVATE: ! !$OMP PARALLEL PRIVATE(a,b) SHARED: ! !$OMP PARALLEL SHARED(c,d)
  • 29. ! Introducción a la computación de Altas Prestaciones Las directivas de OpenMP (5)! DEFAULT (PRIVATE|SHARED|NONE): ! !$OMP PARALLEL DEFAULT(PRIVATE) SHARED(a) Para declarar muchas variables de golpe. “None” implica declararlas todas. Región serie Región paralela Thread 0 Thread 0 Thread 1 Thread Np Memoria Compartida Memoria Compartida b = 1 a = 2 b = 1 a = ? b = 1 a = ? b = 1 a = ? FIRSTPRIVATE(list): !$OMP PARALLEL PRIVATE(a) FIRSTPRIVATE(b)
  • 30. 2) Bucles DO: ! !$OMP DO cláusula1 cláusula2... Código paralelo ! !$OMP END DO cláusula de finalización Región serie Región paralela Thread 0 Thread 0 Thread 1 Thread 3 i=1, 100 i=101, 200 i=201, 300 ! Introducción a la computación de Altas Prestaciones Las directivas de OpenMP (6)! Nota: NOWAIT : existe una sincronización implícita cuando finaliza elentorno paralelo. Esta directiva anula dicha sincronización, por lo que debe t e n e r s e c u i d a d o a l u s a r determinadas variables. sincronizar
  • 31. ! Introducción a la computación de Altas Prestaciones Las directivas de OpenMP (6)! REDUCTION (operador : lista): Muchas veces hay variables en memoria compartida que sólo deben ser actualizadas por un único hilo cada vez. Hay dos opciones: – Pongo barreras en el momento de actualizar la variable (lo veremos): esto afecta al rendimiento. – Creo una copia privada de la variable y la inicializo. Dejo que cada hilo actualice su copia privada de la variable y al sincronizar los hilos actualizo el valor de la variable con los diferentes parciales. IF (EXPRESIÓN LÓGICA): !$OMP PARALLEL IF (N > 1000) Ejecución condicional: la región sólo se ejecuta en paralelo si se cumple la condición expuesta en el IF. NUM_THREADS ( entero ): !$OMP PARALLEL IF (N > 1000) Fija el número de hilos que ejecutarán la región paralela. Prevalece sobre el valor fijado en las variables de entorno.
  • 32. Sincronización de hilos: ! !$OMP MASTER / !$OMP END MASTER: sólo el hilo 0 (el master) ejecuta el código. El resto NO esperan. [SINGLE con NOWAIT] ! !$OMP CRITIAL / !$OMP END CRITICAL: asegura que sólo un hilo ejecuta una acción en concreto (escribir fichero, leer de teclado). El resto espera a que el anterior termine para poder ejecutar ese fragmento de código. ! !$OMP BARRIER: debe existir para todos los hilos o para ninguno. Todos esperan hasta que llegan a ese punto. Si sólo 1 tiene la barrera, se produce un deadlock. ! !$OMP ATOMIC: asegura que sólo 1 hilo actualiza una variable compartida. Por ejemplo (a = a +1). [Critical] ! Introducción a la computación de Altas Prestaciones Las directivas de OpenMP (7)!
  • 33. 3) Secciones secuenciales: ! !$OMP SINGLE cláusula1 cláusula2... Código secuencial !$OMP END SINGLE cláusula de finalización! ! 1) Sólo ejecuta un hilo, el resto esperan a que termine ese hilo, a menos que cerremos con un NOWAIT. ! 2) No puede ejecutarse dentro de un bucle DO, ya que la carga de trabajo se ha repartido ya ANTES de llegar a la sentencia SINGLE. ! Introducción a la computación de Altas Prestaciones Las directivas de OpenMP (8)!
  • 34. Las variables de entrono de OpenMP (1) ! ! Introducción a la computación de Altas Prestaciones • OMP_NUM_THREADS: especifica el número de threads que van a ser usados dentro de la región paralelo. Este valor también se puede cambiar a través de una función de librería. ! export OMP_NUM_THREADS=2! setenv OMP_NUM_THREADS 4! set OMP_NUM_THREADS=4! ! • OMP_SCHUDULE: Indica el tipo de scheduling para for y parallel for! ! • OMP_DYNAMIC: Autoriza o desautoriza el ajuste dinámico del número de threads.! ! • OMP_NESTED: Autoriza o desautoriza el anidamiento. Por defecto no esta autorizado.
  • 35. Librerías en tiempo de ejecución de OpenMP (1) ! ! Introducción a la computación de Altas Prestaciones • omp_set_num_threads: Fija el número de hilos simultáneos.! ! • omp_get_num_threads: Devuelve el número de hilos en ejecución.! ! • omp_get_max_threads: Devuelve el número máximo de hilos que lanzará nuestro programa en las zonas paralelas. Es muy útil para reservar memoria para cada hilo.! ! • omp_get_thread_num: Devuelve el número del thread dentro del equipo (valor entre 0 y omp_get_num_threads()-1)! ! • omp_get_num_procs: Devuelve en número de procesadores de nuestro ordenador o disponibles (para sistemas virtuales).
  • 36. Ejercicios OpenMP! ! Introducción a la computación de Altas Prestaciones Ejercicios ! ! • helloThreads! ! • pi! ! • Máquinas! ! • noreste! • ecgate! • crayx30! Objetivo:! ! 1) Analizar el código y distinguir los diferentes componentes de OpenMP. ! 2) Variar el número de threads y analizar el speedup y la eficiencia del cálculo del número pi dependiendo de la máquina.
  • 37. ecgate! ! The hardware consists of: ! • 8 compute nodes, each with 2 Intel Xeon E5-2680 (Sandy Bridge-EP, total of 16 cores 2.7 GHz, 128 GB RAM) and 2 x 900 GB SAS HDD. One of these nodes serves as a 'login' node. ! • 4 I/O server nodes, each with 1 Intel Xeon E5-2680 (Sandy Bridge-EP, 8 cores 2.7 GHz, 64 GB RAM) and 2 x 900 GB SAS HDD ! • 8 DS3524 plus 16 EXP3524 storage systems providing about 170 TB of raw disk space Ejercicios OpenMP! ! Introducción a la computación de Altas Prestaciones
  • 38. Nota: Grano fino o grueso! ! Introducción a la computación de Altas Prestaciones Las aplicaciones a menudo se clasifican según la frecuencia con que sus subtareas se sincronizan o comunican entre sí:! ! 1) Grano Grueso:! ! 1) si las tareas no deben comunicarse muchas veces por segundo. 2) se trata como procesos concurrentes que ejecutan en monoprocesador com multiprogramación. 3) puede proporcionar en multiprocesador con pocos cambios. ! 2) Grano fino: ! ! 1) si se comunican muchas veces por segundo. 2) aplicaciones altamente paralelas. 3) área muy especializada y fragmentada, con muchas propuestas diferentes. ! 3) vergonzosamente paralelo: ! ! 1) si nunca o casi nunca tiene que comunicarse. 2) Son las más fáciles de programar.
  • 39. ! Introducción a la computación de Altas Prestaciones Programación en memoria distribuida usando MPI! Open MPI: ! Open Source High Performance Computing MPI ( Message Passing Interface)
  • 40. ! Introducción a la computación de Altas Prestaciones Programación en memoria distribuida usando MPI! MPI ( Message Passing Interface) ! ! • Paradigma de programación para computación paralela! ! ! • Objetivo: lograr la potabilidad a través de diferentes máquinas, de forma similar al de un lenguaje de programación que permita ejecutar, de forma transparente, aplicaciones sobre sistemas heterogéneos, sin que se pierda rendimiento.! ! • Implementaciones:! • MPICH! • LAM! • CHIMP! • UNIFY! • MPI_FM! • ………
  • 41. ! Introducción a la computación de Altas Prestaciones Programación en memoria distribuida usando MPI! MPI Standards ! • MPI-1(1994) ! • MPI-2(1997) ! • MPI-2.1(2008) ! • MPI-3 (2012) ! • Repositorio oficial MPI: http://www.mpi-forum.org ! • Información: http://www.mcs.anl.gov/mpi
  • 42. ! Introducción a la computación de Altas Prestaciones Programación en memoria distribuida usando MPI! MPICH MVAPICH Open MPI Cray MPI Tianhe MPI Intel MPI IBM BG/Q MPI IBM PE MPICH IBM Platform SGI MPI Fujitsu MPI Microsoft MPI NB collectives ✔ ✔ ✔ ✔ ✔ ✔ ✔ Q4 ‘14 ✔ ✔ Neighborhood collectives ✔ ✔ ✔ ✔ ✔ ✔ ✔ Q4 ‘14 Q3 ‘15 RMA ✔ ✔ ✔ ✔ ✔ ✔ ✔ Q4 ‘14 Q3 ‘15 Shared memory ✔ ✔ ✔ ✔ ✔ ✔ ✔ Q4 ‘14 Q3 ‘15 Tools Interface ✔ ✔ ✔ (✔) Q4 ‘14 Q3 ‘15 Non-collective comm. create ✔ ✔ ✔ ✔ ✔ ✔ ✔ Q4 ‘14 Q3 ‘15 ✔ F08 Bindings ✔ ✔ ✔ Q4 ‘14 Q3 ‘15 New Datatypes ✔ ✔ ✔ ✔ ✔ ✔ ✔ Q4 ‘14 Q3 ‘15 ✔ Large Counts ✔ ✔ ✔ ✔ ✔ ✔ ✔ Q4 ‘14 Q3 ‘15 Matched Probe ✔ ✔ ✔ ✔ ✔ ✔ ✔ Q4 ‘14 Q3 ‘15 ✔ MPI-3 Espacios en blancos no se tiene información
  • 43. ! Introducción a la computación de Altas Prestaciones Programación en memoria distribuida usando MPI! • Cuando usar MPI! ! • Si la potabilidad es necesaria.! • En el desarrollo de bibliotecas paralelas.! • La interrelación de los datos es dinámica o irregular y no se ajusta a un modelo de datos paralelos. MPI, y en general el esquema de pase de mensajes, facilitan la programación en estos casos. ! • Cuando NO usar MPI! • Si es posible usar HPF (High Performance Fortran) o Fortran 90 paralelo. • Es posible usar una biblioteca de más alto nivel (la cual podría estar escrita en MPI). ! !
  • 44. ! Introducción a la computación de Altas Prestaciones Programación en memoria distribuida usando MPI! Programa con MPI #include <mpi.h> #include <stdio.h> ! int main(int argc, char ** argv) { int rank, size; ! MPI_Init(&argc, &argv); ! MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); printf("I am %d of %dn", rank + 1, size); ! MPI_Finalize(); return 0;! } Basic requirements for an MPI program
  • 45. ! Introducción a la computación de Altas Prestaciones Programación en memoria distribuida usando MPI! • MPI se compone de 129 funciones aunque muchos programas pueden ser escritos solo con 6 funciones.! ! • Forma de ejecutar un programa con funciones MPI. mpif90 -g -o ejecutable.x programa.f90 ! mpirun -np 4 ./ejecutable.x
  • 46. ! Introducción a la computación de Altas Prestaciones Como escribir un programa usando MPI! MPI Basic Send/Receive ! • Simple modelo de comunicación ! ! ! ! ! ! ! ! ! • La aplicación necesita: • Cómo compilar y ejecutarla • Cómo identificar los procesos • Cómo describiré los datos para el paso de mensaje Process 0 Process 1 Send(data) Receive(data)
  • 47. ! ! Introducción a la computación de Altas Prestaciones Programación en memoria distribuida usando MPI! Las funciones de la librería MPI se pueden agrupar en los siguientes puntos:! ! • Información del entorno.! ! • Medición de tiempo. ! ! • Comunicación punto a punto.! ! • Comunicaciones colectivas.! ! • Procesamiento por grupos. ! • Comunicaciones sin bloqueo. ! • Definiendo topología sobre los procesos.!
  • 48. ! Introducción a la computación de Altas Prestaciones MPI: Información del entorno! ¿ Cuántos proceso hay ?! ! ! ! ! ! ! ! ! ! ! ! ¿ Quién soy yo ?! ! ! ! ! ! ! ! ! ! ! ! ! ¿ En dónde estoy corriendo ?!
  • 49. ! Introducción a la computación de Altas Prestaciones MPI: Medición de tiempo! MPI_Wtime: devuelve un punto flotante que representa el número de segundos transcurridos a partir de cierto tiempo pasado, el cual se garantiza que no cambia durante la vida del proceso. Es responsabilidad del usuario hacer la conversión de segundos a otras unidades de tiempo: horas, minutos, etc. ! ! ! ! ! MPI_Wtick: permite saber cuantos segundos hay entre tics sucesivos del reloj. Por ejemplo, si el reloj esta implementado en hardware como un contador que se incrementa cada milisegundo, entonces MPI_Wtick debe devolver 10-3. !
  • 50. ! Introducción a la computación de Altas Prestaciones MPI: Comunicación punto a punto! ¿ A quién se les envía los datos ?! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ¿ Cómo hace el receptor p a r a i d e n t i fi c a r e l mensaje ?!
  • 51. ! Introducción a la computación de Altas Prestaciones MPI: Comunicación punto a punto (2)! ! ! ¿ Qué es lo se envía ?! ! ! ! !
  • 52. ! Introducción a la computación de Altas Prestaciones MPI: Comunicación colectivas! Pueden ser clasificadas en tres grupos: ! ! • Sincronización. Barreras para sincronizar.! ! • Movimiento (transferencias) de datos. Operaciones para difundir, recolectar y esparcir.! ! • Cálculos colectivos. Operaciones para dicción global, tales como suma, máximo, mínimo o cualquier función definida por el usuario.! Memoria CPU CPU CPU CPU Memoria CPU CPU CPU CPU Memoria CPU CPU CPU CPU Memoria CPU CPU CPU CPU network barrera barrera
  • 53. ! Introducción a la computación de Altas Prestaciones MPI: Comunicación colectivas (2)! ¿ Cómo mandar los datos ?!
  • 54. ! Introducción a la computación de Altas Prestaciones MPI: Comunicación colectivas (3)! A B D C B C D A A A A Broadcast Scatter Gather A A P0 P1 P2 P3 P0 P1 P2 P3 ¿ Cómo mandar los datos ?!
  • 55. ! Introducción a la computación de Altas Prestaciones MPI: Comunicación colectivas (4)! ¿ Cómo recuperar los datos de los ! procesadores ?!
  • 56. ! Introducción a la computación de Altas Prestaciones MPI: Comunicación colectivas (4)! P0 P1 P2 P3 P0 P1 P2 P3 A B D C A B D C f(ABCD) f(A) f(AB) f(ABC) f(ABCD) Reduce Scan
  • 57. Información en la WEB ▪ MPI standard : http://www.mpi-forum.org/docs/docs.html ▪ MPICH : http://www.mpich.org ▪ MPICH mailing list: discuss@mpich.org ▪ MPI Forum : http://www.mpi-forum.org/ ! ▪ Otras implementaciones MPI: – MVAPICH (MPICH con InfiniBand) : http://mvapich.cse.ohio-state.edu/ – Intel MPI (MPICH derivative): http://software.intel.com/en-us/intel- mpi-library/ – Microsoft MPI (MPICH derivative) – Open MPI : http://www.open-mpi.org/ ! ▪ Several MPI tutorials can be found on the web ! Introducción a la computación de Altas Prestaciones Programación en memoria distribuida usando MPI!