Gentle remider.


On 11/06/20 8:32 am, François Dumont wrote:
As we are on patching algos we still have this old one.

    From the original patch I only kept the memory optimization part as the new performance test was not showing good result for the other part to change pivot value. I also kept the small change in get_temporary_buffer even if I don't have strong feeling about it, it just make sure that we'll try to allocate 1 element as a last chance allocation.

    Note that there is still place for an improvement. If we miss memory on the heap we then use a recursive implementation which then rely on stack memory. I would be surprise that a system which miss heap memory would have no problem to allocate about the same on the stack so we will surely end up in a stack overflow. I still have this on my todo even if I already made several tries with no satisfying result in terms of performance.

    Tested under Linux x86_64.

Commit message:

    libstdc++: Limit memory allocation in stable_sort/inplace_merge (PR 83938)

    Reduce memory consumption in stable_sort/inplace_merge to what is used.

    Co-authored-by: François Dumont  <fdum...@gcc.gnu.org>

    libstdc++-v3/ChangeLog:

    2020-06-11  John Chang  <john.ch...@samba.tv>
                François Dumont  <fdum...@gcc.gnu.org>

            PR libstdc++/83938
            * include/bits/stl_tempbuf.h (get_temporary_buffer): Change __len
            computation in the loop.
            * include/bits/stl_algo.h:
            (__inplace_merge): Take temporary buffer length from smallest range.
            (__stable_sort): Limit temporary buffer length.
            * testsuite/25_algorithms/inplace_merge/1.cc (test03): Test different
            pivot positions.
            * testsuite/performance/25_algorithms/stable_sort.cc: Test stable_sort
            under different heap memory conditions.
            * testsuite/performance/25_algorithms/inplace_merge.cc: New.

Ok to commit ?

François


Reply via email to