FastMem - Include [ASM]

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

FastMem - Include [ASM]

Beitrag von cxAlex »

Wrapper für die Copy & Move - Memory Funktionen der ASM - Lib von http://www.agner.org/optimize/ .

In meinem Test ist die CopyMemory Funktion bis zu >10x schneller als CopyMemory() in PB. Die Funktionen benötigen einen Prozessor mit SSE-Support.

Download:

http://paladiumproject.q-soft.ch/public ... astMem.zip

//Edit: Update, 11:40:

Das Include prüft nun automatisch ob die benötigte SSE-Funktionalität vorhanden ist und verwendet ansonst die Standard PB - Funktionen.
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

Update:
  • Wrapper für Windows/Linux/MacOS x86 & x64 komplett
  • MoveMemory() per Compiler-Switch abwählbar (spart ~5Kb)
Download im 1. Post

Gruß, Alex
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Benutzeravatar
milan1612
Beiträge: 810
Registriert: 15.04.2007 17:58

Beitrag von milan1612 »

So "fast" ist das hier aber nicht :wink::
PB: 344 ms
ASM: 938 ms
Windows 7 x64 + Core2Duo E8400 @ 3.6 GHz
Bin nur noch sehr selten hier, bitte nur noch per PN kontaktieren
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

milan1612 hat geschrieben:So "fast" ist das hier aber nicht :wink::
PB: 344 ms
ASM: 938 ms
Windows 7 x64 + Core2Duo E8400 @ 3.6 GHz
Mit welchen Speicherblöcken bzw. mit wie vielen Wiederholungen hast du den Test gemacht? Wenn der Speicherblock > dem L2 Cache des Prozessors ist sollte die ASM - Version viel schneller sein.

SSSE3 sollte dein Prozessor eigentlich unterstützen:
http://software.intel.com/en-us/article ... mizations/

Bzw. hast dus schonmal unter x86 getestet?
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Benutzeravatar
milan1612
Beiträge: 810
Registriert: 15.04.2007 17:58

Beitrag von milan1612 »

Habs mal mit den verschiedensten Kombinationen ausprobiert und komm immer auf Ergebnisse
wo PB ca. doppelt bis 2.5-fach schneller ist. Hab jetzt keine Lust ne x86 Version zu installieren.

Du hast ne PM...
Bin nur noch sehr selten hier, bitte nur noch per PN kontaktieren
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

Ok.

Hats sonst noch jemand getestet? Würde mich interessieren was sonst für Werte rauskommen. (Immer mit Angabe von Prozessor und Speicher - Blockgröße da es entscheidend ist ob man Blöcke > oder < L2/L3 - Cache verwendet).

Gruß, Alex
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Beitrag von X360 Andy »

Bei mir ist es auch nur ca. 2mal so schnell wie PB

PB-1711
ASM-989


Bei mehrenen verschiedenen durchläufen mit verschiedenen größen, kommt es eigentlich immer auf das gleiche.

Windows 7 X86 -AMD Turion X2 RM-70 Prozessor mit 2 GHz Taktfrequenz
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

Mhm, dein Turion unterstützt kein SSSE3, daher wird er den SSE2 Code nehmen.

Gruß, Alex
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

Hab jetzt mal ein bisschen herumprobiert und festgestellt das PB bei Werten die +-48 um den L2 Cache liegen wessentlich langsamer ist als ASM (>10x) und sonst ASM zwischen gleichschnell und bis zu 2.5x schneller schwankt.

Also Ich hab 8 MB (2 * 4 MB) L2 Cache, und bei Werte die durch 4 MB teilbar sind bricht bei PB der Speed ein.
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Beitrag von Thorium »

Man sollte vieleicht noch anmerken das PB die memcpy Procedur der MSVCRT.dll nutzt.

Vieleicht ist es sinnvoll noch die Versionsnummer der DLL mit in den Vergleich einzubeziehen. Könnte mir vorstellen das es verschiedene Versionen gibt, z.B. das Win7 ne neue Version mit optimierter Kopierprozedur mitliefert.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Antworten