Wer nicht ganz schlau - Java in GPU?

-horn-

Bekanntes Mitglied
moien,

ich werde nicht ganz schlau aus den infos die ich zu java und gpus gefunden habe.
ich würde gerne teile, oder auch das komplette jar in der gpu laufen lassen können. dabei geht es mir nicht um parallelität, sondern darum einfach weitere sequentiel arbeitende jars gleichzeitig in der gpu abarbeitend zu haben.

ich habe zb jcuda gefunden, aber wenn ich das richtig verstehe schickt das nur bestimmte dinge an die gpu und bekommt das ergebnis zurück.

gibt es eine mäglichkeit alles in die gpu zu bekommen? am besten wäre es, wenn es bei allen gpus von ati, nvidia und weiteren möglich wäre, aber man soll ja nie zu viel am anfang fordern ;).

Andreas
 
M

maki

Gast
Keine GPU unterstützt Java, keine kann ein Jar ausführen.

Es gibt verschiedene Möglichekiten die GPU zu bedienen, zB CUDA und OpenCL, das sind aber eigene Programmiersprachen (bezw. Standards dazu).
 

kirax

Bekanntes Mitglied
Keine GPU unterstützt Java, keine kann ein Jar ausführen.
Naja - eine CPU kann das auch nicht :D

Die JVM erzeugt erst den für die CPU verständlichen Code. Ich hab zwar noch von keiner gehört, aber theoretisch könnte ich mir vorstellen, dass es auch eine JVM geben könnte, die mittels CUDA o.ä. die GPU verwendet.
Ob man das dann will und ob das überhaupt was bringt (performancetechnisch), ist eine andere Frage...
 

Marco13

Top Contributor
Man könnte da seitenlang drüber referieren (und einige tun das auch ;) ).

GANZ grob könnte man verschiedene "Ebenen" unterscheiden, auf denen man da ansetzen kann:

1. Anbindung an eine bestimmte API:
Neben JCuda, jCUDA, jOpenCL, JOCL, JOCL, LWJGL, JavaCL gibt es da sicher noch andere. Im wesentlichen laufen die alle auf's gleiche raus: Es wird Quellcode in der GPU-spezifischen Sprache geschrieben, compiliert, und dann durch bestimmte Funktionsaufrufe von Java aus explizit als GPU-Task ausgeführt. Die Sprache dazu ist CUDA oder OpenCL, was beides sehr ähnliche und nur leicht erweiterte C-Dialekte sind. Bei CUDA muss der Quellcode mit einem speziellen Compiler compiliert werden, nämlich den NVCC (NVIDIA CUDA Compiler), der daraus dann eine CUBIN (CUDA binary) erstellt, die mit JCuda (oder jCUDA) ausgeführt werden kann. Bei OpenCL ist die Integration da etwas dichter möglich, da dort das Compilieren schon in der API enthalten ist: Man übergibt den Quellcode als String an eine Funktion, und kann das Ergebnis (wie auch immer das aussieht) danach ausführen. Entsprechend mehr Anbindungen gibt es dafür auch ;)

2. Umwandeln von Java-Code in GPU-Code.
Das geht z.B. mit Aparapi (im Moment noch AMD-spezifisch, laut dem Verantwortlichen wird es aber ... "irgendwann" (und ich ergänze hier mal: vielleicht ;) ) open-source. Das funktioniert, so weit ich es testen konnte, schon ganz gut. Für CUDA gibt es etwas ähnliches, java-gpu. Weitere Ansätze in dieser Richtung gibt es schon länger für allgemeine parallele Aufgaben, und teilweise werden die jetzt durch GPU-Nutzung verallgemeinert (sowas wie JOMP ). Solche Sachen wie VMKit: a substrate for virtual machines und gpuocelot - Project Hosting on Google Code sind zwar noch nicht speziell auf Java bezogen, gehen aber in eine ähnliche Richtung, und wenn dort die richtigen Personen, Ereignisse und Institutionen zusammenkommen, kann da IMHO auch GANZ schnell was richtig "großes" draus werden. (Nicht dass LLVM nicht groß wäre ;) ich meine das in bezug auf Java :) )

