Los programas de computadora son de dos tipos: rápidos o lentos. Esto tiene que ver con la eficiencia de las rutinas que el programador escriba. En cómputo no existe eso de ganar-ganar. Si un programa es rápido, entonces seguramente usa mucha memoria. Si un programa es eficiente en memoria, entonces probablemente sea lento. Por ello, se buscan alternativas para optimizar código y para hacerlo más rápido. Una opción es acelerar algunos de los procesos usando los procesadores gráficos, que vienen en las tarjetas de video. Con esto en mente, se ha anunciado en la Conferencia anual JavaOne, que Java tendrá aceleración a través de los GPUs, es decir, de los procesadores en las tarjetas gráficas.

Las noticias sobre esto vienen de dos fuentes: John Duimovich, CTO (Chief Technology Officer) de Java en IBM y Mark Reinhold, Arquitecto en jefe de Oracle, en el área de la plataforma Java. En su plática, mostrada en el video, John Duimovich hizo el anuncio de la aceleración vía GPUs estaba ya lista para la plataforma Java, lo cual haría mejorar sustancialmente las aplicaciones graciasd al poder de los GPUs, tanto en clientes como en servidores.

Anotó que la aceledración por GPUs “compactan increíble poder de cómputo” y que usando esta idea se puede acelerar las cargas de trabajo de Java en unas 10 veces, por ejemplo en cálculos complejos que procesan volúmenes altos de datos. En la plática, Duimovich mostró el efecto de la aceleración GPU ordenando arreglos estándar de Java, aumentando su eficiencia de 2 a 48 veces, dependiendo de la longitud del arreglo.

Sumit Gupta, de NVidia, empresa que fabrica tarjetas gráficas, dijo que los beneficios de esta tecnología ya están disponibles en Java 8 sacando partido a las bibliotecas de CUDA (una biblioteca para hacer procesos en paralelo), lo que acelera las bibliotecas de Java para operaciones también en paralelo. CUDA ha sido implementado en C, C++, Fortran y Python y es una biblioteca de paralelismo ya estándar, similar a OpenCL.

Por su parte, Mark Reinhold en su plática técnica, dio algunos detalles de lo que tendrá Java SE9. Aquí de nuevo se mencionaron los GPUs. Reinhold dijo que en la medida que se incremente el número de GPUs usados para procesar grandes volúmenes de datos, lo mejor será usar estos directamente en lugar de usar la interfaz primitiva. Se trabaja en una biblioteca para ello llamada Sumatra, de OpenJDK.

Reinhold habló de una interfaz nativa java (JNI) 2.0 y dijo: “No debería ser muy difícil integrar Java con código nativo después de todos estos años”.  Y agregó: “las estructuras eficientes de datos en memoria son posibles si se puede cargar más información en memoria, que es un área para mejoras potenciales. Podríamos trabajar menos si nos deshiciésemos de toda esta búsqueda de apuntadores que hacen compleja la manipulación de la información”.

Referencias:

Conferencias JavaOne