"We are back" « oc.at

c++ libraries für matrixoperationen und matlab

NullSpace 13.06.2004 - 18:10 2491 41
Posts

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Zitat von SYSMATRIX
wenns echt um killer performance geht, solltest du auch in erwähnung ziehen GPUs als rechenknechte zu misbrauchen, eine halbwegs moderne GPU sind wie geschaffen für matrix operationen(besonders wenn sie im fp format sind).
Wenn er schreibt, dass er noch nie was in C/C++ gemacht hat, sollte er allerdings die Finger davon lassen. Numerische Routinen selber zu schreiben ist wohl das schwierigste, was es gibt. Und so lang gibt's die Möglichkeit der GPU-Auslagerung noch nicht, dass es da schon vernünftige Bibliotheken gäbe.

SYSMATRIX

Legend
Legend
Registered: May 2000
Location: ~
Posts: 5019
Zitat von Ringding
Wenn er schreibt, dass er noch nie was in C/C++ gemacht hat, sollte er allerdings die Finger davon lassen. Numerische Routinen selber zu schreiben ist wohl das schwierigste, was es gibt. Und so lang gibt's die Möglichkeit der GPU-Auslagerung noch nicht, dass es da schon vernünftige Bibliotheken gäbe.
daß er noch nie was mit C/CPP gemacht hat, hab ich überlesen :/

aber sich selbt eine kleine matrix/vektor/quaternion add/sub/mul/div/transpose/invert lib zu schreiben ist echt kein kunststück ringi!

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25898
Zitat
wenns echt um killer performance geht, solltest du auch in erwähnung ziehen GPUs als rechenknechte zu misbrauchen, eine halbwegs moderne GPU sind wie geschaffen für matrix operationen(besonders wenn sie im fp format sind).
fragt sich nur noch wie du aus der renderpipeline etwas rausholen willst. textur = input daten -> pixelshader mit code -> und ergebnisse dann wieder aus der textur rausholen :) :p

scherz beiseite: für killerperformance sind SSE, SSE 2, .. 3DNow, .. zu missbrauchen. aber das ist wirklich nicht leicht!
Zitat
Wenn er schreibt, dass er noch nie was in C/C++ gemacht hat, sollte er allerdings die Finger davon lassen

SYSMATRIX

Legend
Legend
Registered: May 2000
Location: ~
Posts: 5019
A quick search brought me to some preliminary work done at the University of Washington with a GeForce4 TI 4600 pitted against a 1.5GHz P4. My Favorite excerpt from the paper: 'For a 1500x1500 matrix, the GPU outperforms the CPU by a factor of 3.2.'
http://www.cs.washington.edu/homes/...n-micro2002.pdf


BrookGPU:
generap purpose comuting with GPUs compiler:

http://graphics.stanford.edu/projects/brookgpu/

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
mat, lach nicht. Das geht wirklich schneller. Allerdings erst auf der GF 6800 :D

NullSpace

katzenknuddler
Registered: Apr 2001
Location: multiversum / li..
Posts: 658
vielleicht noch ein paar infos:

wir werden mit teil-matrizen von ca. 1500x1500 integer elementen rechnen, weil wir vermuten, dass es mit zum beispiel 10000x10000 elementen schon problematisch wird mit dem speicher. also matlab wird zum beispiel bei der großen matrizen schon ziemlich langsam, auch beim einlesen aus einer datei... welche größen schaff ich denn auf einem standardrechner?

SYSMATRIX

Legend
Legend
Registered: May 2000
Location: ~
Posts: 5019
1500x1500 ist nicht sonderlich groß, groß ist ca 2mio x 2mio :)
außerdem kommts auf die non-zero stellen der matrix an wie schnell oder wie langsam es dann im endeffekt sein wird.

was wollt ihr denn eigentlich machen ?

wie schnell muß es denn sein?
wenns echt schnell sein muß -> mit FPGA in hw implementieren

NullSpace

katzenknuddler
Registered: Apr 2001
Location: multiversum / li..
Posts: 658
konkret sind es landschaftsdaten (digitale karte) mit einer ziemlich feinen auflösung (<50 meter) und je mehr elemente wir abbilden können in eine matrix, um so besser. alle elemente dieser matrix sind mit verschiedenen höhen belegt.

könnt ich in c++ theoretisch eine matrix mit 10 000x10 000 elementen anlegen und vernünftig damit arbeiten?

