Namensräume
Varianten
Aktionen

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 (MV) sind

  • (simd_mask<T, Abi>simd<T, Abi>),
  • (simd_mask<T, Abi>simd_mask<T, Abi>),
  • (boolT).

[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

#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