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.
I assume the problem is a mutex blocking the threads right?
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.
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.
Any ideas would be appreciated.
Regards,
Ryan Joseph