3. JVMs die auf der GPU laufen.
Sowas gibt es AFAIK (noch?) nicht. Ich hatte mal... "Experimente" dazu gemacht, aber abgesehen davon, dass ich in bezug auf Compilerbau ein voll-N00b bin, müßte man da entweder sehr, sehr, sehr, (sehr, sehr, sehr, sehr,...) viel Arbeit reinstecken, oder erstmal grundsätzlich und auf Basis wirklich fundierten Wissens entscheiden, ob das überhaupt (und prinzipedingt) Sinn machen kann. Sicher bin ich mir da nicht, aber das muss erstens nichts heißen, und hält mich zweitens nicht davon ab, gelegentlich weiter an der Idee zu basteln :D
 

-horn-

Bekanntes Mitglied
moien,

Danke euch allen schonmal, aber vor allem an Marco13

einges davon liest sich ganz gut. am besten fände ich, dass wenn derjavacode einfach komplett übersetzt wird. das wäre genial :).
und punkt3 finde ich echt interessant, weil das ja noch viel mehr ernöglicht. das wäre für mein Constellation und anderen boinc projekten sicherlich genial!!! brauchst du da hilfe oder unterstützung? also mit uns hättest du einen ersten kunden! :)

Andreas
 

Marco13

Top Contributor
Ja, ein komplettes, automatisches (und "gutes") Übersetzen ist eben alles andere als trivial. Auch dazu hatte ich schon mal angesetzt - bei Java hat man dort eigentlich alle Möglichkeiten, die man braucht: Mit der BCEL - kann man den Bytecode ja beliebig auseinanderpflücken und analysieren (und, nebenbei: Man braucht sich keine Gedanken um ASTs und Parsing zu machen...). Aber WIE kompliziert es tatsächlich ist, sieht man, wenn man sich z.B. den Quellcode oder die Dissertation zu java-gpu mal anschaut - und ich bin leider viel zu wenig bewandert in solchen Dingen, als dass ich gegen sowas anstinken könnte, woran jemand seit Jahren in Vollzeit arbeitet...

Dem automatischen Übersetzen am nächsten kommt schon Aparapi, aber auch dort muss man wissen, was man tut und was man vorhat: Man kann nicht beliebigen Code "GPU'en" lassen, sondern muss explizit den Code, der parallel ausgeführt werden soll, als "Kernel" schreiben. Natürlich gibt es dort einige Einschränkungen. Der zulässige Code ist dann eigentlich schon sehr nahe an dem, was man auch direkt in OpenCL schreiben könnte. Der Vorteil ist aber, dass er alternativ in Java UND OpenCL läuft, und er viel einfacher zu starten und anzuwenden ist, weil einem viele Aufgaben abgenommen werden. Diese "Bequemlichkeit" hat aber auch ihren Preis: Wenn man einen 1 GB großen Array als Eingabe verwendet, und einen 10 byte großen Array als Ausgabe, dann wird der 1GB-Array beim Aufruf ganz transparent und bequem auf die GPU kopiert - und NACH dem Kernel-Aufruf wieder zurück :autsch: obwohl man ihne ja nicht mehr braucht. (Das könnte man aber duch geschickte Analyse des Bytecodes vermeiden).

Darüber hinaus gibt es aber auch Spezifika bei der GPU-Programmierung, die ... ... schon SEHR weit weg von "üblichen" Mustern sind. RICHTIG schwierig wäre es z.B., die "geschickte" Verwendung von Local Memory automatisch aus dem Bytecode zu erschließen... aber auch da hatte ich schon mal kurz drüber nachgedacht. Insbesondere ist das schon für einen Menschen so schwer, dass es in manchen(!) Situationen der PC vielleicht sogar besser könnte...

