On 2019-04-09 10:12:56 -0700, Paul Ramsey wrote:
> 
> > On Apr 9, 2019, at 10:09 AM, Andrey Borodin <x4...@yandex-team.ru> wrote:
> > 
> > He advised me to use algorithm that splits copied regions into smaller 
> > non-overlapping subregions with exponentially increasing size.
> > 
> > while (off <= len)
> > {
> >    memcpy(dp, dp - off, off);
> >    len -= off;
> >    dp += off;
> >    off *= 2;
> > }
> > memcpy(dp, dp - off, len);
> > 
> > On original Paul's test without patch of this thread this optimization gave 
> > about x2.5 speedup.
> > I've composed more detailed tests[0] and tested against current master. Now 
> > it only gives 20%-25% of decompression speedup, but I think it is still 
> > useful.
> 
> Wow, well beyond slicing, just being able to decompress 25% faster is a win 
> for pretty much any TOAST use case. I guess the $100 question is: 
> portability? The whole reason for the old-skool code that’s there now was 
> concerns about memcpy’ing overlapping addresses and Bad Things happening.

Just use memmove? It's usually as fast these days.


Reply via email to