std::experimental::where_expression
Von cppreference.com
< cpp | experimental | simd
| Definiert in Header <experimental/simd> |
||
| template< class M, class V > class where_expression; |
(Parallelismus TS v2) | |
Die Klassenvorlage where_expression abstrahiert die Vorstellung von ausgewählten Elementen eines gegebenen L-Wertes von arithmetischem oder datenparallelem Typ. Ausgewählte Elemente sind die Elemente des L-Wertes (vom Typ V), für die das entsprechende Element der Maske (vom Typ M) wahr ist. Operatoren, die auf Objekte vom Typ where_expression<M, V> angewendet werden, werden nur auf ausgewählte Elemente angewendet. Alle anderen Elemente bleiben unverändert.
Verwenden Sie die where-Funktion, um where_expression-Objekte zu konstruieren.
[bearbeiten] Template-Parameter
| M | - | Der Maskentyp |
| V | - | Der Werttyp, auf den M angewendet wird |
Gültige Kombinationen von (M, V) sind
-
(simd_mask<T, Abi>,simd<T, Abi>), -
(simd_mask<T, Abi>,simd_mask<T, Abi>), -
(bool,T).
[bearbeiten] Member-Funktionen
| weist an ausgewählten Positionen zu (öffentliche Memberfunktion) | |
| komplexe Operatoren (öffentliche Memberfunktion) | |
| Inkrement- und Dekrementoperatoren (öffentliche Memberfunktion) | |
| lädt von einer Adresse an ausgewählte Positionen (öffentliche Memberfunktion) |
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#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); }
Mögliche Ausgabe
-2 -1 0 1 2 1 0 1