Frage

General Purpose Computation on Graphics Processing Unit ( GPGPU ) ist ein sehr attraktives Konzept Gurtzeug die Leistung der GPU für jede Art von Computing.

Ich würde gerne GPGPU verwenden, für die Bildverarbeitung, Partikel und schnell geometrische Operationen.

Im Moment scheint es, die beiden Konkurrenten in diesem Raum sind CUDA und OpenCL. Ich würde gerne wissen:

  • Sie OpenCL verwendbar noch von Java auf Windows / Mac?
  • Was die Bibliotheken Möglichkeiten, um Schnittstelle zu OpenCL / CUDA sind?
  • Ist mit JNA direkt eine Option?
  • Bin ich etwas vergessen?

Jede praktische Erfahrungen / examples / Kriegsgeschichten werden geschätzt.

War es hilfreich?

Lösung

AFAIK, JavaCL / OpenCL4Java ist die einzige OpenCL Bindung, die verfügbar ist auf allen jetzt Plattformen (einschließlich MacOS X, FreeBSD, Linux, Windows, Solaris, alle in Intel 32, 64 Bits und ppc-Varianten, dank der Verwendung von JNA ).

Es hat Demos, die eigentlich zumindest auf Mac und Windows Fein von Java Web Start ausführen (zufällige Abstürze auf Linux zu vermeiden, finden Sie dieser Wiki-Seite , wie diese Partikel Demo .

Es kommt auch mit einigen Nebenkosten (GPGPU Erzeugung von Zufallszahlen, Grund parallel Reduktion der linearen Algebra) und Scala DSL .

Schließlich ist es die ältesten Bindungen verfügbar (seit Juni 2009) und hat eine aktive Benutzergemeinschaft .

(Disclaimer: Ich bin JavaCL 's Autor: -))

Andere Tipps

Sie können auch prüfen, Aparapi . Es ermöglicht Ihnen, Ihren Code in Java zu schreiben und versuchen, Bytecode zu OpenCL zur Laufzeit zu konvertieren.

Vollständige Offenlegung. Ich bin der Aparapi Entwickler.

Nun CUDA ist eine Modifikation von C, CUDA zu schreiben Kernel Sie Code in C, und dann in ausführbarer Form mit Nvidias CUDA-Compiler kompiliert werden. Produziert nativen Code könnte dann mit Hilfe von Java JNI verknüpft werden. Technisch gesehen kann man nicht Kernel-Code aus Java schreiben. Es gibt JCUDA http://www.jcuda.de/jcuda/JCuda.html , es bietet Ihnen mit CUDA APIs für allgemeine Speicher / Gerät menagement und einige Java-Methoden, die in CUDA und JNI gewickelt (FFT, einige lineare Algebra Methoden .. etc etc ..) umgesetzt werden.

Auf der anderen Seite OpenCL ist nur ein API. OpenCL-Kernel sind einfache Zeichenfolgen an die API übergeben, so unter Verwendung von OpenCL von Java sollten Sie in der Lage sein, eigene Kernel angeben. OpenCL Bindung für Java finden Sie hier: http://www.jocl.org/ .

Ich habe mit JOCL und ich bin sehr zufrieden damit.

Der Hauptnachteil von OpenCL über CUDA (zumindest für mich) ist der Mangel an verfügbaren Bibliotheken (Thrust, CUDPP, etc). Jedoch kann CUDA leicht zu OpenCL portiert werden, und durch einen Blick auf, wie diejenigen Bibliotheken Arbeit (Algorithmen, Strategien, etc) ist eigentlich sehr schön, wie Sie viel mit ihm zu lernen.

Ich weiß, es ist spät, aber ein Blick auf diese: https://github.com/pcpratts/rootbeer1

Ich habe nicht mit ihm gearbeitet, aber scheint viel einfacher zu bedienen als andere Lösungen.

Von der Projektseite:

Rootbeer ist weiter fortgeschritten als CUDA oder OpenCL Java Language Bindings. Mit Bindungen muss der Entwickler komplexe grafische Darstellungen von Objekten in Arrays von primitiven Typen serialisiert. Mit Rootbeer wird dies automatisch. Auch mit Sprachbindungen, muss der Entwickler den GPU-Kernel in CUDA oder OpenCL schreiben. Mit Rootbeer eine statische Analyse des Java Bytecode ist (mit Soot) durchgeführt und CUDA-Code wird automatisch generiert.

Ich kann auch JOCL von jogamp.org , Arbeiten auf Linux, Mac und Windows empfehlen. CONRAD zum Beispiel nutzt OpenCL stark in Kombination mit JOCL.

Wenn Sie einige Bildverarbeitung oder geometrische Operationen tun mögen, können Sie eine Bibliothek für lineare Algebra mit GPU-Unterstützung (mit CUDA zum Beispiel) mögen. Ich würde Ihnen vorschlagen ND4J Hexe ist die lineare algrebra mit CUDA GPU-Unterstützung auf dem DeepLearning4J gebaut wird. Damit Sie müssen nicht direkt mit CUDA beschäftigen und haben auf einen niedrigen Pegel Code in c. Plus, wenn Sie möchten mit DL4J mit Bild mehr Dinge zu tun, werden Sie den Zugriff auf bestimmte Bildverarbeitungsoperationen wie Faltung haben.

Sie können einen Blick auf die CUDA4J API

nehmen

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top