Bestimmter ASM-Befehl zur Code-Optimierung gesucht.

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
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.

Beitrag 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.
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)
Benutzeravatar
ChristianK
Beiträge: 77
Registriert: 13.12.2004 14:55

Beitrag von ChristianK »

Der Befehl lautet: Align xx

Das Handbuch zu FASM
ChristianK for President
Benutzeravatar
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

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