Publicado el 6 de Junio del 2021
640 visualizaciones desde el 6 de Junio del 2021
513,5 KB
30 paginas
Creado hace 16a (03/08/2008)
Python en Supercomputación
Charla introductoria
Guillem Borrell i Nogueras
ETSIA, Octubre 2007
Preguntas...
I ¾Por qué se llama Python?
I ¾Quién usa Python?
I ¾Para qué sirve Python?
I Principales características de Python
I ¾Por qué Python se está volviendo tan popular?
I ¾Por qué Python y no otro lenguaje?
I ¾Qué puede ofrecer Python al HPC?
I Inconvenientes de Python
I Ejemplos
¾Por qué se llama Python?
Python debe su nombre a...
Monty Python
¾Quién usa Python?
¾Para qué sirve Python?
Prácticamente para cualquier cosa que se nos pueda ocurrir
Desde páginas web...
Plone, Zope
...A utilidades para bioinformática
Pymol
Principales características de Python
I Software Libre (Licencia estilo BSD)
I Interpretado
I Interactivo
I Multiparadigma
I Procedimental
I Modular
I Orientado a Objetos
I Multiplataforma
I Especicación especialmente corta (IronPython, Jython, PyPy,
Stackless)
I Incluye las pilas
I ...
¾Por qué Python se está volviendo tan popular
I Fácil de aprender
I Fácil de ampliar
I Consistente por diseño
I Impone un buen estilo de programación
I Soporta todas las prácticas propuestas por XP, Agile.
Porque es divertido
¾Por qué Python y no otro lenguaje?
I Fácilmente extensible
I CPython, escrito en ANSI C
I Duck Typing (VS. Java y C++)
I Software Libre
I Excelente documentación
¾Qué pinta tiene código escrito en Python?
Todo es un objeto
guillem@aiguaviva ~ $ python
Python 2.4.4 (#1, Sep 25 2007, 21:44:53)
[GCC 4.1.2 (Gentoo 4.1.2)] on linux2
Type "help", "copyright", "credits" or "license" ...
>>> import cmath
>>> i=cmath.sqrt(-1) #Los namespaces son objetos
>>> i.conjugate() #Los números son objetos
-1j
>>> i.imag
1.0
>>> i.real
0.0
>>> i+=3
>>> i
(3+1j)
Denir funciones es muy fácil
return numero+1
>>> def sumauno(numero):
...
...
>>> sumauno(i)
(4+1j)
I No hay llaves ni ends, los niveles se denen por el sangrado.
Documentación a la Matlab
"""Esta es una función documentada, a diferencia
de Matlab la documentación de las funciones de
Python es extraíble y formateable"""
pass
>>> def docfunc():
...
...
...
...
...
>>> help(docfunc)
Help on function docfunc in module __main__:
docfunc()
Esta es una función documentada, a diferencia de
Matlab la documentación de las funciones de Python
es extraíble y formateable
Una clase llamada pato
>>> class pato:
def reproducete(self):
cantidad += 1
cantidad = 1
def haz_cua(self):
print "cua!"
...
...
...
...
...
...
...
>>> estoesunpato=pato() #instancia de pato
>>> estoesunpato.cantidad
1
>>> estoesunpato.haz_cua()
cua!
Duck Typing
Si algo anda como un pato y hace cua como un pato para mi va a
ser un pato.
def haz_cua(self):
>>> estoesunpato=pato() #instancia de pato
>>> cuaqueador(estoesunpato)
cua!
>>> class guillem:
...
...
...
>>> falsopato=guillem() #ese soy yo
>>> cuaqueador(falsopato)
cua!
>>> isinstance(falsopato,pato)
False
print "cua!"
Para la función cuaqueador yo soy tan pato como un pato.
Y mucho más...
¾Qué puede ofrecer Python al HPC?
Python es lento, ∼ 10×C; Python pretende completar C y Fortran,
no sustituirlos.
Sirve para...
Manejar la Complejidad
Wrappers, Interfaces, Prototipado, Scripting...
Inconvenientes de Python (para HPC)
I Diseño Single Thread (GIL)!
I Implementación limpia vs. optimizada
I Librería estándar escrita en python (20 %-30 % C)
I Versatilidad vs. potencia.
I No hay una implementación propia de Arrays y Buers
I Es interpretado (¾?)
Soluciones a los inconvenientes
I Inlining (Weave)
I Extending (ctypes)
I Paralelo (PyMPI, ctypes, ParallelPython)
I PyPy
I Stackless
I Numpy, Scipy...
Numpy
Es una extensión de Python que soporta arrays n-dimensionales
Es una maravilla, verdad verdadera. Lástima que no se pueda
demostrar en una transparencia
Una pequeña introducción
>>> import numpy as N
>>> x=N.array([[1,2,3,2],[2,3,4,3],
[2,3,4,3],[3,2,3,4]],'d')
>>> N.fft.rfft2(x)
array([[ 44.+0.j,
[ -4.+0.j,
[ -4.+0.j,
[ -4.+0.j,
>>> x.transpose()
array([[ 1.,
-6.+2.j,
-2.+2.j,
-2.-2.j,
2.-2.j,
0.+0.j],
0.+0.j],
0.+0.j],
0.+0.j]])
2., 2.,
[ 2., 3., 3.,
[ 3., 4., 4.,
[ 2., 3., 3.,
3.],
2.],
3.],
4.]])
¾Cuál es la idea entonces?
Introducir Python en HPC ⇔ Crear una aplicación multilenguaje.
rendimiento
Python + Fortran,C
Fortran, C
Python
Matlab
complejidad
¾Qué se gana añadiendo Python a C, Fortran?
I Namespaces
I Abstracción (Modularidad, OO)
I Añadir interactividad
I Autodocumentación
I Crear cajas negras
I Si no tengo que saberlo no me lo cuentes
I Si no tengo que verlo no me lo enseñes
I Si algo funciona bien, recíclalo
¾Cómo se añade Python a C y Fortran?
Haciendo Wrappers
C, Fortran Wrapper
Python
Objetivo: crear un Matlab c muy personalizado.
I Ventajas
I Añaden interactividad, potencia, versatilidad...
I No hay que repetirlos
I Inconvenientes
I Más decisiones de diseño
I Requieren más esfuerzo
¾Por qué Python?
Porque en muchos casos:
I Los wrappers ya estarán hechos (lapack, blas, tpack, mpi)
I Hacerlos requerirá un esfuerzo mínimo
Gracias a:
I ctypes
I f2py (Fortran)
I SWIG (C, C++)
I weave
I ...
Continuará...
Charla técnica
I Python Vs. Matlab.
I Más sobre los wrappers.
I Arrays en C, Fortran y Python.
I GIL.
I Uso de F2Py.
I ctypes.
I Python en paralelo.
Comentarios de: Python en Supercomputación (0)
No hay comentarios