std::experimental::where_expression
From cppreference.com
< cpp | experimental | simd
C++
Feature test macros (C++20)
Concepts library (C++20)
Metaprogramming library (C++11)
Ranges library (C++20)
Filesystem library (C++17)
Concurrency support library (C++11)
Execution control library (C++26)
Extensions for parallelism v2
Parallel exceptions
Additional execution policies
Algorithms
Task blocks
std::experimental::where_expression
Defined in header
<experimental/simd>
template< class M, class V >
class where_expression;
(parallelism TS v2)
class where_expression;
The class template where_expression abstracts the notion of selected elements
of a given lvalue of arithmetic or data-parallel type. Selected elements are the elements of the lvalue (of type V) for which the corresponding element of the mask (of type M) is true. Operators applied to objects of type where_expression<M, V> are applied only to selected elements. All other elements are left unchanged.
Use the where function to construct where_expression objects.
[edit] Template parameters
M
-
The mask type
V
-
The value type M applies on
Valid combinations of (M, V) are:
-
(simd_mask<T, Abi>,simd<T, Abi>), -
(simd_mask<T, Abi>,simd_mask<T, Abi>), -
(bool,T).
[edit] Member functions
compound operators
(public member function)
(public member function)
[edit] Example
Run this code
#include <cstddef> #include <experimental/simd> #include <iostream> namespace stdx = std::experimental; void print(auto const& a) { for (std::size_t i{}; i != std::size (a); ++i) std::cout << a[i] << ' '; std::cout << '\n'; } template<class A> stdx::simd<int, A> my_abs(stdx::simd<int, A> x) { where(x < 0, x) = -x; return x; } int main() { const stdx::native_simd<int> a([](int i) { return i - 2; }); print(a); const auto b = my_abs(a); print(b); }
Possible output:
-2 -1 0 1 2 1 0 1