Reducing the cost of autodecoding

Stefan Koch via Digitalmars-d digitalmars-d at puremagic.com
Wed Oct 12 09:03:45 PDT 2016


On Wednesday, 12 October 2016 at 13:53:03 UTC, Andrei 
Alexandrescu wrote:
> So we've had a good run with making popFront smaller. In ASCII 
> microbenchmarks with ldc, the speed is indistinguishable from s 
> = s[1 .. $]. Smaller functions make sure that the impact on 
> instruction cache in larger applications is not high.
>
> Now it's time to look at the end-to-end cost of autodecoding. I 
> wrote this simple microbenchmark:
>
> =====
> import std.range;
>
> alias myPopFront = std.range.popFront;
> alias myFront = std.range.front;
>
> void main(string[] args) {
>     import std.algorithm, std.array, std.stdio;
>     char[] line = "0123456789".dup.repeat(50_000_000).join;
>     ulong checksum;
>     if (args.length == 1)
>     {
>         while (line.length) {
>             version(autodecode)
>             {
>                 checksum += line.myFront;
>                 line.myPopFront;
>             }
>             else
>             {
>                 checksum += line[0];
>                 line = line[1 .. $];
>             }
>         }
>         version(autodecode)
>             writeln("autodecode ", checksum);
>         else
>             writeln("bytes ", checksum);
>     }
>     else
>         writeln("overhead");
> }
> =====
>
> On my machine, with "ldc2 -release -O3 -enable-inlining" I get 
> something like 0.54s overhead, 0.81s with no autodecoding, and 
> 1.12s with autodecoding.
>
> Your mission, should you choose to accept it, is to define a 
> combination front/popFront that reduces the gap.
>
>
> Andrei

This will only work really efficiently with some state on the 
stack.
If we are to support Unicode.


More information about the Digitalmars-d mailing list