Data-Parallel Types: алгоритмы (C++26)Библиотека «data-parallel types» для SIMD-векторов (пространство имён
std::experimental, алиас
stdx) предоставляет четыре специальных алгоритма: `min,
max,
minmax и
clamp.
min,
max,
minmax-
min(a, b) и
max(a, b) принимают два SIMD-вектора и возвращают вектор покомпонентных минимумов/максимумов.
-
minmax(a, b) возвращает пару SIMD-векторов: первый — покомпонентные минимумы, второй — максимумы.
- Автор отмечает, что строка
stdx::minmax(a, b) у него не компилировалась ни в GCC, ни в Clang (на момент публикации).
clamp-
stdx::clamp(v, lo, hi) применяет
std::clamp к каждому элементу SIMD-вектора: значения ниже
lo поднимаются до нижней границы, выше
hi — опускаются до верхней.
- Показаны два примера: ограничение к диапазону
INT8_MIN..INT8_MAX и к
0..UINT8_MAX; на выводах видно, как выходящие за пределы элементы прижимаются к границам.
Итог
- Для SIMD-векторов доступны привычные «минимумы/максимумы» и покомпонентный
clamp.
-
minmax задуман как удобный возврат пары (min/max), но в текущих компиляторах может не собираться.
- Дальше автор планирует разбирать новые возможности C++26 (в частности, контракты).
https://www.modernescpp.com/index.php/data-parallel-types-algorithms/#cpp #programming