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)
(declarado implícitamente)
simd_mask ( simd_mask && other ) noexcept = default ;
(6) (parallelism TS v2)
(declarado implícitamente)
1) Construye un simd_mask usando inicialización por defecto (construido sin inicializador) o inicialización por valor (construido con un inicializador vacío).
2) El constructor de difusión construye un simd_mask con todos los valores inicializados a value .
3) Construye un simd_mask donde el i-ésimo elemento se inicializa a other [ i ] para todo i en el rango de [ 0 , size() ) . Esta sobrecarga participa en la resolución de sobrecarga solo si Abi es simd_abi :: fixed_size < size ( ) > .
4) El constructor de carga construye una simd_mask donde el i-ésimo elemento se inicializa a mem [ i ] para todo i en el rango de [ 0 , size() ) .
5,6) Constructores de copia y movimiento declarados implícitamente. Construye un simd_mask donde cada elemento se inicializa a partir de los valores de los elementos en other .

Parámetros

value - el valor utilizado para la inicialización de todos los elementos de simd_mask
other - otra simd_mask desde la cual copiar
mem - un puntero a un array donde [ mem , mem + size ( ) ) es un rango válido
flags - si es de tipo vector_aligned_tag , el constructor de carga puede asumir que mem apunta a almacenamiento alineado por memory_alignment_v<simd_mask>
Requisitos de tipo
-
is_simd_flag_type_v<Flags> debe ser true .

Ejemplo

#include <algorithm>
#include <cstddef>
#include <experimental/simd>
#include <iostream>
namespace stdx = std::experimental;
int main()
{
    [[maybe_unused]]
    stdx::native_simd_mask<int> a;       // sin inicializar
    stdx::native_simd_mask<int> b(true); // todos los elementos inicializados con true
    stdx::native_simd_mask<int> c{};     // todos los elementos inicializados con 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';
}

Salida posible:

0 0 0 0 0 0 0 0

Véase también

indicador de alineación de la dirección de carga/almacenamiento a alineación de elemento
(clase)
indicador de alineación de la dirección de carga/almacenamiento a alineación de vector
(clase)
(parallelism TS v2)
indicador de alineación de la dirección de carga/almacenamiento a la alineación especificada
(plantilla de clase)
(parallelism TS v2)
obtiene una alineación apropiada para vector_aligned
(plantilla de clase)
(parallelism TS v2)
carga elementos de simd_mask desde memoria contigua
(función miembro pública)