PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Neuronale Netze + GPU?


noid
2004-08-07, 11:06:55
moin,

kann mir einer sagen ob es verhältnismäßig viel aufwand ist die gpu als numbercrunsher zu misbrauchen? matrizen berechnungen müssten die grafikkarten ja beherrschen. gibt es irgendwelche nennenswerte einschränkungen?
nur wie sieht es mit dem transfer zur und _von_ der grafikkarte aus?

die idee ist ja nicht neu, die frage ist halt nur ob sich das lohnen könnte.

thnx.

Corrail
2004-08-07, 11:28:01
Ich hab zwar keine Ahnung, was ein numbercrunsher ist, aber du kannst sehr wohl einige Berechnungen auf die Grafikkarte auslagern. Vorallem Matrizenberechnungen sollten für Grafikkarten ein gefundenes Fressen sein. ;)
Problem dabei ist nur, dass die meisten Grafikkarten nativ auf maximal 4x4 Matrizen eingeschränkt sind (ich kenne jedenfalls keine, wo mehr als 4x4 gehen). Mit High-Level Shading Languages kannst du auch recht einfach deinen Code auf die GPU portieren. Dann kannst du dir einen Pixel/Fragment Shader schreiben, der auf einer bestimmten Anzahl an Pixel arbeitet. Die Source-Daten könntest du dann einfach als Texturen dem Pixel/Fragment Shader übergeben.
Du musst aber auch auf die Datentypen acht geben. z.B. würde es wenig Sinn machen einen 32Bit (8Bit pro Kanal) Framebuffer zu verwenden. Du solltest auf jeden Fall Floating Point Framebuffer nehmen und wenn notwendig auch mit multiple rendering targets arbeiten (wenn du mehr als 4 variablen als ausgabe hast).
Die oben beschriebenen Anforderungen werden von eine Radeon 9500 (und neuer) und von der GeForce 6 unterstützt. Bei der GeForce FX sollte es auch gehen, nur untersützt die AFAIK keine multiple rendering targets.


nur wie sieht es mit dem transfer zur und _von_ der grafikkarte aus?


Unter OpenGL geht das "recht einfach". Du kannst hier VBO bzw. PBO verwenden. Diese bieten dir die Möglichkeit einen Speicherblock auf der Grafikkarte in den Hauptspeicher zu mappen.

Stone2001
2004-08-07, 13:04:21
hmm, das Thema kommt mir sehr bekannt vor! ;) So etwas in der Art hatten wir schon einmal, damals ging es um einen RC-72-Client für Grafikkarten.
Demirug zufolge, wäre es damals kein großartiges Problem gewesen so einen Client zu proggen.

Dieses Thema wurde / wird sogar wissenschaftlich untersucht. Es gibt Untersuchungen darüber, inwiefern man die Rechenleistung moderner Grafikkarten (in der Diplomarbeit war von einer Ti4600 die Rede) für mathematisch / wissenschaftliche Berechnungen nutzen liesen.

Corrail
2004-08-07, 13:18:30
Ahja, hatte ich komplett vergessen, hier ein nützlicher Link:
http://www.gpgpu.org/

noid
2004-08-07, 15:20:42
ok, mal lesen.

BinVadim
2004-08-07, 15:21:19
Ich hab zwar keine Ahnung, was ein numbercrunsher ist, aber du kannst sehr wohl einige Berechnungen auf die Grafikkarte auslagern. Vorallem Matrizenberechnungen sollten für Grafikkarten ein gefundenes Fressen sein. ;)

... heisst das ich kann jede, aber wirklich JEDE Vector- bzw. Matrixberechnung an GPU übergeben ... also ich meine an VS?

Corrail
2004-08-07, 15:25:40
Theoretisch, ja. Du musst aber mit gewissen Beschränkungen leben. z.B. Matrizen bzw. Vekoren üder 4x4 bzw. 4 wird schwer. Sollte natürlich auch funktionieren, aber da muss man sich dann selbst Routinen schreiben, die das machen.
Und sinnvoll ist es nur, wenn man eine Operation öfter durchführen will. Also wenn ich 2 Matrizenmulitplikationen ausführen will, wäre das auf der CPU besser.

Ich würde das ganze eher im Pixel/Fragmen Shader machen als im Vertex Shader. Man hat dadurch IMHO mehr Möglichkeiten und es ist eleganter.

BinVadim
2004-08-07, 15:29:24
cool ... danke.

Vedek Bareil
2004-08-07, 19:54:47
und wat hat dat allet jetz mit de neuronale Netze zu tun?

noid
2004-08-07, 20:14:05
ob es relativ einfach wäre die berechnung der NN auf die gpu zu verlagern.
und ob das wirklich viel bringt.
darum geht es in meiner frage.

pajofego
2004-08-08, 13:42:43
Hallo,

cool da ist jemand mit der gleichen Idee wie ich ;-)! Also ich bin noch voll im Diplomarbeitsstress (numerische Simulation auf der Grafikkarte), aber ich habe mir schon ein paar Gedanken über ein NN auf der Karte gemacht. Die Gründe dafür sind recht Eindeutig. Nachdem ich meine PDEs auf der CPU und GPU implementiert hatte war ich doch recht erstaunt über die Performance bzw. Rechenpower von der Grafikkarte. Für ein numerisches Feld (256x256) erreiche ich mit der ATI 9800 Pro ca 38 fps, nVidia FX 5900 schafft ca. 18 fps die reine cpu Implementierung schafft stolze 1.07 fps. Extremer werden die Ergebnisse sobald das Feld bzw. die Textur größer wird. Für ein 512 x 512 großes Feld schafft die ATI ca. 9.8 fps und die CPU (AMD 2000+) gerade einmal 0.2 fps (GPU ist 50 mal schneller als die CPU!!!)! Also lohnenswert ist es schon rechenentensive Anwendungen auf die Karte zu schmeissen. Ob es leicht ist, das kann man nicht so pauschal beantworten, weil da doch einiges zu beachten ist, um diese Leistungssteigerung zu erlangen. Z.Zt. kenne ich nur ein OpenGL Beispiel auf gpgpu.org (Hello GPGPU), dass die Art und Weise für eine numerische Berechnung auf der Karte zeigt. Leider beinhaltet das Beispiel keine p-Buffers und schon gar nicht wie man sinvoll eine so gennante Matrix-Vector reduction implementiert.

Im Grunde sieht es folgendermaßen aus:

- Texturen ist/sind deine Matrix/zen
- Pixelshader ist dein Computational Kernel
- Render-Routine ist die große äußere Iterrationsschleife

Noch etwas, ein Paper, dass ein nn auf der GPU implementiert hat findest du hier: NN auf der GPU (http://www.sciencedirect.com/science/article/B6V14-4C4W2GN-1/2/40369706af69dedd5ffeadb84d63e03c)

Naja, es ist nicht unbedingt so einfach wie es sich anhört, aber was ist schon heute alles einfach.


Gruss pajofego