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.
Bestimmter ASM-Befehl zur Code-Optimierung gesucht.
- PureLust
- Beiträge: 1145
- Registriert: 21.07.2005 00:02
- Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
- Wohnort: am schönen Niederrhein
Bestimmter ASM-Befehl zur Code-Optimierung gesucht.
Zuletzt geändert von PureLust am 29.07.2007 19:10, insgesamt 2-mal geändert.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
- ChristianK
- Beiträge: 77
- Registriert: 13.12.2004 14:55
- PureLust
- Beiträge: 1145
- Registriert: 21.07.2005 00:02
- Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
- Wohnort: am schönen Niederrhein
1. Super !!! Vielen Dank. Genau was ich gesucht hatte.ChristianK hat geschrieben:Der Befehl lautet: Align xx

Auch für den Link zur FASM-Doku.
2. WOW !!! Was für ein Unterschied.

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.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)