std::experimental::where_expression
来自 cppreference.com
< cpp | experimental | simd
定义在头文件 <experimental/simd> 中 |
||
template< class M, class V > class where_expression; |
(并行 TS v2) | |
类模板 where_expression
抽象了对给定算术或数据并行类型左值的选择元素的概念。选定的元素是左值(类型为 V
)的元素,其对应的掩码(类型为 M
)元素为真。应用于 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