Reducing the cost of autodecoding

Andrei Alexandrescu via Digitalmars-d digitalmars-d at puremagic.com
Wed Oct 12 16:47:45 PDT 2016


On 10/12/2016 04:02 PM, safety0ff wrote:
> On Wednesday, 12 October 2016 at 16:24:19 UTC, Andrei Alexandrescu wrote:
>>
>> Remember the ASCII part is the bothersome one. There's only two
>> comparisons, all with 100% predictability. We should be able to
>> arrange matters so the loss is negligible. -- Andrei
>
> My measurements:
> ldc -O3  -boundscheck=off -release -mcpu=native -enable-inlining
> ldc version 1.0.0
>
> overhead 0.350s
> bytes    0.385s

Wait, so going through the bytes made almost no difference? Or did you 
subtract the overhead already?

> current autodecoding 0.915s (with new LUT popFront)
> copy-pasting std.utf decoding functions into current file 0.840s
> adding ASCII branch hints (llvm_expect) 0.770s
>
> With the branch hints LDC moves the non-Ascii code outside of the loop
> and creates a really tight loop body.

I think we should define two aliases "likely" and "unlikely" with 
default implementations:

bool likely(bool b) { return b; }
bool unlikely(bool b) { return b; }

They'd go in druntime. Then implementers can hook them into their 
intrinsics.

Works?


Andrei


More information about the Digitalmars-d mailing list