Java y las GPUs
lunes, octubre 5, 2009 at 10:13AM Las GPUs (graphics processing units) son microchips de propósito específico orientados al procesamiento de gráficos. A pesar de su relativamente más baja frecuencia respecto a una CPU, estos microchips se encuentran optimizados para realizar operaciones de coma flotante y son masivamente paralelos (algunas llegan a tener hasta del orden de 1000 núcleos).
Además de para ejecutar los juegos más modernos de ordenador, estos dispositivos (especialmente los de más alta gama) a menudo son empleados en aplicaciones científicas. Para problemas fácilmente paraleizables y donde el principal cuello de botella sean las operaciones en coma flotante, comprando una GPU de 2000-4000 $ uno puede convertir un simple PC en una máquina con una potencia de cálculo equivalente al de un cluster formado por varias docenas (para ciertas aplicaciones incluso quizás un par de cientos) de PCs de última generación.
Habitualmente, las GPU se programan en OpenCL, un estándar que no requiere del pago de ningún tipo de tasas a quien lo implemente y que es completamente cross-plataforma. Snow Leopard ha sido el primer sistema operativo en proporcionar soporte para OpenCL, aunque es de esperar que pronto todos los sistemas operativos lo traigan. El lenguaje de programación de OpenCL podría describirse como "un dialecto de C".
¿Y qué tiene que ver todo esto con Java?. Pues que cada vez más, las GPUs son una fuente de poder de computación barata, compacta y de bajo consumo en comparación con un cluster equivalente. No sólo sería interesante poder explotar desde Java estos dispositivos, con el consecuente beneficio que podría traer (especialmente para aplicaciones científicas y de procesado de imágenes). Sino que sería interesante tener una máquina virtual Java que pudiese ejecutarse en una GPU. ¿Os imagináis el disponer soporte hardware para 1000 threads?
A día de hoy, no hay ninguna solución probada para explotar las GPUs desde Java de un modo sencillo (por supuesto, siempre está JNI). A mí sólo me consta un proyecto (es opensource) que está explorando este camino: OpenCL4Java. Este proyecto proporciona bindings OpenCL para Java y Scala. Por lo de ahora, su autor sólo lo aprobado en Snow Leopard y el proyecto todavía se encuentra en versión beta. Aquí tenéis una pequeña introducción al proyecto.
¿Creéis que las GPU serán relevantes en el mundo Java o son un camino que no merece la pena explorar? ¿Constituye la falta de soporte para programar GPUs un punto débil de Java? ¿Alguno de vosotros a programado alguna GPU desde Java o desde cualquier otro lenguaje?
otro 
Reader Comments