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
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to