[Issue 2900] New: Array appending slowed drastically since integration of druntime
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sat Apr 25 13:55:51 PDT 2009
http://d.puremagic.com/issues/show_bug.cgi?id=2900
Summary: Array appending slowed drastically since integration of
druntime
Product: D
Version: 2.020
Platform: PC
OS/Version: Windows
Status: NEW
Severity: regression
Priority: P2
Component: DMD
AssignedTo: bugzilla at digitalmars.com
ReportedBy: dsimcha at yahoo.com
Test program:
import std.stdio, std.perf;
void main() {
scope pc = new PerformanceCounter;
pc.start;
uint[] foo;
foreach(i; 0..1_000_000) {
foo ~= i;
}
pc.stop;
writeln(pc.milliseconds);
}
Timings:
DMD 2.019 (Last release before druntime): 42 milliseconds.
DMD 2.020 (First release with druntime): ~1000 milliseconds.
DMD 2.029 (Current version): ~1000 milliseconds.
DMD 2.029 (Replacing ~= with the Appender struct): 18 milliseconds.
DMD 2.029 (Replacing builtin array with rangeextra.TNew): 19 milliseconds.
This looks to be related to the block size caching scheme used by gcx.d. When
appending to two arrays simultaneously, the difference between 2.019 and 2.029
is much smaller, both in absolute and especially in relative terms:
Program:
import std.stdio, std.perf;
void main() {
scope pc = new PerformanceCounter;
pc.start;
uint[] foo, bar;
foreach(i; 0..1_000_000) {
foo ~= i;
bar ~= i;
}
pc.stop;
writeln(pc.milliseconds);
}
Timings:
DMD 2.019: ~1800 ms
DMD 2.029: ~2300 ms (Note: Still slower but not by as much even in absolute
terms)
DMD 2.029 (Using Appender instead of ~=): 49 ms
--
More information about the Digitalmars-d-bugs
mailing list