Namespaces
Variants

std::experimental:: where_expression

From cppreference.net
定义于头文件 <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