simd_batch¶
- template <class X>
-
class
xsimd::simd_batch¶ Base class for batch of integer or floating point values.
The simd_batch class is the base class for all classes representing a batch of integer or floating point values. Each type of batch (i.e. a class inheriting from simd_batch) has its dedicated type of boolean batch (i.e. a class inheriting from simd_batch_bool) for logical operations.
- See
- Template Parameters
X: The derived type
Inherits from xsimd::simd_base< X >
Arithmetic computed assignment
-
X &
operator+=(const X &rhs)¶ Adds the batch
rhstothis.- Return
a reference to
this.- Parameters
rhs: the batch to add.
-
X &
operator+=(const value_type &rhs)¶ Adds the scalar
rhsto each value contained inthis.- Return
a reference to
this.- Parameters
rhs: the scalar to add.
-
X &
operator-=(const X &rhs)¶ Substracts the batch
rhstothis.- Return
a reference to
this.- Parameters
rhs: the batch to substract.
-
X &
operator-=(const value_type &rhs)¶ Substracts the scalar
rhsto each value contained inthis.- Return
a reference to
this.- Parameters
rhs: the scalar to substract.
-
X &
operator*=(const X &rhs)¶ Multiplies
thiswith the batchrhs.- Return
a reference to
this.- Parameters
rhs: the batch involved in the multiplication.
-
X &
operator*=(const value_type &rhs)¶ Multiplies each scalar contained in
thiswith the scalarrhs.- Return
a reference to
this.- Parameters
rhs: the scalar involved in the multiplication.
-
X &
operator/=(const X &rhs)¶ Divides
thisby the batchrhs.- Return
a reference to
this.- Parameters
rhs: the batch involved in the division.
-
X &
operator/=(const value_type &rhs)¶ Divides each scalar contained in
thisby the scalarrhs.- Return
a reference to
this.- Parameters
rhs: the scalar involved in the division.
Bitwise computed assignment
-
X &
operator&=(const X &rhs)¶ Assigns the bitwise and of
rhsandthis.- Return
a reference to
this.- Parameters
rhs: the batch involved in the operation.
-
X &
operator|=(const X &rhs)¶ Assigns the bitwise or of
rhsandthis.- Return
a reference to
this.- Parameters
rhs: the batch involved in the operation.
-
X &
operator^=(const X &rhs)¶ Assigns the bitwise xor of
rhsandthis.- Return
a reference to
this.- Parameters
rhs: the batch involved in the operation.
Increment and decrement operators
-
X &
operator++()¶ Pre-increment operator.
- Return
a reference to
this.
-
X &
operator++(int)¶ Post-increment operator.
- Return
a reference to
this.
-
X &
operator--()¶ Pre-decrement operator.
- Return
a reference to
this.
-
X &
operator--(int)¶ Post-decrement operator.
- Return
a reference to
this.
Arithmetic operators¶
- template <class X>
-
batch_type_t<X>
xsimd::operator-(const simd_base<X> &rhs)¶ Computes the opposite of the batch
rhs.- Return
the opposite of
rhs.- Template Parameters
X: the actual type of batch.
- Parameters
rhs: batch involved in the operation.
- template <class X>
-
X
xsimd::operator+(const simd_batch<X> &rhs)¶ No-op on
rhs.- Return
rhs.- Template Parameters
X: the actual type of batch.
- Parameters
rhs: batch involved in the operation.
- template <class X, class Y>
-
batch_type_t<X>
xsimd::operator+(const simd_base<X> &lhs, const simd_base<Y> &rhs)¶ Computes the sum of the batches
lhsandrhs.- Return
the result of the addition.
- Template Parameters
X: the actual type of batch.
- Parameters
lhs: batch involved in the addition.rhs: batch involved in the addition.
- template <class X>
-
batch_type_t<X>
xsimd::operator+(const simd_base<X> &lhs, const typename simd_batch_traits<X>::value_type &rhs)¶ Computes the sum of the batch
lhsand the scalarrhs.Equivalent to the sum of two batches where all the values of the second one are initialized to
rhs.- Return
the result of the addition.
- Template Parameters
X: the actual type of batch.
- Parameters
lhs: batch involved in the addition.rhs: scalar involved in the addition.
- template <class X>
-
batch_type_t<X>
xsimd::operator+(const typename simd_batch_traits<X>::value_type &lhs, const simd_base<X> &rhs)¶ Computes the sum of the scalar
lhsand the batchrhs.Equivalent to the sum of two batches where all the values of the first one are initialized to
rhs.- Return
the result of the addition.
- Template Parameters
X: the actual type of batch.
- Parameters
lhs: scalar involved in the addition.rhs: batch involved in the addition.
- template <class X, class Y>
-
batch_type_t<X>
xsimd::operator-(const simd_base<X> &lhs, const simd_base<Y> &rhs)¶ Computes the difference of the batches
lhsandrhs.- Return
the result of the difference.
- Template Parameters
X: the actual type of batch.
- Parameters
lhs: batch involved in the difference.rhs: batch involved in the difference.
- template <class X>
-
batch_type_t<X>
xsimd::operator-(const simd_base<X> &lhs, const typename simd_batch_traits<X>::value_type &rhs)¶ Computes the difference of the batch
lhsand the scalarrhs.Equivalent to the difference of two batches where all the values of the second one are initialized to
rhs.- Return
the result of the difference.
- Template Parameters
X: the actual type of batch.
- Parameters
lhs: batch involved in the difference.rhs: scalar involved in the difference.
- template <class X>
-
batch_type_t<X>
xsimd::operator-(const typename simd_batch_traits<X>::value_type &lhs, const simd_base<X> &rhs)¶ Computes the difference of the scalar
lhsand the batchrhs.Equivalent to the difference of two batches where all the values of the first one are initialized to
rhs.- Return
the result of the difference.
- Template Parameters
X: the actual type of batch.
- Parameters
lhs: scalar involved in the difference.rhs: batch involved in the difference.
- template <class X, class Y>
-
batch_type_t<X>
xsimd::operator*(const simd_base<X> &lhs, const simd_base<Y> &rhs)¶ Computes the product of the batches
lhsandrhs.- Return
the result of the product.
- Template Parameters
X: the actual type of batch.
- Parameters
lhs: batch involved in the product.rhs: batch involved in the product.
- template <class X>
-
batch_type_t<X>
xsimd::operator*(const simd_base<X> &lhs, const typename simd_batch_traits<X>::value_type &rhs)¶ Computes the product of the batch
lhsand the scalarrhs.Equivalent to the product of two batches where all the values of the second one are initialized to
rhs.- Return
the result of the product.
- Template Parameters
X: the actual type of batch.
- Parameters
lhs: batch involved in the product.rhs: scalar involved in the product.
- template <class X>
-
batch_type_t<X>
xsimd::operator*(const typename simd_batch_traits<X>::value_type &lhs, const simd_base<X> &rhs)¶ Computes the product of the scalar
lhsand the batchrhs.Equivalent to the difference of two batches where all the values of the first one are initialized to
rhs.- Return
the result of the product.
- Template Parameters
X: the actual type of batch.
- Parameters
lhs: scalar involved in the product.rhs: batch involved in the product.
- template <class X, class Y>
-
batch_type_t<X>
xsimd::operator/(const simd_base<X> &lhs, const simd_base<Y> &rhs)¶ Computes the division of the batch
lhsby the batchrhs.- Return
the result of the division.
- Template Parameters
X: the actual type of batch.
- Parameters
lhs: batch involved in the division.rhs: batch involved in the division.
- template <class X>
-
batch_type_t<X>
xsimd::operator/(const simd_base<X> &lhs, const typename simd_batch_traits<X>::value_type &rhs)¶ Computes the division of the batch
lhsby the scalarrhs.Equivalent to the division of two batches where all the values of the second one are initialized to
rhs.- Return
the result of the division.
- Template Parameters
X: the actual type of batch.
- Parameters
lhs: batch involved in the division.rhs: scalar involved in the division.
- template <class X>
-
batch_type_t<X>
xsimd::operator/(const typename simd_batch_traits<X>::value_type &lhs, const simd_base<X> &rhs)¶ Computes the division of the scalar
lhsand the batchrhs.Equivalent to the difference of two batches where all the values of the first one are initialized to
rhs.- Return
the result of the division.
- Template Parameters
X: the actual type of batch.
- Parameters
lhs: scalar involved in the division.rhs: batch involved in the division.
- template <class X, class Y>
-
batch_type_t<X>
xsimd::operator%(const simd_base<X> &lhs, const simd_base<Y> &rhs)¶ Computes the integer modulo of the batch
lhsby the batchrhs.- Return
the result of the modulo.
- Parameters
lhs: batch involved in the modulo.rhs: batch involved in the modulo.
- template <class X>
-
batch_type_t<X>
xsimd::operator%(const simd_base<X> &lhs, const typename simd_batch_traits<X>::value_type &rhs)¶ Computes the integer modulo of the batch
lhsby the scalarrhs.Equivalent to the modulo of two batches where all the values of the second one are initialized to
rhs.- Return
the result of the modulo.
- Template Parameters
X: the actual type of batch.
- Parameters
lhs: batch involved in the modulo.rhs: scalar involved in the modulo.
- template <class X>
-
batch_type_t<X>
xsimd::operator%(const typename simd_batch_traits<X>::value_type &lhs, const simd_base<X> &rhs)¶ Computes the integer modulo of the scalar
lhsand the batchrhs.Equivalent to the difference of two batches where all the values of the first one are initialized to
rhs.- Return
the result of the modulo.
- Template Parameters
X: the actual type of batch.
- Parameters
lhs: scalar involved in the modulo.rhs: batch involved in the modulo.
Comparison operators¶
- template <class X>
-
simd_batch_traits<X>::batch_bool_type
xsimd::operator==(const simd_base<X> &lhs, const simd_base<X> &rhs)¶ Element-wise equality comparison of batches
lhsandrhs.- Return
a boolean batch.
- Parameters
lhs: batch involved in the comparison.rhs: batch involved in the comparison.
- template <class X>
-
simd_batch_traits<X>::batch_bool_type
xsimd::operator!=(const simd_base<X> &lhs, const simd_base<X> &rhs)¶ Element-wise inequality comparison of batches
lhsandrhs.- Return
a boolean batch.
- Parameters
lhs: batch involved in the comparison.rhs: batch involved in the comparison.
- template <class X>
-
simd_batch_traits<X>::batch_bool_type
xsimd::operator<(const simd_base<X> &lhs, const simd_base<X> &rhs)¶ Element-wise lesser than comparison of batches
lhsandrhs.- Return
a boolean batch.
- Parameters
lhs: batch involved in the comparison.rhs: batch involved in the comparison.
- template <class X>
-
simd_batch_traits<X>::batch_bool_type
xsimd::operator<=(const simd_base<X> &lhs, const simd_base<X> &rhs)¶ Element-wise lesser or equal to comparison of batches
lhsandrhs.- Return
a boolean batch.
- Parameters
lhs: batch involved in the comparison.rhs: batch involved in the comparison.
- template <class X>
-
simd_batch_traits<X>::batch_bool_type
xsimd::operator>(const simd_base<X> &lhs, const simd_base<X> &rhs)¶ Element-wise greater than comparison of batches
lhsandrhs.- Return
a boolean batch.
- Template Parameters
X: the actual type of batch.
- Parameters
lhs: batch involved in the comparison.rhs: batch involved in the comparison.
- template <class X>
-
simd_batch_traits<X>::batch_bool_type
xsimd::operator>=(const simd_base<X> &lhs, const simd_base<X> &rhs)¶ Element-wise greater or equal comparison of batches
lhsandrhs.- Return
a boolean batch.
- Template Parameters
X: the actual type of batch.
- Parameters
lhs: batch involved in the comparison.rhs: batch involved in the comparison.
Bitwise operators¶
- template <class X, class Y>
-
batch_type_t<X>
xsimd::operator&(const simd_base<X> &lhs, const simd_base<Y> &rhs)¶ Computes the bitwise and of the batches
lhsandrhs.- Return
the result of the bitwise and.
- Parameters
lhs: batch involved in the operation.rhs: batch involved in the operation.
- template <class X, class Y>
-
batch_type_t<X>
xsimd::operator|(const simd_base<X> &lhs, const simd_base<Y> &rhs)¶ Computes the bitwise or of the batches
lhsandrhs.- Return
the result of the bitwise or.
- Parameters
lhs: batch involved in the operation.rhs: batch involved in the operation.
- template <class X, class Y>
-
batch_type_t<X>
xsimd::operator^(const simd_base<X> &lhs, const simd_base<Y> &rhs)¶ Computes the bitwise xor of the batches
lhsandrhs.- Return
the result of the bitwise xor.
- Parameters
lhs: batch involved in the operation.rhs: batch involved in the operation.
- template <class X>
-
batch_type_t<X>
xsimd::operator~(const simd_base<X> &rhs)¶ Computes the bitwise not of the batches
lhsandrhs.- Return
the result of the bitwise not.
- Parameters
rhs: batch involved in the operation.
- template <class X>
-
batch_type_t<X>
xsimd::bitwise_andnot(const simd_batch<X> &lhs, const simd_batch<X> &rhs)¶ Computes the bitwise andnot of the batches
lhsandrhs.- Return
the result of the bitwise andnot.
- Parameters
lhs: batch involved in the operation.rhs: batch involved in the operation.
Reducers¶
- template <class X>
-
simd_batch_traits<X>::value_type
xsimd::hadd(const simd_base<X> &rhs)¶ Adds all the scalars of the batch
rhs.- Return
the result of the reduction.
- Parameters
rhs: batch involved in the reduction
- template <class X>
-
enable_if_simd_t<X>
xsimd::haddp(const X *row)¶ Parallel horizontal addition: adds the scalars of each batch in the array pointed by
rowand store them in a returned batch.- Return
the result of the reduction.
- Parameters
row: an array ofNbatches
Miscellaneous¶
- template <class X>
-
batch_type_t<X>
xsimd::select(const typename simd_batch_traits<X>::batch_bool_type &cond, const simd_base<X> &a, const simd_base<X> &b)¶ Ternary operator for batches: selects values from the batches
aorbdepending on the boolean values incond.Equivalent to
for(std::size_t i = 0; i < N; ++i) res[i] = cond[i] ? a[i] : b[i];
- Return
the result of the selection.
- Parameters
cond: batch condition.a: batch values for truthy condition.b: batch value for falsy condition.
Other operators¶
Warning
doxygenfunction: Unable to resolve multiple matches for function “xsimd::operator!” with arguments (const simd_batch<X>&) in doxygen xml output for project “xsimd” from directory: ../xml. Potential matches:
- template <class X>
X xsimd::operator!(const simd_batch_bool<X>&)
- template <class X>
simd_batch_traits<X>::batch_bool_type xsimd::operator!(const simd_base<X>&)
- template <class X>
-
std::ostream &
xsimd::operator<<(std::ostream &out, const simd_batch<X> &rhs) Insert the batch
rhsinto the streamout.- Return
the output stream.
- Template Parameters
X: the actual type of batch.
- Parameters
out: the output stream.rhs: the batch to output.