Domanda

General-purpose computing on unità di elaborazione grafica ( GPGPU ) è un concetto molto interessante per cablaggio la potenza della GPU per ogni tipo di calcolo.

Mi piacerebbe utilizzare GPGPU per l'elaborazione delle immagini, le particelle, e le operazioni veloci geometriche.

In questo momento, sembra che i due contendenti in questo spazio sono CUDA e OpenCL. Mi piacerebbe sapere:

  • Is OpenCL utilizzabile ancora da Java su Windows / Mac?
  • Quali sono le biblioteche modi per interfacciarsi con OpenCL / CUDA?
  • E 'sicuro utilizzare JNA direttamente un'opzione?
  • sto dimenticando qualcosa?

Ogni esperienza / examples / storie di guerra del mondo reale sono apprezzati.

È stato utile?

Soluzione

Per quanto ne so, JavaCL / OpenCL4Java è l'unico OpenCL vincolante che è disponibile su tutte le piattaforme in questo momento (compreso MacOS X, FreeBSD, Linux, Windows, Solaris, il tutto in Intel 32, 64 bit e PPC varianti, grazie al suo uso di JNA ).

E 'demo che in realtà funzionano bene da Java Web Start, almeno su Mac e Windows (per evitare crash casuali su Linux, si veda questa pagina wiki , come questo particelle Demo .

Inoltre è dotato di alcune utenze (GPGPU generazione di numeri casuali, riduzione di base parallele, algebra lineare) e ha una Scala DSL .

Infine, è le associazioni più antiche disponibili (dal giugno 2009) e ha un'attiva community di utenti .

(Disclaimer: io sono JavaCL 's autore: -))

Altri suggerimenti

Si può anche considerare Aparapi . Esso consente di scrivere il codice in Java e tenterà di convertire bytecode a OpenCL in fase di esecuzione.

Full disclosure. Io sono l'autore Aparapi.

Bene CUDA è una modifica di C, di scrivere CUDA kernel è necessario il codice in C, e quindi compilare in forma eseguibile con CUDA compilatore di Nvidia. codice nativo prodotto potrebbe quindi essere collegato con Java utilizzando JNI. Quindi tecnicamente non è possibile scrivere il codice del kernel da Java. C'è JCUDA http://www.jcuda.de/jcuda/JCuda.html , vi fornisce le API di CUDA per la memoria / menagement generale dispositivo e alcuni metodi Java che vengono implementati in CUDA e JNI avvolto (FFT, alcuni metodi di algebra lineare .. ecc ecc ..).

D'altra parte OpenCL è solo un'API. kernel OpenCL sono stringhe semplici passati al API in modo da utilizzare OpenCL da Java si dovrebbe essere in grado di specificare i propri kernel. OpenCL vincolante per Java può essere trovato qui http://www.jocl.org/ .

ho usato JOCL e sono molto soddisfatto.

Il principale svantaggio di OpenCL su CUDA (almeno per me) è la mancanza di librerie disponibili (spinta, CUDPP, ecc). Tuttavia CUDA può essere facilmente portato su OpenCL, e guardando a come le librerie di lavoro (algoritmi, strategie, ecc) è in realtà molto bello come si impara molto con esso.

Lo so che è tardi, ma dare un'occhiata a questo: https://github.com/pcpratts/rootbeer1

Non ho lavorato con esso, ma sembra molto più facile da usare rispetto ad altre soluzioni.

Dalla pagina del progetto:

Rootbeer è più avanzato di CUDA o OpenCL linguaggio Java Associazioni. Con attacchi lo sviluppatore deve serializzare grafici complessi di oggetti in array di tipi primitivi. Con Rootbeer questo viene fatto automaticamente. Anche con binding di linguaggio, lo sviluppatore deve scrivere il kernel GPU CUDA o OpenCL. Con Rootbeer un'analisi statica del bytecode Java è fatto (utilizzando fuliggine) e il codice CUDA viene generato automaticamente.

Posso anche raccomandare JOCL da jogamp.org , opere su Linux, Mac e Windows. CONRAD , ad esempio, utilizza pesantemente OpenCL in combinazione con JOCL.

Se si vuole fare un po 'di elaborazione di immagini o di operazioni geometriche, può essere utile una libreria di algebra lineare con supporto GPU (con CUDA per esempio). Vorrei suggerire di ND4J strega è l'algrebra lineare con supporto CUDA GPU su cui è costruita DeepLearning4J. Con questo non si ha a che fare con CUDA direttamente e devono codice di livello basso a c. Inoltre, se si vuole fare di più cose con l'immagine con DL4J si avrà accesso alle operazioni di elaborazione di immagine specifico come convoluzione.

Si può dare un'occhiata al CUDA4J API

http://sett.com/gpgpu/the-cuda4j-api

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top