Namespaces
Variants

std::experimental::simd_mask<T,Abi>:: simd_mask

From cppreference.net
simd_mask ( ) noexcept = default ;
(1) (Parallelismus TS v2)
explicit simd_mask ( bool value ) noexcept ;
(2) (Parallelismus TS v2)
template < class U >
simd_mask ( const simd_mask < U, simd_abi :: fixed_size < size ( ) >> & other ) noexcept ;
(3) (Parallelismus TS v2)
template < class U, class Flags >
simd_mask ( const bool * mem, Flags flags ) ;
(4) (Parallelismus TS v2)
simd_mask ( const simd_mask & other ) noexcept = default ;
(5) (Parallelismus TS v2)
(implizit deklariert)
simd_mask ( simd_mask && other ) noexcept = default ;
(6) (Parallelismus TS v2)
(implizit deklariert)
1) Konstruiert eine simd_mask mittels Default-Initialisierung (ohne Initialisierer konstruiert) oder Wertinitialisierung (mit einem leeren Initialisierer konstruiert).
2) Der Broadcast-Konstruktor erstellt eine simd_mask , bei der alle Werte mit value initialisiert werden.
3) Konstruiert eine simd_mask , bei der das i-te Element für alle i im Bereich von [ 0 , size() ) mit other [ i ] initialisiert wird. Diese Überladung nimmt nur dann an der Überladungsauflösung teil, wenn Abi gleich simd_abi :: fixed_size < size ( ) > ist.
4) Der Load-Konstruktor konstruiert eine simd_mask , bei der das i-te Element initialisiert wird zu mem [ i ] für alle i im Bereich von [ 0 , size() ) .
5,6) Implizit deklarierte Kopier- und Verschiebungskonstruktoren. Konstruiert eine simd_mask , bei der jedes Element mit den Werten der Elemente in other initialisiert wird.

Parameter

value - der Wert, der zur Initialisierung aller simd_mask Elemente verwendet wird
other - eine andere simd_mask , von der kopiert wird
mem - ein Zeiger auf ein Array, wobei [ mem , mem + size ( ) ) ein gültiger Bereich ist
flags - falls vom Typ vector_aligned_tag , darf der Load-Konstruktor annehmen, dass mem auf einen Speicher zeigt, der ausgerichtet ist gemäß memory_alignment_v<simd_mask>
Typanforderungen
-
is_simd_flag_type_v<Flags> muss true sein.

Beispiel

#include <algorithm>
#include <cstddef>
#include <experimental/simd>
#include <iostream>
namespace stdx = std::experimental;
int main()
{
    [[maybe_unused]]
    stdx::native_simd_mask<int> a;       // nicht initialisiert
    stdx::native_simd_mask<int> b(true); // alle Elemente mit true initialisiert
    stdx::native_simd_mask<int> c{};     // alle Elemente mit false initialisiert
    alignas(stdx::memory_alignment_v<stdx::native_simd_mask<int>>)
        std::array<bool, stdx::native_simd_mask<int>::size() * 2> mem = {};
    std::ranges::generate(mem, [i{0}] mutable -> bool { return i++ & 1; });
    stdx::native_simd_mask<int> d(&mem[0], stdx::vector_aligned);  // {0, 1, 0, 1, ...}
    stdx::native_simd_mask<int> e(&mem[1], stdx::element_aligned); // {1, 0, 1, 0, ...}
    const auto xored = b ^ c ^ d ^ e;
    for (std::size_t i{}; i != xored.size(); ++i)
        std::cout << xored[i] << ' ';
    std::cout << '\n';
}

Mögliche Ausgabe:

0 0 0 0 0 0 0 0

Siehe auch

Flagge, die die Ausrichtung der Lade-/Speicheradresse auf Elementausrichtung angibt
(Klasse)
Flagge, die die Ausrichtung der Lade-/Speicheradresse auf Vektorausrichtung angibt
(Klasse)
(parallelism TS v2)
Flagge, die die Ausrichtung der Lade-/Speicheradresse auf die spezifizierte Ausrichtung angibt
(Klassentemplate)
(parallelism TS v2)
ermittelt eine geeignete Ausrichtung für vector_aligned
(Klassentemplate)
(parallelism TS v2)
lädt simd_mask Elemente aus zusammenhängendem Speicher
(öffentliche Elementfunktion)