GetMem slow in threads

Hairy Pixels via fpc-pascal <[email protected]>
Newsgroups gmane.comp.compilers.free-pascal.general
Message-ID <CAGsUGtkuRoC0MamE5PiEi58po1r2HfCs+2mBXAD=+8ye_szePQ@mail.gmail.com>
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  -  [email protected]
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.