Array fill performance differences between for, foreach, slice
Jacob Carlborg
doob at me.com
Wed Apr 1 06:48:09 UTC 2020
On 2020-03-31 23:30, data pulverizer wrote:
> $ dmd fill.d && ./fill
You have not enabled optimizations. You should compile with `-O -release
-inline` to enable all optimizations.
Without optimizations I get numbers like these:
Slice: Mean time(usecs): 92.91, Standard Deviation: 49.8002
Foreach: Mean time(usecs): 183.95, Standard Deviation: 30.749
For: Mean time(usecs): 239.74, Standard Deviation: 30.753
With optimizations turned on I get quite varying results:
Slice: Mean time(usecs): 96.84, Standard Deviation: 52.5676
Foreach: Mean time(usecs): 95.84, Standard Deviation: 21.9244
For: Mean time(usecs): 106.73, Standard Deviation: 31.2545
Slice: Mean time(usecs): 192.03, Standard Deviation: 115.971
Foreach: Mean time(usecs): 177.06, Standard Deviation: 128.012
For: Mean time(usecs): 89.14, Standard Deviation: 25.681
Slice: Mean time(usecs): 97.74, Standard Deviation: 53.2058
Foreach: Mean time(usecs): 79.72, Standard Deviation: 11.0088
For: Mean time(usecs): 80.54, Standard Deviation: 12.06
I you care about performance you should really compile using LDC (with
`-O5 -release -flto=full -defaultlib=phobos2-ldc-lto,druntime-ldc-lto`),
which usually produces much better code:
Slice: Mean time(usecs): 50.58, Standard Deviation: 46.2621
Foreach: Mean time(usecs): 53.92, Standard Deviation: 19.8039
For: Mean time(usecs): 39.89, Standard Deviation: 7.80041
Slice: Mean time(usecs): 76.62, Standard Deviation: 73.0014
Foreach: Mean time(usecs): 49.63, Standard Deviation: 24.5672
For: Mean time(usecs): 40.02, Standard Deviation: 7.67388
--
/Jacob Carlborg
More information about the Digitalmars-d-learn
mailing list