2011-01-10 16 views
16

JavaCL usa JNA, JOCL utiliza JNI en su lugar, por lo que espero que JavaCL muestre una mejor compatibilidad entre plataformas, 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 GPL, JOCL se distribuye bajo la licencia BSD.¿Cómo se comparan JavaCL y JogAmp JOCL?

¿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/

Respuesta

6

JOCL es en su diseño muy similar a JOGL o JOAL y es (como todos los proyectos http://jogamp.org) generados directamente desde los archivos de encabezado de especificación OpenCL en tiempo de compilación. Es por eso que exponemos la API en dos niveles: la especificación 1: 1 concuerda con bajo nivel y una escritura mucho más detallada de alto nivel. 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á escrito completamente a mano y tiene un nivel bastante bajo (como ya se mencionó anteriormente).

mejores deseos,

-Michael (JOCL plomo, JOGL mantenedor)

+0

¿Pero el OP no está preguntando sobre JavaCL no JOCL.org? – Chinasaur

+0

sí. Es por eso que mencioné jocl.org solo brevemente en una oración ya que no quería dejarlo. – mbien

+1

Pero no se dirigió a JavaCL; confuso. Pero buena información, gracias. – Chinasaur

8

(Negación: Soy el autor de JavaCL y BridJ)

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

FYI BridJ ofrece gastos indirectos significativamente más bajos que JNA, se acerca al rendimiento JNI y 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 las vinculaciones de bajo nivel no es lo único a tener en cuenta. Si bien las API orientadas a objetos de JavaCL y JOCL tienen un aspecto similar, tienes que cuidar de los extras. No sé sobre JOCL, pero los barcos con JavaCL:

  • # include transparente de los archivos de la ruta de clases Java o desde cualquier URL
  • almacenamiento en caché automático y transparente de los programas binarios
  • utilidades de reducción
  • un generador de álgebra lineal utils
  • de números aleatorios (una biblioteca, no una demostración!)
  • un nice GUI to experiment with image transform kernels within seconds
  • un plugin Maven que analiza los núcleos OpenCL (que se encuentra en src/main/OpenCL) y genera mecanografiadas clases del programa con un método de Java escrito por kernel (la aplicación de la corrección de la lista de argumentos en tiempo de compilación)

JavaCL también es utilizado por ScalaCL (colecciones respaldadas por OpenCL de propósito general + complemento del compilador de Scala para optimizar el código), que es una buena manera de evitar escribir cualquier kernel en absoluto (aunque aún está en desarrollo a partir de este momento).

Otra cosa a considerar es la fácil disponibilidad de los 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á).

Finalmente, Marco Hutter's JOCL 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.

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

+2

Para la pequeña historia, la primera versión de JavaCL estaba disponible antes de cualquier aplicación * * OpenCL enviado públicamente. Simplemente lo hice por el gusto de probar un JNAerator (http://code.google.com/p/jnaerator/), y luego me di cuenta de que realmente podría ser útil (y lo suficientemente rápido para estar en el juego: -)) – zOlive

+1

Además, JavaCL le permite escribir declaraciones #include en sus kernels OpenCL que hacen referencia a archivos en el classpath de Java (¡incluso dentro de un JAR!), Que creo que es hasta ahora una característica exclusiva. – zOlive

+6

He encontrado que JavaCL es el más fácil de poner en marcha y el más completo hasta el momento. – Chinasaur

8

Raquel Medina Domínguez han escrito un documento para su título de "Ingeniería en Informática", titulado "Evaluación de diferentes enlaces Java para OpenCL". Este documento compara JogAmp JOCL, JOCL y JavaCL. Puntúa los proyectos de á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 Java OpenCL.

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

Cuestiones relacionadas