名稱空間
變體
操作

std::experimental::where_expression

來自 cppreference.com
< cpp‎ | experimental‎ | simd
 
 
 
 
 
定義於標頭檔案 <experimental/simd>
template< class M, class V >
class where_expression;
(並行技術規範 v2)

類模板 where_expression 抽象了給定算術或資料並行型別的左值中選定元素的概念。選定元素是左值(型別為 V)的元素,其對應的掩碼(型別為 M)元素為 true。應用於 where_expression<M, V> 型別物件的運算子僅應用於選定元素。所有其他元素保持不變。

使用 where 函式構造 where_expression 物件。

[編輯] 模板引數

M - 掩碼型別
V - M 應用於的值型別

(MV) 的有效組合是

  • (simd_mask<T, Abi>simd<T, Abi>),
  • (simd_mask<T, Abi>simd_mask<T, Abi>),
  • (boolT).

[編輯] 成員函式

賦值給選定位置
(公開成員函式)
複合運算子
(公開成員函式)
增量和減量運算子
(公開成員函式)
從地址載入到選定位置
(公開成員函式)

[編輯] 示例

#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