std::experimental:: where_expression
From cppreference.net
<
cpp
|
experimental
|
simd
|
定义于头文件
<experimental/simd>
|
||
|
template
<
class
M,
class
V
>
class where_expression ; |
(并行 TS v2) | |
类模板
where_expression
抽象了给定算术或数据并行类型左值中被选中元素的概念。被选中元素是指那些在掩码(类型为
M
)中对应元素为真的左值(类型为
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)。
成员函数
|
向选定位置赋值
(公开成员函数) |
|
|
复合赋值运算符
(公开成员函数) |
|
|
自增与自减运算符
(公开成员函数) |
|
|
从地址加载到选定位置
(公开成员函数) |
示例
运行此代码
#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