Už je to nějakou dobu, co jsem psal o FastMM4 naposledy a mezitím se něco změnilo. Vývoj FastMM4 byl nahrazen za FastMM5 s možnou komerční licencí a objevil se fork FastMM4-AVX. Fork mají na svědomí autoři známého emailového klienta Bat!, což není špatná vizitka.
Následující text berte jako informativní a případně testy podle pravidla co si sám nezkusím, tomu nevěřím.
FastMM5
FastMM5 je kompletní přepis původního FastMM4 s důrazem na odstranění slabších věcí v předchozí verzi, hlavně u multithread aplikací.
Kompilátory: Delphi XE3 a pozdější
Platformy: Windows, 32-bit and 64-bit
Licence: duální GPL3 nebo komerční
FastMM4-AVX
FastMM4-AVX je evoluce původního FastMM4 4.992 o určité optimalizace, primárně za použití AVX resp. Enhanced REP MOVSB/STOSB a lepším zamykáním v případě multithread aplikací a další mikrooptimalizace.
Kompilátory: Delphi 5 a pozdější, FPC
Platformy: Windows, 32-bit and 64-bit
Licence: stejná jako FastMM4
Pozn.: AVX se v 32bit modu nepoužívá
Pro zajímavost jsem si udělal nějaké orientační testy, za použití FastCodeBenchmark a výsledek mne překvapil. Upozorňuji,
že se jednalo o 32 bit testy, v 64bit. nebo na jiném procesoru (u mne to byl můj Ryzen 5 4500U) by to mohlo být jiné, ale výsledek FastMM5 je velmi zajímavý.
Vybral jsem si namátkou jeden single thread, a několik multithread testů. Nedělal jsem kompletní testy celého benchmarku, takže to je určitě zkreslené.
Výchozí FastMM4 z instalace Delphi 10.3.3
ReallocMem Small (1-555b) benchmark MTicks = 140944 Mem = 38484
Raw Performance 2 threads MTicks = 46837 Mem = 59676
Raw Performance 4 threads MTicks = 51918 Mem = 79644
Raw Performance 8 threads MTicks = 57118 Mem = 117020
FastMM4.992 z github
ReallocMem Small (1-555b) benchmark MTicks = 155942 Mem = 38484
Raw Performance 2 threads MTicks = 55028 Mem = 57116
Raw Performance 4 threads MTicks = 61361 Mem = 77084
Raw Performance 8 threads MTicks = 64236 Mem = 115740
FastMM4 AVX
ReallocMem Small (1-555b) benchmark MTicks = 152556 Mem = 38484
Raw Performance 2 threads MTicks = 41105 Mem = 60956
Raw Performance 4 threads MTicks = 43867 Mem = 82204
Raw Performance 8 threads MTicks = 42295 Mem = 118300
FastMM5
ReallocMem Small (1-555b) benchmark MTicks = 161151 Mem = 37204
Raw Performance 2 threads MTicks = 10755 Mem = 68692 !!!!!!!!
Raw Performance 4 threads MTicks = 13671 Mem = 101972 !!!!!!!!
Raw Performance 8 threads MTicks = 13004 Mem = 164892 !!!!!!!!
A na závěr pro porovnání, bez memory manageru, tak, že se všechna alokace nechává na Windows 10, via. prehistorický memorymanager ze Synapse.
Bez MM
ReallocMem Small (1-555b) benchmark MTicks = 264868 Mem = 34644
Raw Performance 2 threads MTicks = 57284 Mem = 69272
Raw Performance 4 threads MTicks = 111537 Mem = 104740
Raw Performance 8 threads MTicks = 178017 Mem = 143844
Zavěr: cílem bylo upozornit na nové dvě možnosti v oblasti MM v Delphi.
Výchozí manažer z instalace Delphi je slušný, pokud nemáte peníze nebo nemáte podporovanou verzi použijte FastMM4 AVX, a FastMM5 mi ve vícevláknech úplně vyrazil dech svou rychlostí.