[PATCH] libstdc++: optimize ranges::for_each for segmented iterators
Jonathan Wakely
jwakely@redhat.com
Thu Aug 20 10:30:13 GMT 2026
On Wed, 19 Aug 2026 at 17:23, Yuao Ma <addr2line@gmail.com> wrote:
>
> Hi!
>
> Similar to std::for_each, this patch optimizes ranges::for_each for
> segmented iterators.
If I understand correctly, this will break cases that require
std::invoke to invoke the function object, e.g.
ranges::for_each(r, &T::f);
>
> Fully tested on x86_64-linux with no regressions.
>
> Using the newly added benchmark, it shows a 3x improvement when using
> ranges::for_each with std::deque.
>
> === Wed Aug 19 03:28:22 PM UTC 2026 ===
> for_each.cc std::for_each vector<int> 2r 1u 0s
> 0mem 0pf
> for_each.cc std::for_each deque<int> 2r 2u 0s
> 0mem 0pf
> for_each.cc std::for_each list<int> 13r 14u 0s
> 0mem 0pf
> for_each.cc std::ranges::for_each vector<int> 2r 2u
> 0s 0mem 0pf
> for_each.cc std::ranges::for_each deque<int> 6r 5u
> 0s 0mem 0pf
> for_each.cc std::ranges::for_each list<int> 13r 14u
> 0s 0mem 0pf
> === Wed Aug 19 04:09:51 PM UTC 2026 ===
> for_each.cc std::for_each vector<int> 2r 1u 0s
> 0mem 0pf
> for_each.cc std::for_each deque<int> 2r 2u 0s
> 0mem 0pf
> for_each.cc std::for_each list<int> 13r 14u 0s
> 0mem 0pf
> for_each.cc std::ranges::for_each vector<int> 2r 2u
> 0s 0mem 0pf
> for_each.cc std::ranges::for_each deque<int> 2r 1u
> 0s 0mem 0pf
> for_each.cc std::ranges::for_each list<int> 13r 14u
> 0s 0mem 0pf
>
> Please take a look when you are available, thanks!
>
> Note: after preparing this patch I found the -std=gnu++11 in the check
> performance script based on Jonathan's guidance. I can prepare a patch
> for this tomorrow and get rid of the STD in the benchmark.
>
> Yuao
More information about the Libstdc++
mailing list