Article: Increasing the D Compiler Speed by Over 75%

Walter Bright newshound2 at digitalmars.com
Tue Jul 30 11:22:57 PDT 2013


On 7/30/2013 11:02 AM, Dmitry Olshansky wrote:
> 26-Jul-2013 23:17, Walter Bright пишет:
>> How about a pull request so we can try it out?
>
> Preliminary pull is here:
> https://github.com/D-Programming-Language/dmd/pull/2436
>
> So far it looses a bit.

:-) That's often been my experience.


> I'm still playing with it, looking at load factor,
> distribution of sizes, profiling.
>
> So far observations are that SpookyHash is slower then the one that was there
> thus stealing a few percents of speed. That is then hardly regained by a faster
> lookup of a slot:
> almost all of "large" tables were 31 in size and you have special case for that
> anyway.
>
> What bothers me is that while I've been hacking at this I couldn't shake off the
> feeling that AA code assumes NO FULL HASH COLLISIONS at all?

I don't know what you mean, as it has a collision resolution system. See 
embedded code below.


> Isn't that betting on luck (and a crude hash) a little too much (esp in 32 bit
> mode)?
>
> That is e.g. in code pasted from aav.c Key is only a hash and there is no way
> whatsoever to discern a full hash collision.
>
> Value _aaGetRvalue(AA* aa, Key key)
> {
>      //printf("_aaGetRvalue(key = %p)\n", key);
>      if (aa)
>      {
>          size_t i;
>          size_t len = aa->b_length;
>          if (len == 4)
>              i = (size_t)key & 3;
>          else if (len == 31)
>              i = (size_t)key % 31;
>          else
>              i = (size_t)key % len;
>          aaA* e = aa->b[i];
>          while (e)
>          {
>              if (key == e->key)
>                  return e->value;
>              e = e->next;

**** ^^^ collision resolution code ^^^ *****

>          }
>      }
>      return NULL;    // not found
> }




More information about the Digitalmars-d-announce mailing list