Welche Technologien sollte ich noch unterstützen???
-
Hi,
ich möchte ein 3D Game progen und da mir aufgefallen ist da man dafür sehr sehr sehr schnelle funktionen für die Berechnung braucht schreibe ich eine Mathe DLL in der ich die Funktionen in Assambler schreiben möchte. (ich werde mich deshalb bestimmt noch ein paar mal hier melden :D)
Ich habe vor zu testen welche CPU eingebaut ist und danach die Funktionen zu nutzen (habe ich mit C++ schon gemanaged)
Aber was lohnt sich noch ??? Vor allem was ist schnell !!! (alles muss natürlich auch genau/richtig sein)
Auf jeden fall unterstütze ich einen reinen Pentium 1 Befehlessatz.
Aber soll ich auch P2, FPU nutzung, MMX, 3DNow!, SSE, SSE2 unterstützen ???
Sind kombinationen möglich oder ratsam ???Ich schon einige Tutorials über das grundprinzip gelesen und wollte daher fragen was sich überhaupt noch lohnt.
Und dies ist der erste teil ist er gut optimiert???
struct Matrix { float _11, _12, _13, _14; float _21, _22, _23, _24; float _31, _32, _33, _34; float _41, _42, _43, _44; }; ... Matrix m; __asm { push 0 pop m._12 pop m._13 pop m._14 pop m._21 pop m._23 pop m._24 pop m._31 pop m._32 pop m._14 pop m._41 pop m._42 pop m._43 push 1 pop m._11 pop m._22 pop m._22 pop m._22 } ...
Und stimmt es das man dafür 36 Takte benötig???
Und wiviel Takte hat mein CPU (2000 MHz) pro ms zur verfügung ???
Ich glaube das war erstmal alles DANKE !
-
ich bin mir zu 98.27935% sicher das du am falschen ort versuchst zu optimieren. ein 3d game benasprucht hauptsächlich die graka wenn du probleme mit der cpu bekommst wird das primär an schlechten algorihtmen ligen und da kannst du dann so viel in asm rumoptimieren wie du willst es bringt kaum was.
ausserdem kannst du dir zimlich sicher sein das der compiler besser optimiert als du von hand (ausser du bist voll der guru).
-
noch ein par anmerkungen:
die fpu benutzt dein programm sowieso wenn du floats benutztda musst du keine unterstüzung einbauen.
und zu deinem beispiel code... wieviel takte ein pop oder push braucht is prozessorabhängig (ausserdem noch vom caching den vohergehenden befehlen was für operanden du benutzt und und und.)
ausserdem was zur hölle soll dein code??? du puschst einfach mal alle elemente von m auf den stack und jetzt? willst du auch noch funktionsaufrufe selber proggen oder was?
2000 MHz
Hz = 1/s
-> 2000Mhz = 2000000000/s
oder in worten: 2 milliarden taktzyklen pro sekunde[ Dieser Beitrag wurde am 15.01.2003 um 20:45 Uhr von japro editiert. ]
-
Ich glaube ich lass das dann mal lieber
-
hi!
was die FPU-nutzung angeht, hat japro recht. außerdem ist ab dem 486DX sowieso standardmäßig eine FPU drinne. deshalb würde ich auch keinen emu-code verwenden/linken. das wird nur unnötig langsam.
was das optimieren angeht, sollte man das nicht immer dem Compiler überlassen, da der compiler nur sehr allgemein optimiert. man selbst kennt das problem viel genauer und kann somit auch problemspezifisch optimieren. das beste beispiel dafür hatte ich erst heute bei meiner raycasting-3d-engine (für DOS). als ich den render-teil (der erst in C geschrieben war) selber in asm umgeschrieben hatte, war die FPS-rate etwa doppelt so hoch! (bei gleichen ausgangsbedingungen natürlich!)
ansonsten würde ich lieber schon vorhandene DLLs/Bibliotheken benutzen, wenn du da noch keine so große erfahrung hast.
cu todo