std::experimental::simd_mask<T,Abi>::simd_mask
来自cppreference.com
| |
(1) | (并行 TS v2) |
| |
(2) | (并行 TS v2) |
| |
(3) | (并行 TS v2) |
| |
(4) | (并行 TS v2) |
| |
(5) | (并行 TS v2) (隐式声明) |
| |
(6) | (并行 TS v2) (隐式声明) |
2) 广播构造函数构造一个
simd_mask,其所有值均初始化为 value。3) 构造一个
simd_mask,使得对于范围 [0, size()) 中的所有 i,第 i 个元素以 other[i] 初始化。此重载只有在Abi 为 simd_abi::fixed_size<size()>时才会参与重载决议.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
参阅
(并行 TS v2) |
指示元素对齐的标签类型 (类) |
(并行 TS v2) |
指示向量类型对齐的标签类型 (类) |
(并行 TS v2) |
指示实参的加载/存储地址按照指定的对齐进行对齐 (类模板) |
(并行 TS v2) |
获得 vector_aligned 的适当对齐 (类模板) |
(并行 TS v2) |
从连续内存加载 simd_mask 元素 (公开成员函数) |