Grafikkarte "benutzen"?

moritzmoritz

Mitglied
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

Top Contributor
"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
Java:
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
Java:
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

Mitglied
Wenn man also eine komplizierte Berechnung hat
Java:
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
Java:
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.

Vielen dank für deine ausführliche Antwort!

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

Marco13

Top Contributor
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.
 

Ähnliche Java Themen

Neue Themen


Oben