Help optimize D solution to phone encoding problem: extremely slow performace.

Renato renato at athaydes.com
Fri Jan 19 13:10:25 UTC 2024


On Friday, 19 January 2024 at 10:15:57 UTC, evilrat wrote:
> On Friday, 19 January 2024 at 09:08:17 UTC, Renato wrote:
>>
>> I forgot to mention: the Java version is using a Trie... and 
>> it consistently beats the Rust numeric algorithm (which means 
>> it's still faster than your D solution), but the Java version 
>> that's equivalent to Rust's implementation is around 3x 
>> slower... i.e. it runs at about the same speed as my current 
>> fastest numeric algorithm in D as well.
>>
>> This is what I would like to be discussing in this thread: why 
>> is D running at Java speeds and not at D speeds when using the 
>> same algorithm? I know there's small differences in the 
>> implementations, they are different languages after all, but 
>> not enough IMO to justify anything like 3x difference from 
>> Rust.
>>
>
> My guess is that's because int128 is not that much optimized 
> due to being not so popular type, though to answer what's wrong 
> would require to look at assembly code produced for both D and 
> Rust.
>
> Additionally if you comparing D by measuring DMD performance - 
> don't.
> It is valuable in developing for fast iterations, but it lacks 
> many modern optimization techniques, for that we have LDC and 
> GDC.

I am not using int128 anymore. I explained why a few posts back. 
I am using a byte array and computing the hash incrementally when 
trying different input, so that partially computed hashes are 
re-used on each try (this is a bit cheating, as Rust is not doing 
that, but I consider that to be acceptable as it's still 
computing hashes and looking up entries in the associative array).

I used all D compilers and picked the fastest one (GDC in the 
case of int128, but LDC2 in the current case).


More information about the Digitalmars-d-learn mailing list