Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Langsamer mit Optimierung?
Spaceguide - Do 08.12.05 12:42
Titel: Langsamer mit Optimierung?
Hi, habe gerade was ausprobiert und da ist mir folgendes aufgefallen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure Bla(i: integer); {$O-} var j : integer; begin j := i; end; {$O+} |
Diese Prozedur wird doppelt so schnell, wenn man die Optimierung ausschaltet.
Bei Optimierung werden diese Zeilen weggekürzt:
mov eax,[ebp-$04]
mov [ebp-$08],eax
Warum wird das dann langsamer?
delfiphan - Do 08.12.05 13:42
Bei mir ist die optimierte Variante 52% schneller (D7).
opfer.der.genauigkeit - Do 08.12.05 13:45
Hi,
welche Delphiversion verwendest du?
Spaceguide - Do 08.12.05 14:50
Ich benutze auch D7. Vielleicht liegts an der CPU (hier Athlon MP)?
Horst_H - Do 08.12.05 15:37
Hallo,
bei so kurzen Code-abschnitten spielt zuviel eine Rolle.
Welchen Zustand hatten die Register vor dem Aufruf, kommt die Cpu besser damit zurecht, wenn zwischendurch irgendwas sinnloses passiert um mit dem out-of-order und Registerrenaming fertig zu werden. liegen die Adressen fuer den Code und die Daten guenstiger.
Bei meinem Ahtlon64 939 ist das sortieren von 8-Byte grossen Felder teilweise schneller als mit 4 Byte , mancher Code wird schneller wenn zwischendrin einfach was nutzloses steht nur um zeit fuer die laufende Verarbeitung zu gewinnen, damit die anschliessende Arbeit nicht mehr stockt.
Bei einem Programm mit der Fpu kam ich bis auf doppelte Taktrate bei der Bestimmung des unnormalisierten Normalenvektors (40 Befehle 20 Takte) FPU und CPU Befehle gut gemischt.
Athlon reagiert auch pingelig auf Sprungadressen alignment.
lies mal 22007.pdf von AMD
Gruss Horst
delfiphan - Do 08.12.05 18:34
Hi, meine 52%-Messung stammt natürlich nicht von einem einmaligen Ausführen; das ist ein Mittelwert aus einigen Milliarden Durchläufen. Für beide Funktionen habe ich soweit möglich die gleiche Bedingung geschafft.
Spaceguide - Do 08.12.05 19:14
Baue ich bei der optimierten Variante ein
ein, so ist es 3 mal so schnell wie ohne :-/. Ich glaube der Delphi-Compiler mag keine Athlons (die Effekte habe ich auf meinem Centrino nicht).
Horst_H - Do 08.12.05 19:32
Hallo,
das kann man wohl sagen.
Bei Fastcode project gibt es auch eine Tabelle ueber die rel. Laufzeitunterschiede.
http://dennishomepage.gugs-cats.dk/BranchTargetAlignInvest.htm
Nur mal die Durchschnittswerte bei CharPos sind es 40% jenachdem wo der Code steht, da sieht der P4 schon viel besser aus,auch wenn wenn bei den Projekten oft der Athlon weit bis ganz vorne ist
Quelltext
1: 2: 3: 4: 5: 6: 7:
| Average P3 21,4 P4 5,1 P4E 5,7 XP 22,2 Opteron 25,4 PM B 13,8 |
Gruss Horst
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!