[Python-es] Python y Julia para LLVM
Jaime Perea
jdpd en gmx.es
Mie Ene 16 16:34:03 CET 2013
On Miércoles, 16 de enero de 2013 16:06:29 Chema Cortes escribió:
> El día 16 de enero de 2013 15:17, Francesc Alted <faltet en gmail.com>
escribió:
> > Yo no puedo opinar mucho de la interacción de LLVM con Julia por que no lo
> > conozco demasiado, pero sí que puedo decir que en Continuum estamos
> > poniendo a punto Numba (https://github.com/numba/numba), un compilador al
> > vuelo (JIT) que traduce código Python al lenguaje intermedio (IR) que usa
> > LLVM internamente. LLVM, a su vez, compila el IR a código nativo (que
> > depende de la platforma) y lo ejecuta (o lo puede guardar en un fichero
> > binario, esto ya depende de la aplicación).
> >
> > Numba permite, mediante decoradores y anotaciones de tipo, hacer que
> > funciones puras en Python (ahora mismo no se soporta todo el lenguaje,
> > pero
> > sí un subconjunto bastante amplio) puedan correr a velocidad de C puro, y
> > lo que es mejor, de manera completamente interactiva (la compilación al
> > vuelo es realmente rápida). Numba es completamente open-source, así que
> > cualquiera puede contribuir al proyecto (de hecho alguien de esta lista
> > ya menciona que han contribuido ya).
>
> Creo que ya tengo claro cómo usáis LLVM en numba. Incluso veo que
> permite la compilación estática además de JIT, lo que seguramente
> tiene que dar resultados bastantes buenos.
>
> Tenía interés en saber si LLVM facilitaba la concurrencia y el cómputo
> distribuido. Por lo que veo, Julia tiene estas facilidades, pero debe
> ser cosecha propia. También estoy viendo proyectos para portar otros
> lenguajes como scala o C# a LLVM, por lo que parece que esta
> plataforma empieza a tomar auge y, tal vez, lleguemos a librarnos de
> JVM y .Net.
>
> > Pero no hay que llevarse a engaño: LLVM realmente no es una tecnología
> > demasiado útil para PyPy, ya que éste último viene con su propio
> > compilador
> > JIT, asi no se complementan demasiado bien. En Continuum claramente hemos
> > apostado más por LLVM (via Numba) que por la vía PyPy. La ventaja de
> > Numba
> > es que no se tiene por qué renunciar a librerias que son extensiones (el
> > proyecto de migración de NumPy a PyPy está siendo lento y plagado de
> > trampas, y ya somos muchos los que dudamos de que se pueda llevar a cabo
> > de
> > una manera completa). Numba permite compilar de manera selectiva la parte
> > de código Python que es un cuello de botella, respetando toda la gama de
> > librerias y extensiones que ya existen ahora mismo.
> >
> > Por supuesto que Blaze (https://github.com/ContinuumIO/blaze), nuestro
> > proyecto para reemplazar NumPy para problemas de Big Data, usará Numba
> > como
> > motor de cálculo de manera que el usuario no tenga que preocuparse de
> > hacer
> > extensiones para optimizar los cálculos, sino que éstos se efectuarán a
> > velocidad de C (¡y sin arrays temporales!) directamente. Blaze es otro
> > desarrollo open source, y aunque todavía está en su infancia, esperamos
> > que
> > de aquí a no mucho tiempo ya pueda ser posible hace cosas interesantes con
> > él.
>
> No conocía Blaze. Le echaré un vistazo. Ya solo os falta un proyecto
> para computación distribuída ;-)
Hola
Unas preguntas técnicas de un ignorante:
Cuando habláis de computación distribuida, ¿se refieres a python en entornos,
digamos, mpi o sólo en memoria compartida?.
El problema que le veo siempre a esta historia es que si quieres mover datos
sin tener que ir a tcp/ip, por ejemplo moviendo cosas en infiniband, no te
quedan muchas más opciones que mpi... o inventarte algo como protocolo de
comunicaciones. ¿Sabéis como lo gestiona esto julia?.
Otra pregunta ¿como afecta la existencia del GIL a vuestros tipos de
optimizaciones?
Poder programar number-crunching en python es un sueño para gente como yo :-)
Saluditos
--
Jaime D. Perea Duarte. <jaime at iaa dot es>
Linux registered user #10472
Dep. Astrofisica Extragalactica.
Instituto de Astrofisica de Andalucia (CSIC)
Apdo. 3004, 18080 Granada, Spain.
Más información sobre la lista de distribución Python-es