/add: tja, sind diese karten einmal im speicher abgelegt brauch ich schnelle funktionen, die zum beispiel die interpolierte höhe an einem punkt liefern. dann gibts noch eine reihe anderer funktionen, die sichtlinien zwischen 2 punkten, etc berechnen sollen. all diese kleinen funktionen sollten aus dem grund flott sein, weil sie ein anderer ziemlich langsamer pseudo-rekursiver algorithmus braucht, der viel rechenzeit in anspruch nimmt (flugplanung durch die karte).

andere funktionen, wie höhenschichtmodelle und so anlegen, dürfen ruhig eine zeit brauchen.

aber auf nen FPGA oder DSP wird des ganze zeug nicht ausgelegt, sondern der darf ruhig schon mal eine nacht rechnen oder so.
Bearbeitet von NullSpace am 13.06.2004, 21:12

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Also eine Matrix-Multiplikation trau ich mir schon nicht mehr so ohne weiteres zu, wenn sie wirklich schnell sein soll (blocking wegen cache size ist da z.B. zu berücksichtigen). Wie sich das mit dem Cache auf der Grafikkarte verhält, ist halt fraglich. Da weiß ich leider noch nichts genaues darüber.

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Zitat von NullSpace
könnt ich in c++ theoretisch eine matrix mit 10 000x10 000 elementen anlegen und vernünftig damit arbeiten?
Naja brauchst halt 800MB RAM für eine einzige Kopie dieser Matrix -> wird schon sehr eng auf einer x86 Maschine. Aber glaub ja nicht, dass das Zeug schneller wird, weil du es als unerfahrener C Programmierer einfach mal in C schreibst. Die Matlab-Routinen sind schon sehr gut optimiert, es ist schon nichttrivial, mit der Geschwindigkeit überhaupt mitzuhalten, geschweige denn, sie zu schlagen.

Wenn's Matlab für Itanium gibt, dann kauft euch so ein Ding mit ein paar Gig RAM und vergiss das wieder mit C++.

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25898
unpackbar, das geht ordentlich am sinn vorbei :D

ok.. ich hab das pdf nicht (ganz) gelesen: benutzen die für die CPU irgendwelche speziellen instruktionen wie siehe oben? ausserdem muss input + output in/aus den videoram kommen => über AGP und das is ebenfalls nicht schnell. und dann kommt dazu, dass wirklich komplexe funktionen in shadern, wie zB inverse von matrizen > 3x3 berechnen, noch nicht möglich sind, weil shader nur bis zu einer gewissen anzahl von instruktionen gut performen (kommt auf die grafikkarte an).

NullSpace

katzenknuddler
Registered: Apr 2001
Location: multiversum / li..
Posts: 658
Zitat von Ringding
Aber glaub ja nicht, dass das Zeug schneller wird, weil du es als unerfahrener C Programmierer einfach mal in C schreibst. Die Matlab-Routinen sind schon sehr gut optimiert, es ist schon nichttrivial, mit der Geschwindigkeit überhaupt mitzuhalten, geschweige denn, sie zu schlagen.

tja :) das darf ich leider nicht, weil mein professor es in c++ haben will (er meint ich soll ja auch was dabei lernen, weil in matlab gehts ja so gschwind *g*).
aber ich hab schon ein paar der funktionen die ich brauch in matlab geschrieben und die werd ich schon portieren können in c++. war noch nicht sooo viel.

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Zitat von Ringding
Wenn's Matlab für Itanium gibt, dann kauft euch so ein Ding mit ein paar Gig RAM und vergiss das wieder mit C++.
Hmm, das gibt's anscheinend nur für 32 bittige Architekturen (schade).

Also -> Itanium anschaffen und Intel MKL verwenden.

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Zitat von Ringding
Allerdings erst auf der GF 6800 :D
Das mit der GF 6800 hab ich geschrieben, weil die erstens viel komplexere Shader verwenden und zweitens FP-Zahlen im double Format verarbeiten kann.

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Die Operationen, die du oben erwähnt hast, schauen alle nach einfachen Array Lookups aus. Die sind natürlich kein Problem, trotzdem sollte man aber einen genügend großen Adressraum haben (möglicherweise >32 bit), wenn das ganze nicht furchtbar kompliziert werden soll.
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz