.| Autor | Beitrag |
|---|---|
|
000 07.01.2002, 22:19 Tron |
ich hab mit eine einfache Image-klasse geschrieben, die BMPs (fuer texturen in OpenGL) laden kann
jetzt habe ich mal den assemblercode des constructors angeschaut: (mit parameter -S kompiliert) vor allem DAS machte mich stutzig: mov edx,dword ptr [ebp+8] auch das aender des codes auf erst als ich den code auf was ich auch recht seltsam finde ist, dass fuer jede variable die auf 0 gesetzt wird extra ein register geXORt wird... ich hab' saemtliche optimierungsoptionen ausprobiert... 'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams 'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett |
|
Profil || Suche |
|
001 09.01.2002, 16:35 Prefect |
Manche Compiler deaktivieren automatisch alle Optimierungen, wenn du Debuginformationen mit reinkompilierst (da ansonsten Code in der Gegend rumverschoben würde usw.). Vielleicht ist das dein Problem. cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |
|
002 10.01.2002, 22:59 CY4N1D3 |
*delete* --ob nun delphi, c oder java. kein programm lässt sich mit allen 3en gleichschnell entwickeln. Dieser Beitrag wurde am 10.01.2002 um 22:59 von CY4N1D3 bearbeitet. |
|
Profil || Suche |
|
003 11.01.2002, 18:28 LePrau |
Das mit dem XORen ist ganz einfach: Logisch ist auch das FF XOR FF = 0 Da bei XOR ax zweimal auf ein Prozessorregister zugegriffen wird, muss man nicht auf das RAM zugreifen und somit kostet XOR (nach meinen Informationen) nur 2 Zyklen. Man sieht also: Geschwindigkeitsverhältnis von 1:4 oder sogar noch besser. |
|
Profil || Suche |
|
004 11.01.2002, 21:51 Tron |
das mit dem xor ist mir schon klar, aber so sinnlose sachen wie: sowohl ecx als auch edx wird auf 0 gesetzt und so geht es grade weiter! das raff' ich net warum?! wenn ich das von hand geschreiben haette, wuerde ich es so machen: ok, bei nem konstruktor von einer klasse fuer bilder ist das nicht so dramatisch, aber z.b. bei einer klasse fuer nen vektor, da wird der konstruktor etlich tausendmal benutzt! --'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams 'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett |
|
Profil || Suche |
|
005 12.01.2002, 13:48 Prefect |
Hast du meinen Post gelesen (bzgl. Debug-Compiles)? Übrigens verbraucht mov nicht unbedingt 8 Cycles. In diesem Fall wäre z.B. die Cacheline bei [ebp+8] im internen Prozessorcache (nicht L1, sondern der Cache direkt an der ALU). Trotzdem ist das natürlich behindertertstes Compilerverhalten. cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |
|
006 12.01.2002, 19:05 Tron |
jo, habe ich gelesen, ich kompilier mal normal (mit allen optimierungen) und schau mir mal das produkt mit dem turbo debugger an; wenn das dann immernoch so ne katastrophe ist, dann gute nacht vater...aeh...borland --'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams 'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett |
|
Profil || Suche |
|
007 16.01.2002, 16:33 Tron |
ahhh... GANZ langsam bekomm ich plack! ich habe folgende problemstellung: inline Vector Camera::Forward() const jetzt will ich diesen vektor in einen neuen reintun, also: so... dann schauen wir mal was der gute compiler daraus macht... AAAAHHHHHH!!! der schiebt das durch 2 (!!!) temporaere objekte durch! das ist ja totaler stumpfsinn! ich hab auch eine methode gefunden, mit der er es direkt geht, ohne ein einziges temporaeres objekt, das sieht in asm dann so aus: mov edx,dword ptr [ebp-80] und so sieht der code dazu aus: inline const Vector& Camera::Forward() const tja, es funktionert, blos ist diese methode UEBELSTER hack! reinterpret_cast halt... grrrrrr ich hab' mal etwas rumprobiert und dieses problem ergibt sich generell fuer folgende konstellation: klasse f() obj = f(); im detail: die daten werden folglich von den parametern in das erste objekt kopiert, dann in das zweite und schlieslich in das zielobjekt. hat jemand ne idee wie man das eleganter hinbekommt? ps: ich hab's auch mit kompilieren direkt zu 'ner exe und dann mit turbodebugger angucken probiert, anstatt mit in assembler kompilieren: das ergebnis ist genau das gleiche --'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams 'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett |
|
Profil || Suche |
|
008 22.01.2002, 16:59 Tron |
so, ich habe mein matrix-vektor-kopier-problem (post 007) geloest: anderer compiler! MinGW rult! statt diesem stuss: (borland) erzeugt es diese krass optimierte sequenz: (MinGW) oder in 'normalem' assembler: das ist wohl die optimalloesung, da hier sequentielles lesen und schreiben von RAM voll ausgenuetzt wird. --'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams 'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett |
|
Profil || Suche |

