Namespaces
Variants
Views
Actions

std::experimental::simd<T,Abi>::operator+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=

From cppreference.com
< cpp‎ | experimental‎ | simd‎ | simd
 
 
Experimental
Technical Specification
Filesystem library (filesystem TS)
Library fundamentals (library fundamentals TS)
Library fundamentals 2 (library fundamentals TS v2)
Library fundamentals 3 (library fundamentals TS v3)
Extensions for parallelism (parallelism TS)
Extensions for parallelism 2 (parallelism TS v2)
Extensions for concurrency (concurrency TS)
Extensions for concurrency 2 (concurrency TS v2)
Concepts (concepts TS)
Ranges (ranges TS)
Reflection (reflection TS)
Mathematical special functions (special functions TR)
Experimental Non-TS
Pattern Matching
Linear Algebra
std::execution
Contracts
2D Graphics
 
 
 
 
friend simd& operator+=( simd& lhs, const simd& rhs ) noexcept;
(1) (parallelism TS v2)
friend simd& operator-=( simd& lhs, const simd& rhs ) noexcept;
(2) (parallelism TS v2)
friend simd& operator*=( simd& lhs, const simd& rhs ) noexcept;
(3) (parallelism TS v2)
friend simd& operator/=( simd& lhs, const simd& rhs ) noexcept;
(4) (parallelism TS v2)
friend simd& operator%=( simd& lhs, const simd& rhs ) noexcept;
(5) (parallelism TS v2)
friend simd& operator&=( simd& lhs, const simd& rhs ) noexcept;
(6) (parallelism TS v2)
friend simd& operator|=( simd& lhs, const simd& rhs ) noexcept;
(7) (parallelism TS v2)
friend simd& operator^=( simd& lhs, const simd& rhs ) noexcept;
(8) (parallelism TS v2)
friend simd& operator<<=( simd& lhs, const simd& rhs ) noexcept;
(9) (parallelism TS v2)
friend simd& operator<<=( simd& lhs, int n ) noexcept;
(10) (parallelism TS v2)
friend simd& operator>>=( simd& lhs, const simd& rhs ) noexcept;
(11) (parallelism TS v2)
friend simd& operator>>=( simd& lhs, int n ) noexcept;
(12) (parallelism TS v2)

Applies the given compound assignment operator element-wise to each corresponding element of the operands such that for all i in the range of [0size()) the result is equivalent to:

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]
7) lhs[i] |= rhs[i]
8) lhs[i] ^= rhs[i]
9) lhs[i] <<= rhs[i]
10) lhs[i] <<= n
11) lhs[i] >>= rhs[i]
12) lhs[i] >>= n

Contents

[edit] Parameters

lhs - left operands
rhs - right operands
n - number of bits to shift each element in lhs

[edit] Return value

lhs

[edit] Example

Computes cosh(β)² - sinh(β)² (== 1) for some arbitrary angle β, on SIMD data.

#include <cstddef>
#include <experimental/simd>
#include <iomanip>
#include <iostream>
#include <string_view>
namespace stq = std::experimental;
 
void print(const std::string_view rem, const auto x)
{
    std::cout << rem << '\n' << std::fixed;
    for (std::size_t t{}; t != x.size(); ++t)
        std::cout << std::setw(10) << x[t] << ((t + 1) % 8 ? ',' : '\n');
    std::cout << '\n';
}
 
int main()
{
    constexpr auto N = 32UZ;
    using elem_t = long double;
 
    stq::fixed_size_simd<elem_t, N> x{[](elem_t i) { return i / N; }};
    stq::fixed_size_simd<elem_t, N> y{x};
    x = stq::cosh(x);
    y = stq::sinh(y);
    x *= x;
    y *= y;
    print("cosh(x)²:", x);
    print("sinh(x)²:", y);
    auto z = x - y;
    print("cosh(x)² - sinh(x)²:", z);
    std::cout << "reduce(z) = " << stq::reduce(z) << '\n';
}

Output:

cosh(x)²:
  1.000000,  1.000977,  1.003911,  1.008815,  1.015707,  1.024613,  1.035570,  1.048620
  1.063813,  1.081209,  1.100877,  1.122892,  1.147342,  1.174321,  1.203934,  1.236299
  1.271540,  1.309797,  1.351217,  1.395964,  1.444212,  1.496149,  1.551979,  1.611920
  1.676205,  1.745086,  1.818833,  1.897733,  1.982094,  2.072247,  2.168544,  2.271360
 
sinh(x)²:
  0.000000,  0.000977,  0.003911,  0.008815,  0.015707,  0.024613,  0.035570,  0.048620
  0.063813,  0.081209,  0.100877,  0.122892,  0.147342,  0.174321,  0.203934,  0.236299
  0.271540,  0.309797,  0.351217,  0.395964,  0.444212,  0.496149,  0.551979,  0.611920
  0.676205,  0.745086,  0.818833,  0.897733,  0.982094,  1.072247,  1.168544,  1.271360
 
cosh(x)² - sinh(x)²:
  1.000000,  1.000000,  1.000000,  1.000000,  1.000000,  1.000000,  1.000000,  1.000000
  1.000000,  1.000000,  1.000000,  1.000000,  1.000000,  1.000000,  1.000000,  1.000000
  1.000000,  1.000000,  1.000000,  1.000000,  1.000000,  1.000000,  1.000000,  1.000000
  1.000000,  1.000000,  1.000000,  1.000000,  1.000000,  1.000000,  1.000000,  1.000000
 
reduce(z) = 32.000000

[edit] See also

element-wise binary operators
(function) [edit]