Namespaces
Variants

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

From cppreference.net
simd_mask ( ) noexcept = default ;
(1) (并行 TS v2)
explicit simd_mask ( bool value ) noexcept ;
(2) (并行 TS v2)
template < class U >
simd_mask ( const simd_mask < U, simd_abi :: fixed_size < size ( ) >> & other ) noexcept ;
(3) (并行 TS v2)
template < class U, class Flags >
simd_mask ( const bool * mem, Flags flags ) ;
(4) (并行 TS v2)
simd_mask ( const simd_mask & other ) noexcept = default ;
(5) (并行 TS v2)
(隐式声明)
simd_mask ( simd_mask && other ) noexcept = default ;
(6) (并行 TS v2)
(隐式声明)
1) 通过 默认初始化 (无初始化器构造)或 值初始化 (使用空初始化器构造)构建 simd_mask
2) 广播构造函数构造一个 simd_mask ,其所有值均初始化为 value
3) 构造一个 simd_mask ,其中第 i 个元素初始化为 other [ i ] (对于范围 [ 0 , size() ) 内的所有 i )。此重载仅当 Abi simd_abi :: fixed_size < size ( ) > 时参与重载决议。
4) 加载构造函数构造一个 simd_mask ,其中第 i 个元素被初始化为 mem [ i ] ,对于所有在范围 [ 0 , size() ) 内的 i
5,6) 隐式声明的复制与移动构造函数。构造一个 simd_mask ,其中每个元素均从 other 中的元素值初始化。

参数

value - 用于初始化所有 simd_mask 元素的值
other - 要复制的另一个 simd_mask 对象
mem - 指向数组的指针,其中 [ mem , mem + size ( ) ) 构成有效范围
flags - 若为 vector_aligned_tag 类型,加载构造函数可假定 mem 指向按 memory_alignment_v<simd_mask> 对齐的存储空间
类型要求
-
is_simd_flag_type_v<Flags> 必须为 true

示例

#include <algorithm>
#include <cstddef>
#include <experimental/simd>
#include <iostream>
namespace stdx = std::experimental;
int main()
{
    [[maybe_unused]]
    stdx::native_simd_mask<int> a;       // 未初始化
    stdx::native_simd_mask<int> b(true); // 所有元素初始化为 true
    stdx::native_simd_mask<int> c{};     // 所有元素初始化为 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';
}

可能的输出:

0 0 0 0 0 0 0 0

参见

指示加载/存储地址按元素对齐的标志
(类)
指示加载/存储地址按向量对齐的标志
(类)
(parallelism TS v2)
指示加载/存储地址按指定对齐方式对齐的标志
(类模板)
(parallelism TS v2)
获取适用于 vector_aligned 的适当对齐方式
(类模板)
(parallelism TS v2)
从连续内存加载 simd_mask 元素
(公开成员函数)