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

Post on 17-Aug-2015

44 views 0 download

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

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: 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!