PR 51386

François Dumont frs.dumont@gmail.com
Tue Dec 6 08:05:00 GMT 2011


On 12/05/2011 10:13 PM, Paolo Carlini wrote:
> Hi,
>
> >     Tested under linux x86_64, load_factor test is much faster now.
>
> How much, exactly?

About 2000 times faster. I have temporarily added the slow part of 
load_factor test in a performance test to measure it, do you want to 
keep this ? I hadn't proposed it before because a max load factor of 0.3 
is quite unusual. load_factor test simply challenge a possible use case 
that has little chances to be experimented in a production environment.

>
> >
> > 2011-12-05  François Dumont <fdumont@gcc.gnu.org>
> >
> >         PR 51386
>
> PR libstdc++/51386
>
> >
> >         * include/bits/hashtable_policy.h 
> (_Prime_rehash_policy::_M_next_bkt):
> >         Fix computation of _M_prev_resize so that hashtable do not 
> keep on
> >         being rehashed when _M_max_load_factor is lower than 1.
> >
> > Ok to commit ?
>
> The whole patch doesn't really look self-explaining, but I'm willing 
> to largely trust you ;) Please improve a bit the English in the comments:
>
> > Index: include/bits/hashtable_policy.h
> > ===================================================================
> > --- include/bits/hashtable_policy.h    (revision 181975)
> > +++ include/bits/hashtable_policy.h    (working copy)
> > @@ -298,25 +298,34 @@
> >    _Prime_rehash_policy::
> >    _M_next_bkt(std::size_t __n) const
> >    {
> > -    // Optimize lookups involving the first elements of __prime_list.
> > -    // (useful to speed-up, eg, constructors)
> > -    static const unsigned long __fast_bkt[12]
> > -      = { 2, 2, 2, 3, 5, 5, 7, 7, 11, 11, 11, 11 };
> > +    // Optimize lookups involving the first elements of 
> __prime_list (useful to
> > +    // speed-up, eg, constructors). The contained values are 
> already containing
> > +    // a minimal grow step.
>
> I would say "The values already include a minimal grow step" and avoid 
> the repetition. But to be honest, I don't like much that the numbers 
> are not the same numbers as in __prime_list. This should be *purely* a 
> trick to improve the speed of the search, should not serve other 
> purposes. Can we decouple the two things? Sooner or later the 
> inconsistency would byte us, I'm sure. Please reason this way: imagine 
> the trick was not there, re-do the patch, and, at the *very* end, put 
> the trick back *only* to avoid calling lower_bound.
I finally restore the original values, the small containers will simply 
grow slower at the beginning, not a big deal.

Ok to commit ?

François

-------------- next part --------------
A non-text attachment was scrubbed...
Name: hashtable_policy.patch
Type: text/x-patch
Size: 1896 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/libstdc++/attachments/20111206/77aa4ce0/attachment.bin>


More information about the Libstdc++ mailing list