DMD is faster than LDC and GDC
Daniel Kozak via Digitalmars-d
digitalmars-d at puremagic.com
Thu Nov 12 04:22:58 PST 2015
V Thu, 12 Nov 2015 12:10:30 +0000
John Colvin via Digitalmars-d <digitalmars-d at puremagic.com> napsáno:
> On Thursday, 12 November 2015 at 11:59:50 UTC, Daniel Kozak wrote:
> > code:
> >
> > import std.stdio;
> >
> > auto fmttable(immutable(string[][]) table) {
> >
> > import std.array : appender, uninitializedArray;
> > import std.range : take, repeat;
> > import std.exception : assumeUnique;
> >
> > auto res = appender(uninitializedArray!(char[])(128));
> > res.clear();
> >
> > if (table.length == 0) return "";
> > // column widths
> > auto widths = new int[](table[0].length);
> >
> > foreach (rownum, row; table) {
> > foreach (colnum, cell; row) {
> > if (cell.length > widths[colnum])
> > widths[colnum] = cast(int)cell.length;
> > }
> > }
> >
> > foreach (row; table) {
> > res ~= "|";
> > foreach (colnum, cell; row) {
> > int l = widths[colnum] - cast(int)cell.length;
> > res ~= cell;
> > if (l)
> > res ~= ' '.repeat().take(l);
> > res ~= "|";
> > }
> > res.put("\n");
> > }
> >
> > return res.data.assumeUnique();
> > }
> >
> > void main() {
> >
> > immutable table = [
> > ["row1.1", "row1.2 ", "row1.3"],
> > ["row2.1", "row2.2", "row2.3"],
> > ["row3.1", "row3.2", "row3.3 "],
> > ["row4.1", "row4.2", "row4.3"],
> > ["row5.1", "row5.2", "row5.3"],
> > ];
> >
> > writeln(fmttable(table));
> > int i;
> > for (i=0; i < 1000000; ++i) {
> > fmttable(table);
> > }
> > writeln(i);
> > }
> >
> > timings:
> >
> > DMD (-O -release -inline -boundscheck=off):
> > real 0m0.003s
> > user 0m0.000s
> > sys 0m0.000s
> >
> > LDMD2-ldc2 (-O -release -inline -boundscheck=off):
> > real 0m1.071s
> > user 0m1.067s
> > sys 0m0.000s
> >
> >
> > GDC (-O3 -finline -frelease -fno-bounds-check):
> > real 0m0.724s
> > user 0m0.720s
> > sys 0m0.003s
>
> What versions of these compilers? I suspect the majority (maybe
> 80%-ish) of the time is spent allocating memory, so you might be
> seeing GC improvements in recent DMD
DMD 2.069
LDC 2.067
GDC 2.065
No it is not cause by memory allocations.
It seems DMD can recognize that fmttable has same result every time, so
it does compute it only once.
More information about the Digitalmars-d
mailing list