digitalmars.D.bugs - [Issue 17039] New: int[2][]'s sort are slow with default comparator
- via Digitalmars-d-bugs (58/58) Dec 28 2016 https://issues.dlang.org/show_bug.cgi?id=17039
https://issues.dlang.org/show_bug.cgi?id=17039 Issue ID: 17039 Summary: int[2][]'s sort are slow with default comparator Product: D Version: D2 Hardware: x86_64 OS: Mac OS X Status: NEW Severity: enhancement Priority: P1 Component: dmd Assignee: nobody puremagic.com Reporter: moskou.moskou gmail.com when I want to sort int[2][], I noticed that if I use my comparator, I can sort more faster. ------------------------------------------ import std.stdio, std.array, std.datetime, std.random, std.algorithm; void main() { //make random array int[2][] base = new int[2][1000000]; Random gen = Random(unpredictableSeed); foreach (ref d; base) { d[0] = uniform(0, 1_000_000_000, gen); d[1] = uniform(0, 1_000_000_000, gen); } //1: simple auto b = base.dup; StopWatch sw; writeln("START"); sw.start; sort(b); sw.stop; writeln("END ", sw.peek.msecs, "ms (type 1)"); sw.reset; //2: my comparator auto c = base.dup; writeln("START"); sw.start; sort!((l, r){ foreach (i; 0..2) { if (l[i] != r[i]) return l[i] < r[i]; } return false; })(c); sw.stop; writeln("END ", sw.peek.msecs, "ms (type 2)"); sw.reset; assert(equal(b, c)); } ------------------------------------------ This code output START END 520ms (type 1) START END 330ms (type 2) with dmd(v2.072.1) -O -release source.d It seem slower about x1.5, is this a bug? --
Dec 28 2016