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)
(暗黙的に宣言)
simd_mask ( simd_mask && other ) noexcept = default ;
(6) (parallelism TS v2)
(暗黙的に宣言)
1) simd_mask デフォルト初期化 (初期化子なしで構築)または 値初期化 (空の初期化子で構築)を使用して構築します。
2) ブロードキャストコンストラクタは、すべての値が value に初期化された simd_mask を構築します。
3) simd_mask を構築し、範囲 [ 0 , size() ) 内の全ての i について、i番目の要素が other [ i ] で初期化されます。このオーバーロードは、 Abi simd_abi :: fixed_size < size ( ) > の場合にのみオーバーロード解決に参加します。
4) ロードコンストラクタは、 simd_mask を構築し、i番目の要素は範囲 [ 0 , size() ) 内のすべての i に対して mem [ 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 要素をロードする
(公開メンバ関数)