std::experimental::simd<T,Abi>::operator==,!=,<,<=,>,>=
来自cppreference.com
| |
(1) | (并行 TS v2) |
| |
(2) | (并行 TS v2) |
| |
(3) | (并行 TS v2) |
| |
(4) | (并行 TS v2) |
| |
(5) | (并行 TS v2) |
| |
(6) | (并行 TS v2) |
逐元素对操作数的每个对应元素运用给定的比较。
返回一个 simd_mask,使得对于范围 [0, size()) 中的所有 i,第 i 个元素等于:
1)
lhs[i] == rhs[i]。2)
lhs[i] != rhs[i]。3)
lhs[i] < rhs[i]。4)
lhs[i] <= rhs[i]。5)
lhs[i] > rhs[i]。6)
lhs[i] >= rhs[i]。参数
| lhs | - | 左操作数 |
| rhs | - | 右操作数 |
示例
运行此代码
#include <cassert>
#include <iostream>
#include <initializer_list>
#include <iterator>
#include <experimental/simd>
namespace stdx = std::experimental;
int main()
{
using V = stdx::fixed_size_simd<int, 4>;
using M = stdx::fixed_size_simd_mask<int, 4>;
auto assert_equivalence = [](M&& x, std::initializer_list<int>&& y)
{
for (decltype(M::size()) i{}; i != M::size(); ++i)
assert(x[i] == std::cbegin(y)[i]);
};
V a{2}, b, c{3};
b[0] = 1, b[1] = 2, b[2] = 3, b[3] = 4;
// a == {2, 2, 2, 2}
// b == {1, 2, 3, 4}
// c == {3, 3, 3, 3}
assert_equivalence(a == a, {1, 1, 1, 1});
assert_equivalence(a == b, {0, 1, 0, 0});
assert_equivalence(b == c, {0, 0, 1, 0});
assert_equivalence(a == c, {0, 0, 0, 0});
assert_equivalence(a != a, {0, 0, 0, 0});
assert_equivalence(a != b, {1, 0, 1, 1});
assert_equivalence(b != c, {1, 1, 0, 1});
assert_equivalence(a != c, {1, 1, 1, 1});
assert_equivalence(a < a, {0, 0, 0, 0});
assert_equivalence(a < b, {0, 0, 1, 1});
assert_equivalence(b < c, {1, 1, 0, 0});
assert_equivalence(a < c, {1, 1, 1, 1});
}
参阅
(并行 TS v2) |
归约 simd_mask 为 bool (函数模板) |
(并行 TS v2) |
归约 simd_mask 为 true 值的数量 (函数模板) |
(并行 TS v2) |
归约 simd_mask 为其首个或最末 true 值的索引 (函数模板) |
(并行 TS v2) |
元素类型为 bool 的数据并行类型 (类模板) |