Seite 1 von 1

Bestimmter ASM-Befehl zur Code-Optimierung gesucht.

Verfasst: 26.07.2007 03:41
von PureLust
Wenn ich Geschwindigkeitsvergleiche zwischen verschiedenen Variationen einer Routine mache, so stelle ich immer wieder fest, das eine identische Routine einige Zeilen später im Code erheblich länger oder kürzer braucht als die exakt gleiche Routine an einer anderen Stelle.

Zur Zeitmessung nutze ich bereits einen HQ-Timer, was diese Fehlerquelle schon mal minimiert - aber die Unterschiede sind ohnehin so enorm dass selbst ElapsedMilliseconds() keine Probleme damit hätte diese zu messen.
So braucht z.B. von 2 identischen und aufeinander folgenden For/Next-Leerschleifen die eine 1458ms und die andere ganze 2279ms.
Dies mach einen Geschwindigkeitsunterschied von fast 60% aus.
Ich kann mir dies nur dadurch erklären, dass sich die Routinen an zwei verschiedenen Stellen im Speicher befinden und die eine halt etwas optimaler liegt als die andere.

Soweit ich mich erinnern kann hatte remi_meier oder Deem mal in einem seiner BP-Optimizer einen ASM-Befehl in den Code eingefügt, der sicher stellt, dass der folgende Befehl auf einer durch 4 teilbaren Speicherstelle beginnt (Zwischenräume wurden mit NOP aufgefüllt).

Ich würde gerne mal ausprobieren ob sich die Unterschiede dadurch reduzieren lassen können.
Kennt zufällig jemand von Euch diesen ASM-Befehl bzw. diese Optimierungsmöglichkeit?

Schon mal vielen Dank im Voraus,
PureLust.

Verfasst: 26.07.2007 08:27
von ChristianK
Der Befehl lautet: Align xx

Das Handbuch zu FASM

Verfasst: 27.07.2007 01:58
von PureLust
ChristianK hat geschrieben:Der Befehl lautet: Align xx
1. Super !!! Vielen Dank. Genau was ich gesucht hatte. :allright:
Auch für den Link zur FASM-Doku.

2. WOW !!! Was für ein Unterschied. :o

Schleifendauer ohne !Align : 2282 ms
Schleifendauer mit !Align 4 : 1588 ms

Kein Wunder also, dass ein und die selbe Schleife mal schneller und mal langsamer war.
Die Langsamere lag vermutlich einfach nur an einer ungeraden Speicherstelle.

Also nochmals Dank,
PureLust.