06.05.2020 09:43, data pulverizer пишет:
On Wednesday, 6 May 2020 at 05:50:23 UTC, drug wrote:
General advice - try to avoid using `array` and `new` in hot code.
Memory allocating is slow in general, except if you use carefully
crafted custom memory allocators. And that can easily be the reason of
40% cpu usage because the cores are waiting for the memory subsystem.
I changed the Matrix object from class to struct and timing went from
about 19 seconds with ldc2 and flags `-O5` to 13.69 seconds, but CPU
usage is still at ~ 40% still using `taskPool.parallel(iota(n))`. The
`.array` method is my method for the Matrix object just returning
internal data array object so it shouldn't copy. Julia is now at about
34 seconds (D was at about 30 seconds while just using dmd with no
optimizations), to make things more interesting I also did an
implementation in Chapel which is now at around 9 seconds with `--fast`
flag.
Thing are really interesting. So there is a space to improve performance
in 2.5 times :-)
Yes, `array` is smart enough and if you call it on another array it is
no op.
What means `--fast` in Chapel? Do you try `--fast-math` in ldc? Don't
know if 05 use this flag