Seite 1 von 2

FastMem - Include [ASM]

Verfasst: 27.06.2009 11:29
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.

Verfasst: 27.06.2009 18:23
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

Verfasst: 28.06.2009 13:39
von milan1612
So "fast" ist das hier aber nicht :wink::
PB: 344 ms
ASM: 938 ms
Windows 7 x64 + Core2Duo E8400 @ 3.6 GHz

Verfasst: 28.06.2009 13:41
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?

Verfasst: 28.06.2009 13:50
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...

Verfasst: 28.06.2009 14:15
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

Verfasst: 28.06.2009 14:22
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

Verfasst: 28.06.2009 14:28
von cxAlex
Mhm, dein Turion unterstützt kein SSSE3, daher wird er den SSE2 Code nehmen.

Gruß, Alex

Verfasst: 28.06.2009 15:08
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.

Verfasst: 28.06.2009 15:36
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.