Ringding
Pilot
|
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
|
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
AdministratorLegends never die
|
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  scherz beiseite: für killerperformance sind SSE, SSE 2, .. 3DNow, .. zu missbrauchen. aber das ist wirklich nicht leicht! Wenn er schreibt, dass er noch nie was in C/C++ gemacht hat, sollte er allerdings die Finger davon lassen
|
SYSMATRIX
Legend Legend
|
|
Ringding
Pilot
|
mat, lach nicht. Das geht wirklich schneller. Allerdings erst auf der GF 6800
|
NullSpace
katzenknuddler
|
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
|
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
|
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
|
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
|
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
AdministratorLegends never die
|
unpackbar, das geht ordentlich am sinn vorbei  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
|
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
|
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
|
Allerdings erst auf der GF 6800  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
|
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.
|