# Java - Grafikkarte benutzen



## Developer_X (11. Apr 2010)

HI. Ich wollte mal Fragen, ob es vielleicht eine Möglichkeit gibt, einige Berechnungen auf der Grafikkarte laufen zu lassen, vielleicht gibt es ja einen Thread, in dem man auf der Grafikkarte Methoden ausführen lassen kann?

sowas z.B.=?

```
new Thread(Grafikkare???)
{
 public void run()
 {
   SuperschnelleGrafikBerechnungen();
 }
}.start();
```

Wie geht so etwas?

Danke, Developer-X


----------



## Marco13 (11. Apr 2010)

Ich muss verrückt sein, jetzt zu erwähnen, dass das mit jcuda.org - Java bindings for CUDA oder jocl.org - Java bindings for OpenCL geht 

Du kannst dich da gerne einlesen. Angefangen beim http://developer.download.nvidia.com/compute/cuda/3_0/toolkit/docs/NVIDIA_CUDA_ProgrammingGuide.pdf und OpenCL Programming Guide for Mac OS X: Introduction über http://www.drdobbs.com/high-performance-computing/207200659;jsessionid=U02VVH5QHGKVNQE1GHPCKH4ATMY32JVN (alle 15 Teile) bis zu http://developer.download.nvidia.com/compute/cuda/3_0/toolkit/docs/NVIDIA_CUDA_BestPracticesGuide.pdf. Ab Juli oder August werde ich dir dann weitere (nicht-Java-Binding-spezifische) Fragen so gut es geht beantworten (auch wenn ich mich mit CUDA und OpenCL eigentlich nicht wirklich auskenne). Aber vielleicht erbarmt sich ja vorher schon jemand anderes


----------



## Guest2 (11. Apr 2010)

Moin,



Marco13 hat gesagt.:


> Ich muss verrückt sein, jetzt zu erwähnen, dass das mit jcuda.org - Java bindings for CUDA oder jocl.org - Java bindings for OpenCL geht



Respekt! Ich glaube ich hätte nur ein schwammiges "das geht nicht so einfach" geantwortet.  

Dürfte auf jeden Fall wieder spannend werden. Ich freu mich schon. 

Gruß,
Fancy


----------



## Bergtroll (18. Jul 2010)

Besser auf OpenCL (und JOCL :bae warten, oder mit den JOGL Bindings selbst Hand anlegen, Algorithmen gibts massig unter GPGPU.org :: General-Purpose computation on Graphics Processing Units


----------



## Marco13 (18. Jul 2010)

Warum warten? JOCL gibt's schon, sogar mehrere  (und das "G" war wohl ein Tippfehler?). Natürlich wäre eine ... "nahtlosere" Integration in Java schöner. Mit Michael Bien's JOCL (oder auch Olivier Chafik's JavaCL) hat man zumindest schonmal eine schöne OO-Abstraktion von OpenCL. Aber ... an weiterem... wird gearbeitet feif: ...


----------



## Bergtroll (18. Jul 2010)

Öcht? Gibts schon? Irgendwie hatte ich vor nur nem knappen Jahr mal gesucht, da sah das alles noch so unausgegoren aus. Das "G" im JOGL war in diesem Fall aber übrigens kein Tippfehler. Der Fragesteller hatte ja nach Möglichkeiten gefragt, auf der GraKa zu rechnen. CUDA, OpenCL etc. sind ja im Prinzip die kommerzialisierte Folge von GPGPU Techniken und diese lassen sich durch eine beliebige GraKa Schnittstelle, z.B. JOGL und begrenzt auch durch Java3D (begrenzt weils nicht mehr weiterentwickelt wird und somit aktuelle Shadermöglichkeiten nicht vorhanden sind) auch anwenden.

Auf der Seite GPGPU.org :: General-Purpose computation on Graphics Processing Units sind alle möglichen Algorithmen die auf Shaderprogramme umgebaut wurden zu finden, es muss also nicht immer CUDA sein, insbesondere wenns portabel sein soll, und bis OpenCL so richtig gut unterstützt wird, insbesondere für ältere Hardware, falls überhaupt, wirds wohl noch dauern...

Eine sehr hübsche High-Level Alternative könnte imho das zu unrecht leider völlig unbekannte Aviatrix3D sein, dass Ähnlich wie Java3D einen Szenegraph basierten Zugang zu GraKa bietet, aber auf Basis von OpenGL. Wer mit Java3D zurecht kommt, wird sich auch dort schnell zurechtfinden und mit einer recht aktuellen und zumindest im Javadoc gut dokumentierten API belohnt.

Aviatrix3D ist übrigens den Aussagen von Justin Couch zufolge dennoch ganz gut in Benutzung:



> Aviatrix3D itself is very strong. We use it as the base for all our work here at Yumetech and it is the base renderer for Xj3D, which in and of itself is very popular. Sadly, I haven't managed to attract much of a development community around it, except for several long time developers. However, we haven't really been pushing much in marketing terms for the project. Because of the higher-end visualisation focus of the toolkit, it gets snubbed by "game developers" so, for example, the JOGL community doesn't have much interest in it at all.
> 
> On the development side, we are pushing forward a lot, though a very careful about how extensions are done and tested. We don't make a lot of frequent releases, just a few slower, stable ones. The changes we do make are well tested - for example AV3D is the base of the rendering here:
> 
> ...


----------



## Marco13 (19. Jul 2010)

Aviatrix3D hatte ich glaub' ich schonmal gehört, aber nicht wirklich "bewußt" wahrgenommen - bei einem kurzen Überfliegen der API sah's erstmal aus, als wäre das Renderziel da immer SWT?

Grundsätzlich kann man natürlich alles mögliche auf Shader umschreiben. Man kann auch mit einem Schraubenzieher einen Nagel in die Wand hauen :bae: Aber für komplexere Probleme bieten die neuen, auf allgemeine Programmierung ausgerichteten APIs schon Vorteile. Die Unterstützung könnte noch ein Problem für den "Massenmarkt" sein, aber vom "Massenmakt" als Ziel bin ich in diesem Thread erstmal nicht ausgegangen  Das wird sich aber auch bald erübrigen. OpenCL wird sicher bald auf etlichen Plattformen unterstützt. Mit dem Stream SDK von AMD kann man OpenCL-Programme jetzt schon auf der ganz normalen CPU laufen lassen. Und was mit Sachen wie gpuocelot - Project Hosting on Google Code so alles in der Pipeline ist, geht weit über das hinaus, was ich zu erfassen imstande bin, sieht aber auf jeden Fall vielversprechend aus....


----------



## Bergtroll (19. Jul 2010)

Oha ATI Stream habe ich mir auch noch nicht wirklich angeschaut. Was Aviatrix3D angeht, kommen als Renderingziel alle drei wichtign GUI Frameworks in Frage, also SWT, AWT und Swing


----------



## Marco13 (19. Jul 2010)

Ja, das ist das Stream SDK aber das hat nicht unbedingt was mit Stream zu tun - das "wichtige" daran ist, dass es eben eine OpenCL-Implementierung enthält  Also, wenn man's Installiert hat, kann man OpenCL-Zeux auch auf der CPU laufen lassen.


----------

