[Python-es] Python y Julia para LLVM

Francesc Alted faltet en gmail.com
Mie Ene 16 17:17:54 CET 2013


On 1/16/13 4:06 PM, Chema Cortes wrote:
> 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.

Sí, pero cuando digo que el JIT de Numba es rápido, es porque lo es, y 
mucho.  Por ejemplo, en la transparencia 36 y 37 de esta presentación:

https://python.g-node.org/wiki/_media/starving_cpu/starving-cpu.pdf

se puede ver que el tiempo de compilación para el código es de unos 20 
ms, que normalmente es despreciable para rutinas que suelen ser el 
cuello de botella de cálculos complicados.
>
> 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 ;-)

Bueno, ese el espíritu de Blaze, que nos valga para computación 
distribuida.  En http://blaze.pydata.org/vision.html se puede leer:

"""
Just as NumPy is the center of an ecosystem of singe-node, in-memory 
tools that use the NumPy array as a common shared abstraction around a 
single pointer to memory, Blaze is the center of an ecosystem of 
multiple-node, multiple-segment, and multiple calculation-unit 
algorithms and programs. The common meme in effective use of Blaze is 
that developers should think about their data and the operations that 
should be done on their data in an array-oriented fashion, and that code 
should be moved to data as much as possible.
"""

Así que el tema de computación distribuida está definitavmente en 
nuestro radar.  En particular, y dado lo caro que es el transporte de 
datos, y como se lee arriba, nuestro objetivo es llevar el código donde 
están los datos, y no al revés.  Ahí es donde Numba (y LLVM) van a ser 
realmente importantes.

-- 
Francesc Alted



Más información sobre la lista de distribución Python-es