Namespaces
Variants

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

From cppreference.net
simd_mask ( ) noexcept = default ;
(1) (parallelism TS v2)
explicit simd_mask ( bool value ) noexcept ;
(2) (parallelism TS v2)
template < class U >
simd_mask ( const simd_mask < U, simd_abi :: fixed_size < size ( ) >> & other ) noexcept ;
(3) (parallelism TS v2)
template < class U, class Flags >
simd_mask ( const bool * mem, Flags flags ) ;
(4) (parallelism TS v2)
simd_mask ( const simd_mask & other ) noexcept = default ;
(5) (parallelism TS v2)
(déclaré implicitement)
simd_mask ( simd_mask && other ) noexcept = default ;
(6) (parallelism TS v2)
(déclaré implicitement)
1) Construit un simd_mask en utilisant l' initialisation par défaut (construit sans initialiseur) ou l' initialisation par valeur (construit avec un initialiseur vide).
2) Le constructeur de diffusion construit un simd_mask avec toutes les valeurs initialisées à value .
3) Construit un simd_mask où le i-ème élément est initialisé à other [ i ] pour tout i dans l'intervalle [ 0 , size() ) . Cette surcharge participe à la résolution de surcharge seulement si Abi est simd_abi :: fixed_size < size ( ) > .
4) Le constructeur de chargement construit un simd_mask où le i-ème élément est initialisé à mem [ i ] pour tout i dans l'intervalle [ 0 , size() ) .
5,6) Constructeurs de copie et de déplacement implicitement déclarés. Construit un simd_mask où chaque élément est initialisé à partir des valeurs des éléments dans other .

Paramètres

value - la valeur utilisée pour l'initialisation de tous les éléments simd_mask
other - un autre simd_mask à copier
mem - un pointeur vers un tableau où [ mem , mem + size ( ) ) est une plage valide
flags - si de type vector_aligned_tag , le constructeur de chargement peut supposer que mem pointe vers un stockage aligné par memory_alignment_v<simd_mask>
Exigences de type
-
is_simd_flag_type_v<Flags> doit être true .

Exemple

#include <algorithm>
#include <cstddef>
#include <experimental/simd>
#include <iostream>
namespace stdx = std::experimental;
int main()
{
    [[maybe_unused]]
    stdx::native_simd_mask<int> a;       // non initialisé
    stdx::native_simd_mask<int> b(true); // tous les éléments initialisés avec true
    stdx::native_simd_mask<int> c{};     // tous les éléments initialisés avec false
    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';
}

Sortie possible :

0 0 0 0 0 0 0 0

Voir aussi

indicateur d'alignement de l'adresse de chargement/stockage sur l'alignement des éléments
(classe)
indicateur d'alignement de l'adresse de chargement/stockage sur l'alignement du vecteur
(classe)
(parallelism TS v2)
indicateur d'alignement de l'adresse de chargement/stockage sur l'alignement spécifié
(modèle de classe)
(parallelism TS v2)
obtient un alignement approprié pour vector_aligned
(modèle de classe)
(parallelism TS v2)
charge les éléments de simd_mask depuis la mémoire contiguë
(fonction membre publique)