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 를 생성하며, i번째 요소는 범위 [ 0 , size() ) 내의 모든 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

참고 항목

로드/스토어 주소의 정렬을 요소 정렬로 지정하는 플래그
(class)
로드/스토어 주소의 정렬을 벡터 정렬로 지정하는 플래그
(class)
(parallelism TS v2)
로드/스토어 주소의 정렬을 지정된 정렬로 지정하는 플래그
(class template)
(parallelism TS v2)
vector_aligned 에 적합한 정렬을 얻음
(class template)
(parallelism TS v2)
연속 메모리에서 simd_mask 요소들을 로드함
(public member function)