Download MPI y PETSc para Python
Document related concepts
no text concepts found
Transcript
MPI y PETSc para Python Lisandro D. Dalcı́n dalcinl@gmail.com Mario A. Storti mario.storti@gmail.com 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