Der dritte Punkt, die GPU-JVM: Ja, interessant wäre sowas schon, aber wie gesagt, nichts was man (schon gar nicht ich) an ein paar freien Abenden mal schnell hinhacken könnte. Aber wenn man das ein bißchen systematischer aufziehen wollte, könnte man mal drüber nachdenken. Auf DevProjects ? BOINC steht ja schon
Applications
...
Difficult and/or complex:
...
* Java support: core client checks for the existence of JVM, reports version to scheduler. Write Java wrapper (runs JVM, gives it jar files). Note: Sztaki has already done some part of this.

Läuft das ganze auf sowas hinaus?
Im Moment geht es wohl um dieses "TrackJack", richtig?
 

Marco13

Top Contributor
Wenn das ein dezenter Hinweis sein sollte, dass ja nicht der Java-Code sondern der ByteCode ausgeführt wird: Jaja ;)

Aber Aparapi ist schon eine andere Kategorie. Man kann damit grundsätzlich auf jeder Plattform rechnen lassen, die OpenCL unterstützt - das kann eine CPU sein, oder eine der gängigen GPUs von AMD oder NVIDIA - ohne dass man irgendwelche besondere Hardware bräuchte. Das ganze ist zwar noch in der Entwicklung, aber schon ziemlich direkt nutzbar.
 

daybyter

