On Sun, Jul 27, 2025 at 2:42 PM Luc Grosheintz <luc.groshei...@gmail.com> wrote:
> This is a sequence of related improvements to <mdspan> we > discussed during review and then postponed. The ideas are: > > * Pre-compute the product of static extents; and a follow up > for fine-tuning for low-rank extents. > > * Returning to extents::operator== to improve the case of mixed > dynamic/static extents, revealed that this can be simplified > quite a bit. > > * There's several templates that depend on the IndexType, but > the actual code only needs the static extents. Therefore, > extents with the same Indices... but different IndexType can > use the same code. > > * Recently, libstdc++ code was refactored to avoid > numeric_limits and use __int_traits instead. Unfortunately, > this is currently completely ineffective for <mdspan>. But > since, it's a good idea, the changes are ready, and it might > anyway be needed in the future, I've submitted the patch > regardless. > > Many of these look like optimizations, but since I've not > performed any runtime experiments, it might not be fair to call > them such. However, because they're principled changes to the > source code and the generated code "looks faster" (though it > might be overly bold to claim that I could tell), I think it > makes sense to propose them regardless. > > Therefore, if anything looks iffy or you feel one should be > measuring performance, please suggest that we start. > There is nothing looking iffy in the test, but with the introduction of precomputed indices, we are introducing some code size/runtime tradeoff, and I think doing some microbenchmark before/after would be valuable. I think something really small like just having GoogleBenchmark that invokes the stride on various combinations of static/dynamic indexes would be sufficient. > > The commit messages are a lot longer than in the past, because > the justification for each change is included, please let me know > if I should shorten them. > I found the information presented in the commit messages relevant and interesting, so I will keep them. > > Luc Grosheintz (6): > libstdc++: Fix style issues in <mdspan>. > libstdc++: Precompute products of static extents. > libstdc++: Improve low-rank layout_{left,right}::stride. > libstdc++: Improve extents::operator==. > libstdc++: Reduce template instantiations in <mdspan>. > libstdc++: Replace numeric_limit with __int_traits in mdspan. > > libstdc++-v3/include/std/mdspan | 195 +++++++++++------- > .../mdspan/extents/class_mandates_neg.cc | 3 + > 2 files changed, 128 insertions(+), 70 deletions(-) > > -- > 2.50.0 > >