std::experimental:: where_expression
|
Определено в заголовке
<experimental/simd>
|
||
|
template
<
class
M,
class
V
>
class where_expression ; |
(parallelism TS v2) | |
Шаблон класса
where_expression
абстрагирует концепцию выбранных элементов
заданного lvalue арифметического или data-parallel типа. Выбранные элементы — это элементы lvalue (типа
V
), для которых соответствующий элемент маски (типа
M
) имеет значение true. Операторы, применяемые к объектам типа
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).
Функции-члены
|
присваивает выбранным позициям
(публичная функция-член) |
|
|
составные операторы
(публичная функция-член) |
|
|
операторы инкремента и декремента
(публичная функция-член) |
|
|
загружает из адреса в выбранные позиции
(публичная функция-член) |
Пример
#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