2011-01-10 12 views
16

JavaCL utilizza JNA, JOCL utilizza invece JNI, quindi mi aspetto che JavaCL mostri una migliore compatibilità multipiattaforma, mentre JOCL dovrebbe generalmente avere prestazioni migliori. JOCL viene testato insieme a JOGL2, che dovrebbe rendere facile l'uso di oggetti GL in CL e viceversa. JavaCL è in grado di generare il proprio contesto dall'attuale contesto GL. JavaCL è protetto dalla GPL, JOCL è distribuito sotto la licenza BSD.Come confrontare JavaCL e JogAmp JOCL?

Cos'altro si può dire di questi due approcci? Ci sono dei buoni paragoni?

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

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

risposta

6

JOCL è nel suo design molto simile a JOGL o JOAL ed è (come tutti i progetti http://jogamp.org) generato direttamente dai file di intestazione della specifica OpenCL in fase di compilazione. Questo è il motivo per cui esponiamo l'API in due livelli: il binding a basso livello conforme alle specifiche 1: 1 e una scrittura a mano molto meno dettagliata verbosa. L'associazione basata su JNI è statica ed è ottimizzata per un sovraccarico di runtime minimo. Forniamo build (testati) per tutte le comuni combinazioni os-arch e presto anche per alcuni dispositivi mobili.

JOCL.org di Marco Hutter è anch'esso basato su JNI, ma interamente scritto a mano e di livello relativamente basso (come già menzionato prima).

migliori saluti,

-Michael (piombo JOCL, JOGL manutentore)

+0

Ma l'OP non sta chiedendo di JavaCL non di JOCL.org? – Chinasaur

+0

sì. ecco perché ho menzionato jocl.org solo brevemente in una frase poiché non volevo lasciarlo fuori. – mbien

+1

Ma non hai affrontato JavaCL; confusione. Ma buone informazioni, grazie. – Chinasaur

8

(Disclaimer: io sono l'autore di JavaCL e BridJ)

Oltre alla sua versione JNA-based, JavaCL ha una completamente funzionale Porta BridJ interamente concessa in licenza BSD (dato che BridJ è a sua volta con licenza BSD).

FYI BridJ offre un overhead per chiamata notevolmente inferiore rispetto a JNA, vicino alle prestazioni JNI pur rimanendo molto portabile (è attualmente rilasciato con binari a 32 e 64 bit per Windows, Linux e MacOS X, ma sono previste altre piattaforme).

Le prestazioni dei binding di basso livello non sono tuttavia l'unica cosa da considerare. Mentre le API orientate agli oggetti di JavaCL e JOCL hanno un aspetto simile, è necessario occuparsi degli extra extra. Non so su JOCL, ma le navi JavaCL con:

  • #include trasparente dei file dal percorso di classe Java o da qualsiasi URL
  • caching automatico e trasparente dei file binari del programma
  • utilità di riduzione
  • algebra lineare utils
  • un generatore di numeri casuali (una libreria, non un demo!)
  • un nice GUI to experiment with image transform kernels within seconds
  • un plugin Maven che analizza i kernel OpenCL (che si trova in src/main/OpenCL) e genera digitato classi di programma con uno digitato metodo Java per kernel (far rispettare la correttezza della lista argomenti al momento della compilazione)

JavaCL viene utilizzato anche da ScalaCL (raccolte generiche OpenCL-backed + plugin compilatore Scala per ottimizzare il codice), che è un buon modo per evitare di scrivere qualsiasi kernel (anche se ancora in fase di sviluppo al momento della stesura di questo documento).

Un'altra cosa da considerare è la facile disponibilità di file binari per piattaforme standard (Windows, Linux e MacOS X almeno) e integrazione per la creazione di sistemi come Maven. JavaCL era il migliore IMHO, ma le cose potrebbero essere cambiate (e sicuramente cambierà).

Infine, Marco Hutter's JOCL è un altro bind OpenCL, ma senza API di alto livello. Tuttavia, potrebbe rivelarsi più veloce di OpenCL4Java (JavaCL) o JOCL per le chiamate di basso livello.

MODIFICA: JavaCL è ora coperto da un capitolo nel libro OpenCL in Action di Matteo Scarpino.

+2

Per la piccola storia, la prima versione di JavaCL era disponibile * prima di qualsiasi implementazione OpenCL * spedito pubblicamente. L'ho fatto solo per il gusto di farlo come un mezzo per testare JNAerator (http://code.google.com/p/jnaerator/), poi ho capito che poteva essere davvero utile (e abbastanza veloce per essere nel gioco: -)) – zOlive

+1

Inoltre, JavaCL consente di scrivere istruzioni #include nei kernel OpenCL che fanno riferimento ai file nel classpath Java (anche all'interno di un JAR!), Che credo sia finora una funzionalità esclusiva. – zOlive

+6

Ho trovato JavaCL il più semplice da installare e funzionare e il più completo finora. – Chinasaur

8

Raquel Medina Dominguez hanno scritto una carta per la sua laurea "Ingeniería en Informática" dal titolo "La valutazione diversi binding Java per OpenCL". Questo documento confronta JogAmp JOCL, JOCL e JavaCL. Segna i progetti dell'albero su prestazioni, facilità d'uso e consumo di memoria. Il documento include istruzioni di installazione che ti aiuteranno a iniziare a utilizzare una delle tre implementazioni di bind Java OpenCL.

http://e-archivo.uc3m.es/handle/10016/17183?locale=en - Valutare diversi binding Java per OpenCL PDF: http://e-archivo.uc3m.es/bitstream/10016/17183/5/finalversionPFC_Raquel_Medina.pdf conclusioni a pagina 40.