std::experimental:: where_expression
From cppreference.net
<
cpp
|
experimental
|
simd
|
헤더에 정의됨
<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