SynScaleMM - a multi-thread scaling Memory Manager
We just released a new unit to the source code repository.
It's a simple, small and compact MM, built on top of the main Memory Manager(FastMM4 is a good candidate, standard since Delphi 2007), architectured in order to scale on multi core CPU's (which is what FastMM4 is lacking).
Original code is ScaleMM - Fast scaling memory manager for Delphi by André Mussche.
Modifications/fork to SynScaleMM:
- Based on http://code.google.com/p/scalemm r8 revision, from Nov 19, 2010;
- Compiles from Delphi 6 up to Delphi XE;
- Some pascal code converted to faster asm;
- Some code refactoring, a lot of comments added;
- Added (experimental) medium block handling from 2048 bytes up to 16384;
- Released under MPL 1.1/GPL 2.0/LGPL 2.1 tri-license.
Our fork has even been merged with the main trunk of ScaleMM!
Here is some benchmark/testing results (details and source code are available in our
This code calls a string function (
'SomeText'+IntToStr(value);)in an infinite loop, then calculate the
average of count.
I tested this little benchmark with or without our SynScaleMM unit, and with
Delphi 7, Delphi 2007 and Delphi 2010.
Delphi 7 has our enhanced RTL patches over System.pas and SysUtils.pas.. and there is quite a difference here!
On my Core i7 with 8 cores (4 physical cores + HT), with MAX_THREADS = 100, here are the results:
The higher, the better, of course!
The big gain of Delphi 7 comes from the very optimized version of
IntToStr() we used in our
Enhanced RTL. And Delphi 2010 IntToStr() is even worse, because it
calls System.@UStrFromPCharLen every time!
But in all cases, the gain obtained by our SynScaleMM unit is worth
mentioning, and trying in your server application, for instance.
All free, since it's licensed under a MPL/GPL/LGPL tri-license.
Feedback and comments are welcome in our forum!