21 setiembre 2006

LLVM

Antes de entrar de lleno en el tema podemos mencionar que LLVM tiene un gran parecido con Java Virtual Machine y .Net, estos últimos generan un código intermedio (no ejecutable en ninguna maquina) pues compilan para un máquina virtual, por lo que se hace necesario una segunda compilación mucho más sencilla y en “tiempo real” para ejecutar esos programas. Estas tecnologías prometen la posibilidad de escribir el programa una sola vez y ejecutarlo en diversas maquinas, pues hacen que las diferentes maquinas hablen este lenguaje común, sin embargo tanto .Net como JVM no han tenido el éxito esperado, por lo menos hasta ahora.

Low Level Virtual Machine (LLVM) es una infraestructura de compilación (compilador – optimizador open source) diseñada para compilación en tiempo real con la cual se puede optimizar programas escritos en cualquier lenguaje de programación. Usando LLVM se puede crear una máquina virtual como Java que puede generar código para arquitecturas especificas logrando optimizaciones para plataformas o lenguajes particulares. LLVM puede compilar a un código máquina determinado o a uno virtual (la máquina virtual).

Sus principales ventajas son que puede correr programas compilados en cualquier procesador moderno y que su tecnología de optimización permite que el programa se optimice a si mismo cada vez que corre, sacando estadísticas de su uso y permitiendo reajustarlas cada vez que se vuelve a ejecutar optimizándose al nuevo uso. Esta tecnología no sólo es buena sino que parece estar madura y supera en varios benchmark a los compiladores ordinarios.

Uno de los campos en los que se va a aplicar esta tecnología es el OpenGL. Al parecer va a ser usada por Apple en su próximo sistema operativo Mac OS X Leopard, esto permitirá una ejecución más rápida de OpenGL para hardware de gráficos de alto rendimiento y soporte de características más amplio en hardware antiguo. En concreto Apple la usará en los pipeline de los vértices y en los vertex shaders compilando a una forma intermedia propia de la infraestructura LLVM, aplicando algoritmos de optimización sobre la misma y posteriormente utilizando un JIT para traducirlos a código máquina (esta será la forma de dar soporte al hardware más antiguo). A la fecha los Mac Pro ya utilizan OpenGL multi hilo, es decir capacidad de ejecutar varias instrucciones OpenGL simultáneamente (es probable que lo implementen en el futuro en el resto de sus máquinas, tengan o no más de un procesador).

Sin embargo el principal interés de Apple en esta tecnología sería impedir que se impongan un estándar propietario que lo deje fuera de juego. Aquí hay que situarse primero: cada vez más usamos programas que están en la red (mapas, traductores, juegos, etc.) y en parte la estrategia de Google con todos esos buenos programas que viene creando es justamente usarlos en la red (no depender de un solo computador), así como lo ve también Sun. Quienes predicen el futuro dicen que dentro de unos años contrataremos el servicio de computación como si fuera el cable o la electricidad, es decir tendremos en casa un terminal tonto y contrataremos capacidad de proceso, de almacenamiento, de programas, etc. y para eso evidentemente no necesitamos un gran computador de propósito general pero si una gran banda ancha de Internet, un procesador de propósito más especifico (tipo Cell) y una empresa que suministre estos servicios (esto situación no es nada descabellada pues para que vamos a invertir en una maquina y software que con el tiempo se van a quedar desfasados, mejor contratamos el servicio y así tendremos siempre lo último), en ese sentido Apple podría quedar fuera de juego si llegan a imponerse los estándares Java o .Net, actualmente la mayoría de programas que funcionan en red lo hacen con estándares abiertos pero parece que estos (por diversos motivos) tienen sus limitaciones. Es así que a Apple le beneficiaria un formato realmente portable y abierto, aunque a esta tecnología todavía le falta desarrollo pues a la fecha LLVM es una infraestructura de compilación, no una plataforma completa.

Como vemos LLVM no se limita a la optimización de gráficos sino que va mucho más allá y podrá utilizarse en una gran variedad de tareas, Apple ha contratado a su principal programador (Chris Lattner) y ha comenzado a presionar al comité del GNU C para que integre esta tecnología (de hecho el mismo Chris Lattner ya está trabajando en integrarlo con GCC). De lograrse esto y teniendo en cuenta la extensión del GCC, la integración de LLVM podría traer de cabeza a tecnologías como .Net, JVM y TAO. Si Apple consigue esto último cambiaría el escenario actual utilizando un estándar abierto y eficiente. Aunque no parece labor nada sencilla. Veremos.

Fuentes: Wikipedia, Macuarium
Otros enlaces de interés: John Siracusa 1 y 2