Download MPI y PETSc para Python

Document related concepts
no text concepts found
Transcript
MPI y PETSc para Python
Lisandro D. Dalcı́n
[email protected]
Mario A. Storti
[email protected]
CONICET / INTEC (CIMEC) - UNL (FICH)
5 de noviembre de 2009
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
1 / 25
Introducción
Contenido
1
Introducción
2
MPI para Python
Funcionalidades
Ejemplos y Eficiencia
3
PETSc para Python
Funcionalidades
Ejemplos y Eficiencia
4
Impacto
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
2 / 25
Introducción
Motivación
Facilitar el accesso a recursos de cómputo en arquitecturas de
memoria distribuida.
Desarrolladores con experiencia.
Usuarios principiantes.
Aplicación de métodos numéricos en problemas complejos de
mediana a gran escala en ciencia e ingenierı́a.
Caracterı́sticas multifı́sica.
Interacción entre múltiples escalas.
Empleo de dominios con contornos móviles.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
3 / 25
Introducción
Motivación
Facilitar el accesso a recursos de cómputo en arquitecturas de
memoria distribuida.
Desarrolladores con experiencia.
Usuarios principiantes.
Aplicación de métodos numéricos en problemas complejos de
mediana a gran escala en ciencia e ingenierı́a.
Caracterı́sticas multifı́sica.
Interacción entre múltiples escalas.
Empleo de dominios con contornos móviles.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
3 / 25
Introducción
Motivación
Facilitar el accesso a recursos de cómputo en arquitecturas de
memoria distribuida.
Desarrolladores con experiencia.
Usuarios principiantes.
Aplicación de métodos numéricos en problemas complejos de
mediana a gran escala en ciencia e ingenierı́a.
Caracterı́sticas multifı́sica.
Interacción entre múltiples escalas.
Empleo de dominios con contornos móviles.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
3 / 25
Introducción
Motivación
Facilitar el accesso a recursos de cómputo en arquitecturas de
memoria distribuida.
Desarrolladores con experiencia.
Usuarios principiantes.
Aplicación de métodos numéricos en problemas complejos de
mediana a gran escala en ciencia e ingenierı́a.
Caracterı́sticas multifı́sica.
Interacción entre múltiples escalas.
Empleo de dominios con contornos móviles.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
3 / 25
Introducción
Motivación
Facilitar el accesso a recursos de cómputo en arquitecturas de
memoria distribuida.
Desarrolladores con experiencia.
Usuarios principiantes.
Aplicación de métodos numéricos en problemas complejos de
mediana a gran escala en ciencia e ingenierı́a.
Caracterı́sticas multifı́sica.
Interacción entre múltiples escalas.
Empleo de dominios con contornos móviles.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
3 / 25
Introducción
Motivación
Facilitar el accesso a recursos de cómputo en arquitecturas de
memoria distribuida.
Desarrolladores con experiencia.
Usuarios principiantes.
Aplicación de métodos numéricos en problemas complejos de
mediana a gran escala en ciencia e ingenierı́a.
Caracterı́sticas multifı́sica.
Interacción entre múltiples escalas.
Empleo de dominios con contornos móviles.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
3 / 25
Introducción
Motivación
Facilitar el accesso a recursos de cómputo en arquitecturas de
memoria distribuida.
Desarrolladores con experiencia.
Usuarios principiantes.
Aplicación de métodos numéricos en problemas complejos de
mediana a gran escala en ciencia e ingenierı́a.
Caracterı́sticas multifı́sica.
Interacción entre múltiples escalas.
Empleo de dominios con contornos móviles.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
3 / 25
Introducción
Motivación
Facilitar el accesso a recursos de cómputo en arquitecturas de
memoria distribuida.
Desarrolladores con experiencia.
Usuarios principiantes.
Aplicación de métodos numéricos en problemas complejos de
mediana a gran escala en ciencia e ingenierı́a.
Caracterı́sticas multifı́sica.
Interacción entre múltiples escalas.
Empleo de dominios con contornos móviles.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
3 / 25
Introducción
Objetivos
1
Desarrollar módulos de extensión para el lenguaje de
programación Python capaces de proveer acceso a las
bibliotecas MPI y PETSc.
2
Aplicar estos desarrollos a la simulación computacional.
Problemas modelados por
ecuaciones diferenciales derivadas parciales.
Problemas relacionados a la
mecánica computacional de fluidos.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
4 / 25
Introducción
Objetivos
1
Desarrollar módulos de extensión para el lenguaje de
programación Python capaces de proveer acceso a las
bibliotecas MPI y PETSc.
2
Aplicar estos desarrollos a la simulación computacional.
Problemas modelados por
ecuaciones diferenciales derivadas parciales.
Problemas relacionados a la
mecánica computacional de fluidos.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
4 / 25
Introducción
Objetivos
1
Desarrollar módulos de extensión para el lenguaje de
programación Python capaces de proveer acceso a las
bibliotecas MPI y PETSc.
2
Aplicar estos desarrollos a la simulación computacional.
Problemas modelados por
ecuaciones diferenciales derivadas parciales.
Problemas relacionados a la
mecánica computacional de fluidos.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
4 / 25
Introducción
Objetivos
1
Desarrollar módulos de extensión para el lenguaje de
programación Python capaces de proveer acceso a las
bibliotecas MPI y PETSc.
2
Aplicar estos desarrollos a la simulación computacional.
Problemas modelados por
ecuaciones diferenciales derivadas parciales.
Problemas relacionados a la
mecánica computacional de fluidos.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
4 / 25
Introducción
Objetivos
1
Desarrollar módulos de extensión para el lenguaje de
programación Python capaces de proveer acceso a las
bibliotecas MPI y PETSc.
2
Aplicar estos desarrollos a la simulación computacional.
Problemas modelados por
ecuaciones diferenciales derivadas parciales.
Problemas relacionados a la
mecánica computacional de fluidos.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
4 / 25
Introducción
Python para Cómputo Cientı́fico
La popularidad de entornos de alto nivel y propósito general
(Maple, Mathematica, MATLAB) ha crecido notablemente.
El lenguaje de programación Python se destaca por su
sencillez, flexibilidad y capacidad para ser extendido en base a
códigos en C, C++, y Fortran.
Python gana adeptos año a año y en forma sostenida dentro
de la comunidad cientı́fica.
NumPy
Cython
SciPy
F2Py
SymPy
SWIG
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
5 / 25
Introducción
Python para Cómputo Cientı́fico
La popularidad de entornos de alto nivel y propósito general
(Maple, Mathematica, MATLAB) ha crecido notablemente.
El lenguaje de programación Python se destaca por su
sencillez, flexibilidad y capacidad para ser extendido en base a
códigos en C, C++, y Fortran.
Python gana adeptos año a año y en forma sostenida dentro
de la comunidad cientı́fica.
NumPy
Cython
SciPy
F2Py
SymPy
SWIG
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
5 / 25
Introducción
Python para Cómputo Cientı́fico
La popularidad de entornos de alto nivel y propósito general
(Maple, Mathematica, MATLAB) ha crecido notablemente.
El lenguaje de programación Python se destaca por su
sencillez, flexibilidad y capacidad para ser extendido en base a
códigos en C, C++, y Fortran.
Python gana adeptos año a año y en forma sostenida dentro
de la comunidad cientı́fica.
NumPy
Cython
SciPy
F2Py
SymPy
SWIG
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
5 / 25
Introducción
Python para Cómputo Cientı́fico
La popularidad de entornos de alto nivel y propósito general
(Maple, Mathematica, MATLAB) ha crecido notablemente.
El lenguaje de programación Python se destaca por su
sencillez, flexibilidad y capacidad para ser extendido en base a
códigos en C, C++, y Fortran.
Python gana adeptos año a año y en forma sostenida dentro
de la comunidad cientı́fica.
NumPy
Cython
SciPy
F2Py
SymPy
SWIG
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
5 / 25
Introducción
Python para Cómputo Cientı́fico
La popularidad de entornos de alto nivel y propósito general
(Maple, Mathematica, MATLAB) ha crecido notablemente.
El lenguaje de programación Python se destaca por su
sencillez, flexibilidad y capacidad para ser extendido en base a
códigos en C, C++, y Fortran.
Python gana adeptos año a año y en forma sostenida dentro
de la comunidad cientı́fica.
NumPy
Cython
SciPy
F2Py
SymPy
SWIG
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
5 / 25
Introducción
Python para Cómputo Cientı́fico
La popularidad de entornos de alto nivel y propósito general
(Maple, Mathematica, MATLAB) ha crecido notablemente.
El lenguaje de programación Python se destaca por su
sencillez, flexibilidad y capacidad para ser extendido en base a
códigos en C, C++, y Fortran.
Python gana adeptos año a año y en forma sostenida dentro
de la comunidad cientı́fica.
NumPy
Cython
SciPy
F2Py
SymPy
SWIG
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
5 / 25
Introducción
Python para Cómputo Cientı́fico
La popularidad de entornos de alto nivel y propósito general
(Maple, Mathematica, MATLAB) ha crecido notablemente.
El lenguaje de programación Python se destaca por su
sencillez, flexibilidad y capacidad para ser extendido en base a
códigos en C, C++, y Fortran.
Python gana adeptos año a año y en forma sostenida dentro
de la comunidad cientı́fica.
NumPy
Cython
SciPy
F2Py
SymPy
SWIG
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
5 / 25
MPI para Python
Contenido
1
Introducción
2
MPI para Python
Funcionalidades
Ejemplos y Eficiencia
3
PETSc para Python
Funcionalidades
Ejemplos y Eficiencia
4
Impacto
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
6 / 25
MPI para Python
Funcionalidades
¿Qué es MPI?
Sistema de paso de mensajes estandarizado y multiplataforma.
MPI-1 (1994, 1995, 1997), MPI-2 (1997, 2008, 2009).
Especifica la sintaxis y semántica de un conjunto de funciones
de biblioteca.
Permite desarrollar aplicaciones paralelas en los principales
lenguajes compilados utilizados en la comunidad cientı́fica.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
7 / 25
MPI para Python
Funcionalidades
¿Qué es MPI?
Sistema de paso de mensajes estandarizado y multiplataforma.
MPI-1 (1994, 1995, 1997), MPI-2 (1997, 2008, 2009).
Especifica la sintaxis y semántica de un conjunto de funciones
de biblioteca.
Permite desarrollar aplicaciones paralelas en los principales
lenguajes compilados utilizados en la comunidad cientı́fica.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
7 / 25
MPI para Python
Funcionalidades
¿Qué es MPI?
Sistema de paso de mensajes estandarizado y multiplataforma.
MPI-1 (1994, 1995, 1997), MPI-2 (1997, 2008, 2009).
Especifica la sintaxis y semántica de un conjunto de funciones
de biblioteca.
Permite desarrollar aplicaciones paralelas en los principales
lenguajes compilados utilizados en la comunidad cientı́fica.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
7 / 25
MPI para Python
Funcionalidades
¿Qué es MPI?
Sistema de paso de mensajes estandarizado y multiplataforma.
MPI-1 (1994, 1995, 1997), MPI-2 (1997, 2008, 2009).
Especifica la sintaxis y semántica de un conjunto de funciones
de biblioteca.
Permite desarrollar aplicaciones paralelas en los principales
lenguajes compilados utilizados en la comunidad cientı́fica.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
7 / 25
MPI para Python
Funcionalidades
¿Qué es MPI?
Sistema de paso de mensajes estandarizado y multiplataforma.
MPI-1 (1994, 1995, 1997), MPI-2 (1997, 2008, 2009).
Especifica la sintaxis y semántica de un conjunto de funciones
de biblioteca.
Permite desarrollar aplicaciones paralelas en los principales
lenguajes compilados utilizados en la comunidad cientı́fica.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
7 / 25
MPI para Python
Funcionalidades
¿Qué provee MPI?
MPI-1
Grupos de procesos y dominios de comunicación.
Operaciones de comunicación punto a punto.
Operaciones de comunicación colectiva.
MPI-2
Operaciones de entrada/salida en paralelo.
Manejo dinámico de procesos.
Operaciones de acceso remoto a memoria.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
8 / 25
MPI para Python
Funcionalidades
¿Qué provee MPI?
MPI-1
Grupos de procesos y dominios de comunicación.
Operaciones de comunicación punto a punto.
Operaciones de comunicación colectiva.
MPI-2
Operaciones de entrada/salida en paralelo.
Manejo dinámico de procesos.
Operaciones de acceso remoto a memoria.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
8 / 25
MPI para Python
Funcionalidades
¿Qué provee MPI?
MPI-1
Grupos de procesos y dominios de comunicación.
Operaciones de comunicación punto a punto.
Operaciones de comunicación colectiva.
MPI-2
Operaciones de entrada/salida en paralelo.
Manejo dinámico de procesos.
Operaciones de acceso remoto a memoria.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
8 / 25
MPI para Python
Funcionalidades
¿Qué provee MPI?
MPI-1
Grupos de procesos y dominios de comunicación.
Operaciones de comunicación punto a punto.
Operaciones de comunicación colectiva.
MPI-2
Operaciones de entrada/salida en paralelo.
Manejo dinámico de procesos.
Operaciones de acceso remoto a memoria.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
8 / 25
MPI para Python
Funcionalidades
¿Qué provee MPI?
MPI-1
Grupos de procesos y dominios de comunicación.
Operaciones de comunicación punto a punto.
Operaciones de comunicación colectiva.
MPI-2
Operaciones de entrada/salida en paralelo.
Manejo dinámico de procesos.
Operaciones de acceso remoto a memoria.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
8 / 25
MPI para Python
Funcionalidades
¿Qué provee MPI?
MPI-1
Grupos de procesos y dominios de comunicación.
Operaciones de comunicación punto a punto.
Operaciones de comunicación colectiva.
MPI-2
Operaciones de entrada/salida en paralelo.
Manejo dinámico de procesos.
Operaciones de acceso remoto a memoria.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
8 / 25
MPI para Python
Funcionalidades
¿Qué provee MPI?
MPI-1
Grupos de procesos y dominios de comunicación.
Operaciones de comunicación punto a punto.
Operaciones de comunicación colectiva.
MPI-2
Operaciones de entrada/salida en paralelo.
Manejo dinámico de procesos.
Operaciones de acceso remoto a memoria.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
8 / 25
MPI para Python
Funcionalidades
¿Qué provee MPI?
MPI-1
Grupos de procesos y dominios de comunicación.
Operaciones de comunicación punto a punto.
Operaciones de comunicación colectiva.
MPI-2
Operaciones de entrada/salida en paralelo.
Manejo dinámico de procesos.
Operaciones de acceso remoto a memoria.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
8 / 25
MPI para Python
Funcionalidades
¿Qué provee MPI?
MPI-1
Grupos de procesos y dominios de comunicación.
Operaciones de comunicación punto a punto.
Operaciones de comunicación colectiva.
MPI-2
Operaciones de entrada/salida en paralelo.
Manejo dinámico de procesos.
Operaciones de acceso remoto a memoria.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
8 / 25
MPI para Python
Funcionalidades
Implementación de MPI para Python
Provee acceso a todas las funcionalidades disponibles en
MPI-1/MPI-2.
Interfaz diseñada en base a la sintaxis y semántica de la
especificación MPI-2 para el lenguaje C++ .
Soporta dos modos de comunicación.
Objetos de tipo general se comunican mediante un proceso
automático de serialización/deserialización.
Objetos de tipo especial (arreglos numéricos) se comunican en
forma directa (mayor eficiencia).
Implementación basada en Cython.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
9 / 25
MPI para Python
Funcionalidades
Implementación de MPI para Python
Provee acceso a todas las funcionalidades disponibles en
MPI-1/MPI-2.
Interfaz diseñada en base a la sintaxis y semántica de la
especificación MPI-2 para el lenguaje C++ .
Soporta dos modos de comunicación.
Objetos de tipo general se comunican mediante un proceso
automático de serialización/deserialización.
Objetos de tipo especial (arreglos numéricos) se comunican en
forma directa (mayor eficiencia).
Implementación basada en Cython.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
9 / 25
MPI para Python
Funcionalidades
Implementación de MPI para Python
Provee acceso a todas las funcionalidades disponibles en
MPI-1/MPI-2.
Interfaz diseñada en base a la sintaxis y semántica de la
especificación MPI-2 para el lenguaje C++ .
Soporta dos modos de comunicación.
Objetos de tipo general se comunican mediante un proceso
automático de serialización/deserialización.
Objetos de tipo especial (arreglos numéricos) se comunican en
forma directa (mayor eficiencia).
Implementación basada en Cython.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
9 / 25
MPI para Python
Funcionalidades
Implementación de MPI para Python
Provee acceso a todas las funcionalidades disponibles en
MPI-1/MPI-2.
Interfaz diseñada en base a la sintaxis y semántica de la
especificación MPI-2 para el lenguaje C++ .
Soporta dos modos de comunicación.
Objetos de tipo general se comunican mediante un proceso
automático de serialización/deserialización.
Objetos de tipo especial (arreglos numéricos) se comunican en
forma directa (mayor eficiencia).
Implementación basada en Cython.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
9 / 25
MPI para Python
Funcionalidades
Implementación de MPI para Python
Provee acceso a todas las funcionalidades disponibles en
MPI-1/MPI-2.
Interfaz diseñada en base a la sintaxis y semántica de la
especificación MPI-2 para el lenguaje C++ .
Soporta dos modos de comunicación.
Objetos de tipo general se comunican mediante un proceso
automático de serialización/deserialización.
Objetos de tipo especial (arreglos numéricos) se comunican en
forma directa (mayor eficiencia).
Implementación basada en Cython.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
9 / 25
MPI para Python
Funcionalidades
Implementación de MPI para Python
Provee acceso a todas las funcionalidades disponibles en
MPI-1/MPI-2.
Interfaz diseñada en base a la sintaxis y semántica de la
especificación MPI-2 para el lenguaje C++ .
Soporta dos modos de comunicación.
Objetos de tipo general se comunican mediante un proceso
automático de serialización/deserialización.
Objetos de tipo especial (arreglos numéricos) se comunican en
forma directa (mayor eficiencia).
Implementación basada en Cython.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
9 / 25
MPI para Python
Funcionalidades
Implementación de MPI para Python
Provee acceso a todas las funcionalidades disponibles en
MPI-1/MPI-2.
Interfaz diseñada en base a la sintaxis y semántica de la
especificación MPI-2 para el lenguaje C++ .
Soporta dos modos de comunicación.
Objetos de tipo general se comunican mediante un proceso
automático de serialización/deserialización.
Objetos de tipo especial (arreglos numéricos) se comunican en
forma directa (mayor eficiencia).
Implementación basada en Cython.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
9 / 25
MPI para Python
Ejemplos y Eficiencia
Broadcast de objetos de Python
from mpi4py import MPI
comm = MPI.COMM_WORLD
rank = comm.Get_rank()
if rank == 0:
data = {’key1’ : [7, 2.72, 2+3j],
’key2’ : ( ’abc’, ’xyz’)}
else:
data = None
data = comm.bcast(data, root=0)
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
10 / 25
MPI para Python
Ejemplos y Eficiencia
Comunicación Punto a Punto (Send–Recv)
from mpi4py import MPI
from numpy import empty, float64
comm = MPI.COMM_WORLD
rank = comm.Get_rank()
array1 = empty(2**16, dtype=float64)
array2 = empty(2**16, dtype=float64)
wt = MPI.Wtime()
if rank == 0:
comm.Send([array1,
comm.Recv([array2,
elif rank == 1:
comm.Recv([array2,
comm.Send([array1,
wt = MPI.Wtime() - wt
L. Dalcı́n, M. Storti (CIMEC)
MPI.DOUBLE], 1, tag=0)
MPI.DOUBLE], 1, tag=0)
MPI.DOUBLE], 0, tag=0)
MPI.DOUBLE], 0, tag=0)
MPI y PETSc para Python
5 de noviembre de 2009
11 / 25
MPI para Python
100
C
Python (buffer)
Python (pickle)
80
Throughput [MB/s]
Ejemplos y Eficiencia
60
40
20
0
0
10
L. Dalcı́n, M. Storti (CIMEC)
1
10
2
3
4
10
10
10
Array Size [bytes/8]
MPI y PETSc para Python
5
10
6
10
5 de noviembre de 2009
12 / 25
MPI para Python
50
Ejemplos y Eficiencia
Python (buffer)
Python (pickle)
Overhead [%]
40
30
20
10
0
0
10
L. Dalcı́n, M. Storti (CIMEC)
1
10
2
3
4
10
10
10
Array Size [bytes/8]
MPI y PETSc para Python
5
10
6
10
5 de noviembre de 2009
13 / 25
PETSc para Python
Contenido
1
Introducción
2
MPI para Python
Funcionalidades
Ejemplos y Eficiencia
3
PETSc para Python
Funcionalidades
Ejemplos y Eficiencia
4
Impacto
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
14 / 25
PETSc para Python
Funcionalidades
¿Qué es PETSc?
PETSc es un conjunto de algoritmos y estructuras de datos
para la solución de problemas en ciencia e ingenierı́a.
Aplicable a problemas modelados por ecuaciones diferenciales
en derivadas parciales,
de gran escala, que requieren cómputo en paralelo.
PETSc emplea MPI para la comunicación entre procesos.
PETSc es implementado en C, es igualmente utilizable en
C++ , y también provee una interfaz para Fortran 77/90.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
15 / 25
PETSc para Python
Funcionalidades
¿Qué es PETSc?
PETSc es un conjunto de algoritmos y estructuras de datos
para la solución de problemas en ciencia e ingenierı́a.
Aplicable a problemas modelados por ecuaciones diferenciales
en derivadas parciales,
de gran escala, que requieren cómputo en paralelo.
PETSc emplea MPI para la comunicación entre procesos.
PETSc es implementado en C, es igualmente utilizable en
C++ , y también provee una interfaz para Fortran 77/90.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
15 / 25
PETSc para Python
Funcionalidades
¿Qué es PETSc?
PETSc es un conjunto de algoritmos y estructuras de datos
para la solución de problemas en ciencia e ingenierı́a.
Aplicable a problemas modelados por ecuaciones diferenciales
en derivadas parciales,
de gran escala, que requieren cómputo en paralelo.
PETSc emplea MPI para la comunicación entre procesos.
PETSc es implementado en C, es igualmente utilizable en
C++ , y también provee una interfaz para Fortran 77/90.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
15 / 25
PETSc para Python
Funcionalidades
¿Qué es PETSc?
PETSc es un conjunto de algoritmos y estructuras de datos
para la solución de problemas en ciencia e ingenierı́a.
Aplicable a problemas modelados por ecuaciones diferenciales
en derivadas parciales,
de gran escala, que requieren cómputo en paralelo.
PETSc emplea MPI para la comunicación entre procesos.
PETSc es implementado en C, es igualmente utilizable en
C++ , y también provee una interfaz para Fortran 77/90.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
15 / 25
PETSc para Python
Funcionalidades
¿Qué es PETSc?
PETSc es un conjunto de algoritmos y estructuras de datos
para la solución de problemas en ciencia e ingenierı́a.
Aplicable a problemas modelados por ecuaciones diferenciales
en derivadas parciales,
de gran escala, que requieren cómputo en paralelo.
PETSc emplea MPI para la comunicación entre procesos.
PETSc es implementado en C, es igualmente utilizable en
C++ , y también provee una interfaz para Fortran 77/90.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
15 / 25
PETSc para Python
Funcionalidades
¿Qué provee PETSc?
Vec: manejo de vectores secuenciales/paralelos y operaciones
básicas de álgebra lineal.
Mat: manejo de matrices secuenciales/paralelas en diversos
formatos (densas, ralas, ralas por bloque).
KSP/PC: métodos iterativos basados en espacios de Krylov y
precondicionadores basados en diferentes técnicas
(factorización, descomposición de dominios, multigrilla
algebraico y aproximaciones ralas a la inversa)
SNES: implementaciones del método de Newton, con técnicas
para convergencia global (búsqueda lineal, región de
confianza),y técnicas para diferenciación automática.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
16 / 25
PETSc para Python
Funcionalidades
¿Qué provee PETSc?
Vec: manejo de vectores secuenciales/paralelos y operaciones
básicas de álgebra lineal.
Mat: manejo de matrices secuenciales/paralelas en diversos
formatos (densas, ralas, ralas por bloque).
KSP/PC: métodos iterativos basados en espacios de Krylov y
precondicionadores basados en diferentes técnicas
(factorización, descomposición de dominios, multigrilla
algebraico y aproximaciones ralas a la inversa)
SNES: implementaciones del método de Newton, con técnicas
para convergencia global (búsqueda lineal, región de
confianza),y técnicas para diferenciación automática.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
16 / 25
PETSc para Python
Funcionalidades
¿Qué provee PETSc?
Vec: manejo de vectores secuenciales/paralelos y operaciones
básicas de álgebra lineal.
Mat: manejo de matrices secuenciales/paralelas en diversos
formatos (densas, ralas, ralas por bloque).
KSP/PC: métodos iterativos basados en espacios de Krylov y
precondicionadores basados en diferentes técnicas
(factorización, descomposición de dominios, multigrilla
algebraico y aproximaciones ralas a la inversa)
SNES: implementaciones del método de Newton, con técnicas
para convergencia global (búsqueda lineal, región de
confianza),y técnicas para diferenciación automática.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
16 / 25
PETSc para Python
Funcionalidades
¿Qué provee PETSc?
Vec: manejo de vectores secuenciales/paralelos y operaciones
básicas de álgebra lineal.
Mat: manejo de matrices secuenciales/paralelas en diversos
formatos (densas, ralas, ralas por bloque).
KSP/PC: métodos iterativos basados en espacios de Krylov y
precondicionadores basados en diferentes técnicas
(factorización, descomposición de dominios, multigrilla
algebraico y aproximaciones ralas a la inversa)
SNES: implementaciones del método de Newton, con técnicas
para convergencia global (búsqueda lineal, región de
confianza),y técnicas para diferenciación automática.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
16 / 25
PETSc para Python
Funcionalidades
¿Qué provee PETSc?
Vec: manejo de vectores secuenciales/paralelos y operaciones
básicas de álgebra lineal.
Mat: manejo de matrices secuenciales/paralelas en diversos
formatos (densas, ralas, ralas por bloque).
KSP/PC: métodos iterativos basados en espacios de Krylov y
precondicionadores basados en diferentes técnicas
(factorización, descomposición de dominios, multigrilla
algebraico y aproximaciones ralas a la inversa)
SNES: implementaciones del método de Newton, con técnicas
para convergencia global (búsqueda lineal, región de
confianza),y técnicas para diferenciación automática.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
16 / 25
PETSc para Python
Funcionalidades
Implementación de PETSc para Python
PETSc para Python provee acceso a la mayorı́a de las
funcionalidades disponibles en PETSc.
La interfaz de usuario de PETSc para Python es
completamente orientada a objetos, más fácil de utilizar que
la interfaz C nativa.
Implementación basada en Cython.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
17 / 25
PETSc para Python
Funcionalidades
Implementación de PETSc para Python
PETSc para Python provee acceso a la mayorı́a de las
funcionalidades disponibles en PETSc.
La interfaz de usuario de PETSc para Python es
completamente orientada a objetos, más fácil de utilizar que
la interfaz C nativa.
Implementación basada en Cython.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
17 / 25
PETSc para Python
Funcionalidades
Implementación de PETSc para Python
PETSc para Python provee acceso a la mayorı́a de las
funcionalidades disponibles en PETSc.
La interfaz de usuario de PETSc para Python es
completamente orientada a objetos, más fácil de utilizar que
la interfaz C nativa.
Implementación basada en Cython.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
17 / 25
PETSc para Python
Funcionalidades
Implementación de PETSc para Python
PETSc para Python provee acceso a la mayorı́a de las
funcionalidades disponibles en PETSc.
La interfaz de usuario de PETSc para Python es
completamente orientada a objetos, más fácil de utilizar que
la interfaz C nativa.
Implementación basada en Cython.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
17 / 25
PETSc para Python
Ejemplos y Eficiencia
Problema de Poisson en 3D
−∆φ = 1 sobre Ω = (0, 1)3
φ = 0 en Γ = 0, 1
φhi−1,j,k − 2φhi,j,k + φhi+1,j,k
L (φ ) i,j,k =
+
h12
φhi,j−1,k − 2φhi,j,k + φhi,j+1,k
+
+
h22
φhi,j,k−1 − 2φhi,j,k + φhi,j,k+1
+
h32
h
L. Dalcı́n, M. Storti (CIMEC)
h
MPI y PETSc para Python
5 de noviembre de 2009
18 / 25
PETSc para Python
! file: del2lib.f90
! to build a Python module, use this:
! $$ f2py -m del2lib -c del2lib.f90
subroutine del2apply (n, F, x, y)
!f2py intent(hide) :: n=shape(F,0)-2
integer
:: n
real(kind=8) :: F(0:n+1,0:n+1,0:n+1)
real(kind=8) :: x(n,n,n)
real(kind=8) :: y(n,n,n)
F(1:n,1:n,1:n) = x
y(:,:,:) = 6.0 * F(1:n,1:n,1:n)
- F(0:n-1,1:n,1:n)
- F(2:n+1,1:n,1:n)
- F(1:n,0:n-1,1:n)
- F(1:n,2:n+1,1:n)
- F(1:n,1:n,0:n-1)
- F(1:n,1:n,2:n+1)
end subroutine del2apply
L. Dalcı́n, M. Storti (CIMEC)
&
&
&
&
&
&
Ejemplos y Eficiencia
# file: del2mat.py
from numpy import zeros
from del2lib import del2apply
class Del2Mat:
def __init__(self, n):
self.N = (n, n, n)
self.F = zeros([n+2]*3)
def mult(self, x, y):
"y <- A * x"
N, F = self.N, self.F
# vectors --> 3D arrays
xx = x[...].reshape(N)
yy = y[...].reshape(N)
# call Fortran subroutine
del2apply(F.T, xx.T, yy.T)
MPI y PETSc para Python
5 de noviembre de 2009
19 / 25
PETSc para Python
! file: del2lib.f90
! to build a Python module, use this:
! $$ f2py -m del2lib -c del2lib.f90
subroutine del2apply (n, F, x, y)
!f2py intent(hide) :: n=shape(F,0)-2
integer
:: n
real(kind=8) :: F(0:n+1,0:n+1,0:n+1)
real(kind=8) :: x(n,n,n)
real(kind=8) :: y(n,n,n)
F(1:n,1:n,1:n) = x
y(:,:,:) = 6.0 * F(1:n,1:n,1:n)
- F(0:n-1,1:n,1:n)
- F(2:n+1,1:n,1:n)
- F(1:n,0:n-1,1:n)
- F(1:n,2:n+1,1:n)
- F(1:n,1:n,0:n-1)
- F(1:n,1:n,2:n+1)
end subroutine del2apply
L. Dalcı́n, M. Storti (CIMEC)
&
&
&
&
&
&
Ejemplos y Eficiencia
# file: del2mat.py
from numpy import zeros
from del2lib import del2apply
class Del2Mat:
def __init__(self, n):
self.N = (n, n, n)
self.F = zeros([n+2]*3)
def mult(self, x, y):
"y <- A * x"
N, F = self.N, self.F
# vectors --> 3D arrays
xx = x[...].reshape(N)
yy = y[...].reshape(N)
# call Fortran subroutine
del2apply(F.T, xx.T, yy.T)
MPI y PETSc para Python
5 de noviembre de 2009
19 / 25
PETSc para Python
! file: del2lib.f90
! to build a Python module, use this:
! $$ f2py -m del2lib -c del2lib.f90
subroutine del2apply (n, F, x, y)
!f2py intent(hide) :: n=shape(F,0)-2
integer
:: n
real(kind=8) :: F(0:n+1,0:n+1,0:n+1)
real(kind=8) :: x(n,n,n)
real(kind=8) :: y(n,n,n)
F(1:n,1:n,1:n) = x
y(:,:,:) = 6.0 * F(1:n,1:n,1:n)
- F(0:n-1,1:n,1:n)
- F(2:n+1,1:n,1:n)
- F(1:n,0:n-1,1:n)
- F(1:n,2:n+1,1:n)
- F(1:n,1:n,0:n-1)
- F(1:n,1:n,2:n+1)
end subroutine del2apply
L. Dalcı́n, M. Storti (CIMEC)
&
&
&
&
&
&
Ejemplos y Eficiencia
# file: del2mat.py
from numpy import zeros
from del2lib import del2apply
class Del2Mat:
def __init__(self, n):
self.N = (n, n, n)
self.F = zeros([n+2]*3)
def mult(self, x, y):
"y <- A * x"
N, F = self.N, self.F
# vectors --> 3D arrays
xx = x[...].reshape(N)
yy = y[...].reshape(N)
# call Fortran subroutine
del2apply(F.T, xx.T, yy.T)
MPI y PETSc para Python
5 de noviembre de 2009
19 / 25
PETSc para Python
from petsc4py import PETSc
from del2mat import Del2Mat
#
#
n
h
# setup linear system vectors
x, b = A.getVecs()
b.set(1/h**2)
number of nodes in each direction
excluding those at the boundary
= 32
= 1.0/(n+1) # grid spacing
# setup linear system matrix
A = PETSc.Mat().create()
A.setSizes([n**3, n**3])
A.setType(’python’)
context = Del2Mat(n)
A.setPythonContext(context)
L. Dalcı́n, M. Storti (CIMEC)
Ejemplos y Eficiencia
# setup Krylov solver
ksp = PETSc.KSP().create()
pc = ksp.getPC()
ksp.setType(’cg’)
pc.setType(’none’)
ksp.setFromOptions()
# iteratively solve linear
# system of equations A*x=b
ksp.setOperators(A)
ksp.solve(b, x)
MPI y PETSc para Python
5 de noviembre de 2009
20 / 25
PETSc para Python
Ejemplos y Eficiencia
45
CG
GMRES(30)
40
Overhead [%]
35
30
25
20
15
10
5
0 3
10
3
15
L. Dalcı́n, M. Storti (CIMEC)
3
20
3
25
3
3
3
30
35
40
Unknowns [#]
MPI y PETSc para Python
3
45
3
50
3
55
5 de noviembre de 2009
21 / 25
Impacto
Contenido
1
Introducción
2
MPI para Python
Funcionalidades
Ejemplos y Eficiencia
3
PETSc para Python
Funcionalidades
Ejemplos y Eficiencia
4
Impacto
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
22 / 25
Impacto
Descargas
MPI para Python
Versión
1.1
1.0
0.x
Descargas
1117
1257
2000
http://mpi4py.googlecode.com
PETSc para Python
Versión
1.0.2
1.0.1
0.7.x
Descargas
480
420
2800
http://petsc4py.googlecode.com
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
23 / 25
Impacto
Proyectos
NEURON (M. Hines, Yale)
yt/Enzo (M. Turk, Stanford)
pNbody (Y. Revaz, EPFL, Suiza)
Synergia 3D (J. Amundson, Fermilab)
IPython (B. Granger, Cal Poly)
Ghostscript (R. Giles, Artifex Sortware)
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
24 / 25
Impacto
Proyectos
NEURON (M. Hines, Yale)
yt/Enzo (M. Turk, Stanford)
pNbody (Y. Revaz, EPFL, Suiza)
Synergia 3D (J. Amundson, Fermilab)
IPython (B. Granger, Cal Poly)
Ghostscript (R. Giles, Artifex Sortware)
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
24 / 25
Impacto
Proyectos
NEURON (M. Hines, Yale)
yt/Enzo (M. Turk, Stanford)
pNbody (Y. Revaz, EPFL, Suiza)
Synergia 3D (J. Amundson, Fermilab)
IPython (B. Granger, Cal Poly)
Ghostscript (R. Giles, Artifex Sortware)
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
24 / 25
Impacto
Proyectos
NEURON (M. Hines, Yale)
yt/Enzo (M. Turk, Stanford)
pNbody (Y. Revaz, EPFL, Suiza)
Synergia 3D (J. Amundson, Fermilab)
IPython (B. Granger, Cal Poly)
Ghostscript (R. Giles, Artifex Sortware)
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
24 / 25
Impacto
Proyectos
NEURON (M. Hines, Yale)
yt/Enzo (M. Turk, Stanford)
pNbody (Y. Revaz, EPFL, Suiza)
Synergia 3D (J. Amundson, Fermilab)
IPython (B. Granger, Cal Poly)
Ghostscript (R. Giles, Artifex Sortware)
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
24 / 25
Impacto
Proyectos
NEURON (M. Hines, Yale)
yt/Enzo (M. Turk, Stanford)
pNbody (Y. Revaz, EPFL, Suiza)
Synergia 3D (J. Amundson, Fermilab)
IPython (B. Granger, Cal Poly)
Ghostscript (R. Giles, Artifex Sortware)
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
24 / 25
Impacto
Proyectos
NEURON (M. Hines, Yale)
yt/Enzo (M. Turk, Stanford)
pNbody (Y. Revaz, EPFL, Suiza)
Synergia 3D (J. Amundson, Fermilab)
IPython (B. Granger, Cal Poly)
Ghostscript (R. Giles, Artifex Sortware)
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
24 / 25
Impacto
Muchas Gracias.
L. Dalcı́n, M. Storti (CIMEC)
MPI y PETSc para Python
5 de noviembre de 2009
25 / 25