Namespaces
Variants

std::experimental:: where_expression

From cppreference.net
헤더에 정의됨 <experimental/simd>
template < class M, class V >
class where_expression ;
(parallelism TS v2)

클래스 템플릿 where_expression 는 산술 또는 데이터-병렬 타입의 주어진 lvalue에서 선택된 요소들의 개념을 추상화합니다. 선택된 요소들은 마스크(타입 M )의 해당 요소가 true인 lvalue(타입 V )의 요소들입니다. 타입 where_expression<M, V> 의 객체에 적용되는 연산자들은 선택된 요소들에만 적용됩니다. 다른 모든 요소들은 변경되지 않고 유지됩니다.

where 함수를 사용하여 where_expression 객체를 생성합니다.

템플릿 매개변수

M - 마스크 타입
V - M이 적용되는 값 타입

( M , V ) 의 유효한 조합은 다음과 같습니다:

  • ( simd_mask < T, Abi > , simd < T, Abi > ) ,
  • ( simd_mask < T, Abi > , simd_mask < T, Abi > ) ,
  • ( bool , T ) .

멤버 함수

선택된 위치에 할당
(public member function)
복합 연산자
(public member function)
증감 연산자
(public member function)
주소에서 선택된 위치로 로드
(public member function)

예제

#include <cstddef>
#include <experimental/simd>
#include <iostream>
namespace stdx = std::experimental;
void print(auto const& a)
{
    for (std::size_t i{}; i != std::size(a); ++i)
        std::cout << a[i] << ' ';
    std::cout << '\n';
}
template<class A>
stdx::simd<int, A> my_abs(stdx::simd<int, A> x)
{
    where(x < 0, x) = -x;
    return x;
}
int main()
{
    const stdx::native_simd<int> a([](int i) { return i - 2; });
    print(a);
    const auto b = my_abs(a);
    print(b);
}

가능한 출력:

-2 -1 0 1 
2 1 0 1