[PATCH 00/11] C++26 [simd]
Matthias Kretz
m.kretz@gsi.de
Wed Oct 8 11:53:47 GMT 2025
This set of patches implements C++26 [simd]. The implementation differs a lot
from the std::experimental implementation. I tried my best to reduce the
number of template instantiations wrt. what std::experimental::simd does.
A basic_vec/basic_mask that uses multiple registers is built as a tree of
smaller specializations, where the left branch always stores a power-of-2
number of elements.
Still missing: [simd.loadstore], [simd.permute.dynamic], [simd.permute.mask],
[simd.permute.memory].
[simd.math] is partially implemented. But I don't want to go any further on
this without some feedback on the direction I took.
I have an extensive set of unit tests at https://github.com/GSI-HPC/simd/tree/
rewrite. But I don't want to repeat what I did for std::experimental::simd. So
I'll look into possibly keeping an external complete simd testsuite while
added some tests to libstdc++ later.
The PR is split into multiple commits to hopefully make it easier to get
through the review.
Matthias Kretz (11):
libstdc++: C++26 [simd] details
libstdc++: Implement C++26 [simd.iterator]
libstdc++: C++26 [simd] rebind, resize, permute, chunk, cat and
basic_mask
libstdc++: Implement C++26 [simd.mask.reductions]
libstdc++: Implement C++26 [simd.flags] and alignment(_v)
libstdc++: Implement C++26 [simd] basic_vec
libstdc++: Implement C++26 [simd.alg]
libstdc++: Implement C++26 [simd.bit]
libstdc++: Implement C++26 [simd.reductions]
libstdc++: Specialize basic_mask and basic_vec for complex value-types
libstdc++: First sketch for C++26 [simd.math]
libstdc++-v3/include/bits/simd_alg.h | 76 +
libstdc++-v3/include/bits/simd_bit.h | 156 ++
libstdc++-v3/include/bits/simd_complex.h | 1342 +++++++++++
libstdc++-v3/include/bits/simd_details.h | 1443 +++++++++++
libstdc++-v3/include/bits/simd_flags.h | 265 ++
libstdc++-v3/include/bits/simd_iterator.h | 153 ++
libstdc++-v3/include/bits/simd_mask.h | 1732 ++++++++++++++
.../include/bits/simd_mask_reductions.h | 94 +
libstdc++-v3/include/bits/simd_math.h | 993 ++++++++
libstdc++-v3/include/bits/simd_reductions.h | 112 +
libstdc++-v3/include/bits/simd_vec.h | 2130 +++++++++++++++++
libstdc++-v3/include/bits/simd_x86.h | 953 ++++++++
libstdc++-v3/include/bits/vec_ops.h | 592 +++++
13 files changed, 10041 insertions(+)
create mode 100644 libstdc++-v3/include/bits/simd_alg.h
create mode 100644 libstdc++-v3/include/bits/simd_bit.h
create mode 100644 libstdc++-v3/include/bits/simd_complex.h
create mode 100644 libstdc++-v3/include/bits/simd_details.h
create mode 100644 libstdc++-v3/include/bits/simd_flags.h
create mode 100644 libstdc++-v3/include/bits/simd_iterator.h
create mode 100644 libstdc++-v3/include/bits/simd_mask.h
create mode 100644 libstdc++-v3/include/bits/simd_mask_reductions.h
create mode 100644 libstdc++-v3/include/bits/simd_math.h
create mode 100644 libstdc++-v3/include/bits/simd_reductions.h
create mode 100644 libstdc++-v3/include/bits/simd_vec.h
create mode 100644 libstdc++-v3/include/bits/simd_x86.h
create mode 100644 libstdc++-v3/include/bits/vec_ops.h
--
──────────────────────────────────────────────────────────────────────────
Dr. Matthias Kretz https://mattkretz.github.io
GSI Helmholtz Center for Heavy Ion Research https://gsi.de
std::simd
──────────────────────────────────────────────────────────────────────────
More information about the Libstdc++
mailing list