# Grafikkarte "benutzen"?



## moritzmoritz (24. Okt 2012)

Hallo,

wollte nur fragen ob es eine Möglichkeit gibt die Grafikkarte des Rechners zu beutzen? Hat da jemand einen Link (auch auf englisch) ?


----------



## Robokopp (24. Okt 2012)

Ja mit jogl 

Gesendet von meinem GT-I9100 mit Tapatalk 2


----------



## Gast2 (24. Okt 2012)

moritzmoritz hat gesagt.:


> Hallo,
> 
> wollte nur fragen ob es eine Möglichkeit gibt die Grafikkarte des Rechners zu beutzen? Hat da jemand einen Link (auch auf englisch) ?



1. Wofür?
2. Was heißt bei dir benutzen?


----------



## Tiim (24. Okt 2012)

Ich kenne mich da nicht besonders aus, aber soweit ich weiss geht sowas nur mit einem OpenGl shader: OpenGL Shading Language Diese kannst du mit den Java OpenGL wrappern LWJGL oder JOGL der Grafikkarte übergeben.


----------



## moritzmoritz (24. Okt 2012)

jurom hat gesagt.:


> 1. Wofür?
> 2. Was heißt bei dir benutzen?



1. ich beschäftige mich zurzeit mit Spieleprogrammierung und deshalb interessiere ich mich auch für die Hardware (in diesem Fall eben die Grafikkarte) was ich weiß ist, dass die Grafikkarte dafür da ist um floating-zahlen etc. besser zu berechnen, weil der "normale" Prozessor eher für Integerzahlen ausgelegt ist, berichtigt mich falls das nicht so ist, .. also wollte ich wissen wie ich der Grafikkarte sage "Hör zu habe hier die x, y und z werte das objekt funktioniert so bitte sag mir doch, was der User sieht" (Sehr allgemein ausgedrückt)

2. Bei mir benutzen heißt, dass ich eine Klasse habe, die eine Schnittstelle bietet um mit einer Funktion die Rechenleistung auf die Grafikkarte zu übertragen ...

sind für solche Sachen nicht die Grafikkartentreiber zu gebrauchen? Oder wofür werden diese benutzt ?

Moritz


----------



## Marco13 (24. Okt 2012)

"Floating-Zahlen etc. 'besser' berechnen" macht so natürlich keinen Sinn. Wenn es nicht um Grafik geht (wie mit OpenGL), sondern um allgemeine Berechnungen (also alles, was mit dem Begriff "GPGPU" angefangen hat), muss man auch weiter unterscheiden. Grafikkarten/GPUs sind nicht schneller als eine normale CPU. Eher langsamer. Der wichtige Unterschied ist, dass die GPUs darauf ausgelegt sind, viele Daten auf einmal zu bearbeiten. Früher waren das 'alle Pixel auf dem Bildschirm', aber das wurde eben immer weiter verallgemeinert. Heute ist eine GPU dank CUDA und OpenCL ein Rechenknecht für alle Formen von Daten-Parallelen Aufgaben - quasi eine riesige, programmierbare Vektormaschine. 

Wenn man also eine komplizierte Berechnung hat 

```
float computeSomething(float input) { ... }
```
(egal ob floating point oder nicht), dann wird die auf der CPU schneller laufen, egal, was man macht. Wenn man aber sowas hat wie

```
float[] computeSomething(float input[]) { ... }
```
und dort "viele" float-Werte übergeben werden, und auf allen die gleiche Berechnung durchgeführt werden muss, und die "vielen" Ergebnisse als Array zurückgegeben werden müssen, und das wirklich lange dauert und zeitkritisch ist, könnte man sich schon überlegen, ob man das auf die GPU auslagert. 

Möglichkeiten dafür gibt's einige. Auf [#GPARS-231] Add support for GPUs - jira.codehaus.org ist eine Auflistung. Aparapi, JOCL, JOCL oder JCuda kämen dafür in Frage. Aparapi könnte am zugänglichsten sein, aber habe es selbst leider noch nicht sooo ausführlich verwendet.


----------



## moritzmoritz (24. Okt 2012)

Marco13 hat gesagt.:


> Wenn man also eine komplizierte Berechnung hat
> 
> ```
> float computeSomething(float input) { ... }
> ...



Vielen dank für deine ausführliche Antwort!

meinst du erste 3D-Spiele lassen sich noch ohne einen GPU berechnen?


----------



## Marco13 (24. Okt 2012)

Mir ist nicht klar, was genau du auf der GPU machen willst. Alles, was mit 3D und Rendering zu tun hat, "läuft" ja automatisch auf der GPU. Wenn es darüber hinaus irgendwelche aufwändigen, Daten-parallelen Berechnungen zu tun gibt, könnte man die auch auf die GPU bringen, aber was das (bei einem ersten 3D-Spiel, ganz allgemein) sein sollte, leuchtet mir nicht ganz ein.


----------