Aktives Mitglied
Und? Benutzt es denn schon jemand hier? Vielleicht hab ich ja nen Denkfehler, aber was mich aktuell am meisten irritiert ist, dass es nur 1 Instruktionpointer für alle GPU-Kerne gibt? Was passiert nun, wenn ich eine Schleife hab, die aufgrund einer Bedingung bzgl. der übergebenen Daten abbricht? D.h. ich hab ein Array mit Daten. Element 0 erfordert 5 Schleifendurchläufe. Element 1 nur 3 Durchläufe. Was passiert dann? Wird der Kern 1 nach 3 Durchläufen stillgelegt?
Das scheint ja zu gehen, wenn ich das recht gesehen hab?
Ich hab nämlich eine Funktion, die Arrays unterschiedlicher Länge berechnen müsste. Das heisst, dass das Ergebnis von Kern 0 evtl. 5 Elemente hat, aber das Ergebnis von Kern 1 nur 3 Elemente. Daran knoble ich im Moment.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Verstehe Rekursion nicht ganz Java Basics - Anfänger-Themen 7
districon Backtracking funktioniert nicht ganz Java Basics - Anfänger-Themen 3
ZH1896ZH Verstehe verschieden Scanner und hasNext() nicht ganz Java Basics - Anfänger-Themen 2
S Ich verstehe die RegEx Tabelle von Javadoc nicht so ganz Java Basics - Anfänger-Themen 3
chuxXo Input/Output CSV Datei wird nicht ganz ausgelesen Java Basics - Anfänger-Themen 5
M Comparable und Comparator nicht ganz klar Java Basics - Anfänger-Themen 1
S Dateien/LinkedList/StringBuffer - SOrtierung klappt nicht so ganz Java Basics - Anfänger-Themen 2
T Sortieren/Suche klappt nicht ganz (String Array) Java Basics - Anfänger-Themen 2
B Erste Schritte Schleife will nicht ganz Java Basics - Anfänger-Themen 3
M Ganz einfaches Beispiel, finde den Fehler aber nicht :( Java Basics - Anfänger-Themen 2
V Ganz kurze Java-Hilfe - Ich finde meinen Fehler nicht Java Basics - Anfänger-Themen 4
Developer_X Java GridLayout nicht ganz ausgereift Java Basics - Anfänger-Themen 6
M Caeser Verschlüsselung ganz einfach(nicht für mich) Java Basics - Anfänger-Themen 6
V Insert into klappt nicht so ganz Java Basics - Anfänger-Themen 6
D Methode aufrufen funktioniert nicht ganz - Rückgabewert Bool Java Basics - Anfänger-Themen 12
S Primary Key in JTable unsichtbar, geht nicht ganz Java Basics - Anfänger-Themen 2
M Code nicht ganz einleuchtend Java Basics - Anfänger-Themen 2
M Verstehe den Quellcode nicht ganz Java Basics - Anfänger-Themen 3
G Scanner tut nicht ganz so wie er soll Java Basics - Anfänger-Themen 3
A "Hello World"-Programm läuft nicht Java Basics - Anfänger-Themen 16
D Regex greift nicht richtig Java Basics - Anfänger-Themen 4
richis-fragen JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3
richis-fragen JTable Header ausgeblendete (width = 0) nicht per mouseDragged aufziehen. Java Basics - Anfänger-Themen 9
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
K Warum wird mir auf der Konsole des Servers nicht "xxxx" angezeigt (Server/Client) Java Basics - Anfänger-Themen 4
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
richis-fragen JTable effektiv angezeigter Text ausgeben nicht Inhalt vom Model Java Basics - Anfänger-Themen 9
S nach Import von jars (PLC4x) in Eclipse kann nicht mehr compiliert werden Java Basics - Anfänger-Themen 9
J Datenüberwachung funktioniert nicht Java Basics - Anfänger-Themen 9
S Wie debugge ich dies am besten: SingleThreadExecutor führt Task nicht aus..? Java Basics - Anfänger-Themen 29
H JDK installieren jdk-21 wird nicht erkannt Java Basics - Anfänger-Themen 13
N Klassen Hintergrundfarbe in JPanel ändert sich nicht Java Basics - Anfänger-Themen 3
K Warum wird mir "Empfangen vom Client:" nicht sofort ausgegeben(Server/Client) Java Basics - Anfänger-Themen 3
mo13 JTextField funktioniert nicht Java Basics - Anfänger-Themen 4
J .jar datei öffnen funktioniert nicht Java Basics - Anfänger-Themen 17
M Methode zielnah zeigt das gewünschte Ausgabe nicht an Java Basics - Anfänger-Themen 3
M OOP Brüche nicht richtig berechnen Java Basics - Anfänger-Themen 3
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
K TicTacToe belegtes feld nicht neu besetzbar Java Basics - Anfänger-Themen 1
K TicTacToe belegtes Feld nicht neu besetzbar Java Basics - Anfänger-Themen 3
A Warum wird mein jdk nicht gefunden? Java Basics - Anfänger-Themen 3
M Queue-Datenstruktur: nach dem Elementen entfernen, das Ergebnis ist immer noch nicht optimal. Java Basics - Anfänger-Themen 3
K Programm compilierbar aber nicht ausführbar... Java Basics - Anfänger-Themen 21
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
G Mit jPackage erstellte EXE funktioniert nicht Java Basics - Anfänger-Themen 2
N BMI Rechner Was haltet ihr von dem Code habt ihr Verbesserungsvorschläge weil design teschnisch ist das nicht das geilste würde das gerne überarbeiten Java Basics - Anfänger-Themen 12
G Robot funktioniert nicht bei SelectionListener Java Basics - Anfänger-Themen 6
D MacOS: PDF erstellen geht nicht Java Basics - Anfänger-Themen 1
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
J jar Befehl wird nicht erkannt Java Basics - Anfänger-Themen 7
missy72 Erste Schritte (nicht) Deterministischer endlicher Automat Java Basics - Anfänger-Themen 9
T Getter/Setter - wie sieht ein Setter aus? Und wie nicht? Java Basics - Anfänger-Themen 34
T catch(InputMismatchException) wird nicht ausgefürt/erkannt Java Basics - Anfänger-Themen 12
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
P Netbeans installation geht nicht Java Basics - Anfänger-Themen 26
R RegEx funktioniert nicht Java Basics - Anfänger-Themen 14
T HashMap Lsite gibt die sachen nicht aus wie gewollt. Java Basics - Anfänger-Themen 3
H Counter durch gepresste Taste nur auf 1 erhöhen und nicht durchzählen lassen Java Basics - Anfänger-Themen 7
S 2 Reihen ratio-btn, eine Reihe funktioniert andere nicht Java Basics - Anfänger-Themen 4
T scanner nicht erkannt Java Basics - Anfänger-Themen 3
monsterherz Punkt Notation funktioniert nicht Java Basics - Anfänger-Themen 4
monsterherz Fehler Semikolon fehlt - ich weiss aber nicht wo da noch eines hin sollte... Java Basics - Anfänger-Themen 21
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
monsterherz einfache Methode mit Fehler den ich nicht finde Java Basics - Anfänger-Themen 21
monsterherz if / else if mit Fehler den ich leider nicht finde Java Basics - Anfänger-Themen 11
D Jar Datei startet unter Linux nicht Java Basics - Anfänger-Themen 3
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
M Konstruktor-Aufruf im Konstruktor, aber nicht am Anfang? Java Basics - Anfänger-Themen 4
G Variable aktualisiert sich nicht in rekursiver Methode Java Basics - Anfänger-Themen 4
Darkherobrine9 Import klappt nicht Java Basics - Anfänger-Themen 7
N Programm Funktioniert mit .txt Datei aber nicht mit .rtf Datei Java Basics - Anfänger-Themen 2
R Compiler-Fehler Variable wird nicht gefunden bzw. erkannt? Java Basics - Anfänger-Themen 2
_so_far_away_ Inventarisierungssystem brauche switch Cases und weiß nicht, wie ich e implementieren muss Java Basics - Anfänger-Themen 5
P BeforeEach AfterEach werden nicht ausgeführt. Java / Selenium Java Basics - Anfänger-Themen 4
I Erste Schritte Einfache Datenbank-Webseite erstellen als Nicht-IT-lerin Java Basics - Anfänger-Themen 24
N Interpreter-Fehler Compiler zeigt keine Fehler an, aber das Programm läuft nicht (BlueJ) Java Basics - Anfänger-Themen 2
D Quellcode für cmd funktioniert nicht Java Basics - Anfänger-Themen 9
C Kann mir jemand sagen warum ich nicht mal rechnen kann ? Java Basics - Anfänger-Themen 32
K Java Lotto Spiel; ich komme nicht weiter Java Basics - Anfänger-Themen 15
A JavaFX-Anwendung läuft nicht mit Selenium WebDriver Java Basics - Anfänger-Themen 0
T Meine Klasse wird nicht gefunden Java Basics - Anfänger-Themen 1
T Wie kann man es machen das ein Objekt nicht übermalt wird Java Basics - Anfänger-Themen 2
H Cast von Float nach String klappt nicht Java Basics - Anfänger-Themen 12
heinrich172 Methoden Trotz gleichem Element stimmt Vergleich nicht? Java Basics - Anfänger-Themen 7
I Entity Objekt nicht gefunden -> Webhook empfangen in der gleichen Methode (Transaktion) Java Basics - Anfänger-Themen 37
K warum kann ich das Objekt nicht erstellen ? Java Basics - Anfänger-Themen 2
MiMa Ungültiges Datum wird nicht erkannt ?? Java Basics - Anfänger-Themen 6
J Meine Mails gehen nicht raus Java Basics - Anfänger-Themen 8
Zrebna Kann Java Programm nicht in Konsole ausführen Java Basics - Anfänger-Themen 1
S Ist JDK jetzt free oder nicht? Java Basics - Anfänger-Themen 5
K Warum läuft das Programm nicht(bzw. nicht richtig) Java Basics - Anfänger-Themen 4
B Explizit Array definieren geht nicht? Java Basics - Anfänger-Themen 14
M Methoden Methode 'wiederhole' nicht gefunden (Uebersetzungsfehler) Java Basics - Anfänger-Themen 1
D Eclipse will nicht auslesen Java Basics - Anfänger-Themen 6
Temsky34 Array IndexOf nicht verfügbar Java Basics - Anfänger-Themen 18
TeacherMrSSimon Schachspiel, Werte in Figur eintragen klappt nicht Java Basics - Anfänger-Themen 23
B von Java/Eclipse verwendete Datei existiert gar nicht? Java Basics - Anfänger-Themen 6
ms_cikar Bin to Float convertieren funktioniert nicht Java Basics - Anfänger-Themen 24

Ähnliche Java Themen

Neue Themen


Oben