java opengl java-native-interface opencl jna

¿Cómo se comparan JavaCL y JogAmp JOCL?



opengl java-native-interface (3)

JavaCL usa JNA, JOCL usa JNI en su lugar, así que espero que JavaCL muestre una mejor compatibilidad multiplataforma, mientras que JOCL generalmente debería tener un mejor rendimiento. JOCL se prueba junto con JOGL2, lo que debería facilitar el uso de objetos GL en CL y viceversa. JavaCL puede generar su contexto a partir del contexto GL actual. JavaCL está protegido por la GPL, JOCL se distribuye bajo la licencia BSD.

¿Qué más se puede decir acerca de estos dos enfoques? ¿Hay alguna buena comparación por ahí?

JavaCL: http://code.google.com/p/javacl/

JOCL: http://jogamp.org/jocl/www/


(Descargo de responsabilidad: Soy el autor de JavaCL y BridJ)

Además de su versión basada en JNA, JavaCL tiene un puerto BridJ completamente funcional que está completamente licenciado bajo BSD (ya que BridJ tiene licencia BSD).

FYI BridJ ofrece una sobrecarga por llamada significativamente menor que la de JNA, acercándose al rendimiento de JNI a la vez que sigue siendo muy portátil (actualmente se lanza con binarios de 32 y 64 bits para Windows, Linux y MacOS X, pero se planean otras plataformas).

Sin embargo, el rendimiento de los enlaces de bajo nivel no es lo único que se debe tener en cuenta. Mientras que las API orientadas a objetos de JavaCL y JOCL se ven similares, tienes que cuidar las golosinas adicionales. No sé sobre JOCL, pero JavaCL viene con:

  • #inclusión transparente de archivos de la ruta de clase de Java o de cualquier URL
  • Caché automático y transparente de binarios del programa.
  • utilidades de reducción
  • álgebra lineal
  • un generador de números aleatorios (una biblioteca, no una demo!)
  • una buena interfaz gráfica de usuario para experimentar con los núcleos de transformación de imagen en segundos
  • un complemento de Maven que analiza los núcleos de OpenCL (que se encuentra en src / main / opencl) y genera clases de programa con tipo con un método Java escrito por kernel (lo que hace cumplir la corrección de la lista de argumentos en tiempo de compilación)

JavaCL también es utilizado por ScalaCL (complemento de compilación respaldado por OpenCL de propósito general + compilador de Scala para optimizar el código), que es una buena manera de evitar escribir cualquier núcleo (aunque todavía está en un desarrollo pesado en este momento).

Otra cosa a considerar es la fácil disponibilidad de binarios para plataformas estándar (Windows, Linux y MacOS X al menos) y la integración para construir sistemas como Maven. JavaCL solía ser el mejor en mi humilde opinión, pero las cosas podrían haber cambiado (y seguramente cambiarán).

Finalmente, JOCL de Marco Hutter es otro enlace de OpenCL, pero sin API de alto nivel. Sin embargo, podría ser más rápido que OpenCL4Java (JavaCL) o JOCL para llamadas de bajo nivel.

EDIT: JavaCL ahora está cubierto por un capítulo en el libro OpenCL in Action de Matthew Scarpino.


JOCL es en su diseño muy similar a JOGL o JOAL y (como todos los proyectos http://jogamp.org ) se genera directamente a partir de los archivos de encabezado de la especificación OpenCL en el momento de la compilación. Esta es la razón por la que exponemos la API en dos niveles: la especificación 1: 1 cumple con el enlace de nivel bajo y una mano escrita mucho menos verbosa enlace de nivel alto. El enlace basado en JNI es estático y está optimizado para una sobrecarga de tiempo de ejecución mínima. Proporcionamos compilaciones (probadas) para todas las combinaciones comunes de os-arch y pronto también para algunos dispositivos móviles.

JOCL.org de Marco Hutter también está basado en JNI pero está completamente escrito a mano y en un nivel bastante bajo (como ya se mencionó anteriormente).

atentamente,

-michael (líder de JOCL, mantenedor de JOGL)


Raquel Medina Domínguez ha escrito un artículo para su título de "Ingeniería en Informática" titulado "Evaluación de diferentes enlaces de Java para OpenCL". Este artículo compara JogAmp JOCL, JOCL y JavaCL. Puntúa los proyectos del árbol en rendimiento, fácil de usar y consumo de memoria. El documento incluye instrucciones de configuración que lo ayudarán a comenzar a utilizar cualquiera de las tres implementaciones de enlace de Java OpenCL.

http://e-archivo.uc3m.es/handle/10016/17183?locale=en - Evaluación de diferentes enlaces de Java para OpenCL PDF: http://e-archivo.uc3m.es/bitstream/10016/17183/5/finalversionPFC_Raquel_Medina.pdf Conclusiones en la página 40.