Más programando para una grid

En el anterior post

Programando para una Grid

enumeré algunas aplicaciones que pueden aprovechar el concepto de grid computing, pensando en algunas aplicaciones para AjMessages, AjAgents (o el venerable AjServer): como siempre, esto es el AjLenguaje en el AjMundo… :-). Tengo una lista ampliada, para comentar.

Más aplicaciones

- Programas de Biología Molecular y Genética: Tenía que revisar esta rama, (ver el curso de Sebastian Bassi y cía sobre Introducción a la Biología Molecular para Programadores), pero es interesante encontrar que hay implementaciones como BLAST que bien podrían portarse a una grid. Vean alguna implementación de BLAST en grilla en Digipede.

- Rendering y procesamiento de imágenes: Mucho de los algoritmos de iluminación, reflejos, armado de imágenes realistas, pueden realizarse en paralelo. Tengo que revisar cuáles son

- Producción de animaciones: Si una imagen, para su proceso, necesita un algoritmo no paralelizable, se puede usar cada nodo de la grilla para procesar una imagen, pero usar la grilla completa entonces para producir una serie de imágenes, que compondrán una animación.

- Procesamiento de media: tanto la compresión de video, como la detección de key frames, cambios de escena en un video, puede particionarse en nodos de una grilla.

- Procesamiento ETL: Extract, Transform y Load, un clásico del procesamiento “batch”, bien puede ser enviado paralelizado a una grid.

- Detección de Spam: Una empresa de distribución de listas de correo, como egrupos.net, bien podría derivar el análisis a una grilla. Tal vez es más una aplicación de computación distribuida, pero tanto AjMessages como Fabriq están ahí cerca: no son solo para explotar en una grilla.

- Simulaciones: un tema amplísimo. Hay sistemas donde no es fácil ver el resultado de dada una entrada, ver qué produce. Ante distintas entradas (por ejemplo, forma de un barco y velocidad), hay que calcular el resultado (resistencia, velocidad final, turbulencia). Hay que probar distintos conjuntos de entrada. Entonces, cada entrada (pueden ser miles) se puede ir entregar a un modelo simulado, ejecutando en un nodo. Con varios nodos, se simulan más resultados.

Enlaces

He coleccionado varios enlaces en el adictivo Delicious sobre Grid Computing

http://del.icio.us/ajlopez/gridcomputing

Para este post, me he detenido más en

http://www.gridgain.com
http://www.digipede.net
http://www.gridgistics.net/

Es muy interesante la implementación de la gente de Digipede. Distribuyen assemblies, hay un servidor que recibe tareas, las distribuye en distintas máquinas donde corren los agentes Digipede, mantiene una base de datos con las tareas lanzadas y pendientes, y expone una interfaz web de control. Una aplicación de usuario puede comunicarse con el servidor Digipede, mediante un servicio web.

Lo interesante de GridGain es la “gridificación” de un método, usando Java annotations. Interesante idea a explorar.

Algunas ideas locas

Para que noten que todavía no pueden darme de alta en el nosocomio mental en el que estoy albergado, veamos:

- Generación de código en grilla: Lo tenía para colocar en el anterior artículo, pero me olvidé. No solamente se puede paralelizar algo de generación de código, sino que creo que podemos montar distintos agentes expertos, que completen el modelo, “conozcan” de arquitectura y patrones, de code coverage, de unit tests, y que vayan colaborando, generando artefactos finales e intermedios, armando una “pipeline” de producción de código, o trabajando en paralelo. Siempre pensando que esos agentes pueden estar en una grilla.

- Computer Go en grilla: Ya hay algunos trabajos hechos con GNUGo. Pero sería interesante poder armar que el AjGo tenga una organización interna basada en un concepto de agentes (como tantas palabras, agente es un concepto difuso, disculpen la ambigüedad). Algo presenté de la idea este año, en el Congreso de Go que se realizó aquí en Argentina. Habría agentes especializados en resolver problemas concretos (invasión de territorio, reduccion de territorio, formación de ojos, impedir formar ojos, escape de grupo, etc …) que bien pueden ejecutarse en una grilla. Eso permitirá un “scale out” interesante, en cuanto se complique obtener respuestas en tiempo razonable, debido a la naturaleza del juego.

- Lenguaje de programación “grillable”: Tal vez debería comenzar con solamente tener un lenguaje de programación con ejecución en paralelo o diferida. Tengo ideas para extender AjBasic con CCR o similar (tengo algo diseñado, no publicado ni bajado a código, con lazy evaluation en paralelo), o de implementar algo más orientado a programación funcional, donde algun operador (se me ocurre procesamiento de listas y otros) sea “grillable”: pueda delegarse el trabajo en paralelo a una grilla, que puede existir o no, o que puede ser ampliada en caso de ser necesario para el resultado a tiempo del algoritmo empleado. Sería interesante tener un lenguaje así: que funcione en una sola máquina, pero que transparentemente, pueda colocarse en una grilla, siga funcionando igual, pero obtenga toda la ventaja de tener una grid abajo. Se viene el AjG#… ;-)

Conclusión y Agradecimiento

Creo que es un tema interesantísimo. Agradezco desde acá al bueno de Gabriel Szlechtman (confieso que tuve que copiar el apellido, todavía no me lo aprendo), que sugirió lo de procesamiento de media, algo de generación de código (tomado de sus ideas de generador de código), detección de spam, y otros.

¿Conocen otras aplicaciones, implementaciones, para comentar?

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com/

This entry was posted in 1389, 3463, 6149. Bookmark the permalink.

One Response to Más programando para una grid

  1. Dan Ciruli says:

    Gracias por mencianando nuestro producto! Si quiere Ud. jugar con el Digipede Network, tenemos un versión por desarrolladores — sin cargo. Es una buena herramienta para introducir los conceptos de programar un grid. (Favor de perdonar mi español)

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>