www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 17039] New: int[2][]'s sort are slow with default comparator

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