Date post: | 17-Aug-2015 |
Category: |
Science |
Upload: | tomas-morales |
View: | 42 times |
Download: | 0 times |
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
PN + 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)
CPUMEMORIA CPU
CPUMEMORIA CPU
CPUMEMORIA CPU
CPUMEMORIA 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
MemoriaCPU
CPU
GPU
GPU
MemoriaCPU
CPU
GPU
GPUMemoria
CPU
CPU
GPU
GPU
MemoriaCPU
CPU
GPU
GPU
MemoriaCPU
CPU
CPU
CPU
MemoriaCPU
CPU
CPU
CPUMemoria
CPU
CPU
CPU
CPU
MemoriaCPU
CPU
CPU
CPUnetwork
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íasVariables 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 1Thread
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 = 1a = 2
b = 1a = ?
b = 1a = ?
b = 1a = ?
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
MPIMicrosoft
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 %d\n", 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.!
MemoriaCPU
CPU
CPU
CPU
MemoriaCPU
CPU
CPU
CPUMemoria
CPU
CPU
CPU
CPU
MemoriaCPU
CPU
CPU
CPU
networkbarrera
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: [email protected]
▪ 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!