<html><body><div dir="ltr">I diagnosed a threading performance problem down to merely calling GetMem. I did a test and it was 4x slower to call GetMem on 8 threads (my computer core count) than one thread. Due the large amount of allocations in the program it was actually slower to multithread the task.</div><div dir="ltr"><br></div><div dir="ltr">I assume the problem is a mutex blocking the threads right?</div><div dir="ltr"><br></div><div dir="ltr">The solution would be to be to use a different allocator but because FPC only allows overriding NewInstance per class it would be mean you would need a mutex anyway to control which allocator was used depending on the thread.</div><div dir="ltr"><br></div><div dir="ltr">Maybe a threadvar could be used to get the allocator for the class type? I haven’t tried but I know there’s a penalty to use that too and it may wipe out of the gains again. I’m not sure what a threadvar is though or how it’s implemented just that the docs say it could be slow.</div><div dir="ltr"><br></div><div dir="ltr">Any ideas would be appreciated.</div>
<br clear="all"><div><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">Regards,</div> Ryan Joseph</div></div></body></html>