std::experimental:: where_expression
|
Definido en el encabezado
<experimental/simd>
|
||
|
template
<
class
M,
class
V
>
class where_expression ; |
(parallelism TS v2) | |
La plantilla de clase
where_expression
abstrae la noción de elementos seleccionados
de un lvalue dado de tipo aritmético o de paralelismo de datos. Los elementos seleccionados son los elementos del lvalue (de tipo
V
) para los cuales el elemento correspondiente de la máscara (de tipo
M
) es verdadero. Los operadores aplicados a objetos de tipo
where_expression<M, V>
se aplican únicamente a los elementos seleccionados. Todos los demás elementos permanecen sin cambios.
Utilice la función
where
para construir objetos
where_expression
.
Parámetros de plantilla
| M | - | El tipo de máscara |
| V | - | El tipo de valor sobre el que M se aplica |
Las combinaciones válidas de
(
M
,
V
)
son:
-
(simd_mask < T, Abi >,simd < T, Abi >), -
(simd_mask < T, Abi >,simd_mask < T, Abi >), -
(bool,T).
Funciones miembro
|
asigna a las posiciones seleccionadas
(función miembro pública) |
|
|
operadores compuestos
(función miembro pública) |
|
|
operadores de incremento y decremento
(función miembro pública) |
|
|
carga desde dirección a las posiciones seleccionadas
(función miembro pública) |
Ejemplo
#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); }
Salida posible:
-2 -1 0 1 2 1 0 1