simd_batch¶
-
template<class X>
class xsimd::simd_batch : public xsimd::simd_base<X>¶ 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.
- tparam X
The derived type
Subclassed by xsimd::avx512_int_batch< uint8_t, 64 >, xsimd::avx512_int_batch< uint32_t, 16 >, xsimd::avx512_int_batch< uint16_t, 32 >, xsimd::avx512_int_batch< int64_t, 8 >, xsimd::avx512_int_batch< uint64_t, 8 >, xsimd::avx512_int_batch< int8_t, 64 >, xsimd::avx512_int_batch< int32_t, 16 >, xsimd::avx512_int_batch< int16_t, 32 >, xsimd::avx_int_batch< int64_t, 4 >, xsimd::avx_int_batch< uint32_t, 8 >, xsimd::avx_int_batch< int32_t, 8 >, xsimd::avx_int_batch< int16_t, 16 >, xsimd::avx_int_batch< int8_t, 32 >, xsimd::avx_int_batch< uint64_t, 4 >, xsimd::avx_int_batch< uint8_t, 32 >, xsimd::avx_int_batch< uint16_t, 16 >, xsimd::sse_int_batch< uint32_t, 4 >, xsimd::sse_int_batch< int8_t, 16 >, xsimd::sse_int_batch< int64_t, 2 >, xsimd::sse_int_batch< int16_t, 8 >, xsimd::sse_int_batch< uint16_t, 8 >, xsimd::sse_int_batch< uint8_t, 16 >, xsimd::sse_int_batch< int32_t, 4 >, xsimd::sse_int_batch< uint64_t, 2 >
Static builders
-
static inline X broadcast(value_type v)¶
Creates a batch from the single value
v.- Parameters
v – the value used to initialize the batch
- Returns
a new batch instance
Arithmetic computed assignment
-
inline X &operator+=(const X &rhs)¶
Adds the batch
rhstothis.- Parameters
rhs – the batch to add.
- Returns
a reference to
this.
-
inline X &operator+=(const value_type &rhs)¶
Adds the scalar
rhsto each value contained inthis.- Parameters
rhs – the scalar to add.
- Returns
a reference to
this.
-
inline X &operator-=(const X &rhs)¶
Substracts the batch
rhstothis.- Parameters
rhs – the batch to substract.
- Returns
a reference to
this.
-
inline X &operator-=(const value_type &rhs)¶
Substracts the scalar
rhsto each value contained inthis.- Parameters
rhs – the scalar to substract.
- Returns
a reference to
this.
-
inline X &operator*=(const X &rhs)¶
Multiplies
thiswith the batchrhs.- Parameters
rhs – the batch involved in the multiplication.
- Returns
a reference to
this.
-
inline X &operator*=(const value_type &rhs)¶
Multiplies each scalar contained in
thiswith the scalarrhs.- Parameters
rhs – the scalar involved in the multiplication.
- Returns
a reference to
this.
Bitwise computed assignment
-
inline X &operator&=(const X &rhs)¶
Assigns the bitwise and of
rhsandthis.- Parameters
rhs – the batch involved in the operation.
- Returns
a reference to
this.
Increment and decrement operators
Arithmetic operators¶
-
template<class X>
inline batch_type_t<X> operator-(const simd_base<X> &rhs)¶ Computes the opposite of the batch
rhs.- Template Parameters
X – the actual type of batch.
- Parameters
rhs – batch involved in the operation.
- Returns
the opposite of
rhs.
-
template<class X>
inline X operator+(const simd_batch<X> &rhs)¶ No-op on
rhs.- Template Parameters
X – the actual type of batch.
- Parameters
rhs – batch involved in the operation.
- Returns
rhs.
-
template<class X, class Y>
batch_type_t<X> operator+(const simd_base<X> &lhs, const simd_base<Y> &rhs)¶ Computes the sum of the batches
lhsandrhs.- Template Parameters
X – the actual type of batch.
- Parameters
lhs – batch involved in the addition.
rhs – batch involved in the addition.
- Returns
the result of the addition.
-
template<class X>
batch_type_t<X> 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.- Template Parameters
X – the actual type of batch.
- Parameters
lhs – batch involved in the addition.
rhs – scalar involved in the addition.
- Returns
the result of the addition.
-
template<class X>
batch_type_t<X> 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.- Template Parameters
X – the actual type of batch.
- Parameters
lhs – scalar involved in the addition.
rhs – batch involved in the addition.
- Returns
the result of the addition.
-
template<class X>
inline batch_type_t<X> sadd(const simd_base<X> &lhs, const simd_base<X> &rhs)¶ Computes the saturate sum of the batch
lhsand the batchrhs.lhs.- Template Parameters
X – the actual type of batch.
- Parameters
lhs – batch involved in the saturated addition.
rhs – batch involved in the saturated addition.
- Returns
the result of the saturated addition.
-
template<class X>
inline batch_type_t<X> sadd(const typename simd_batch_traits<X>::value_type &lhs, const simd_base<X> &rhs)¶ Computes the saturate sum of the scalar
lhsand the batchrhs.Equivalent to the saturated sum of two batches where all the values of the first one are initialized to
lhs.- Template Parameters
X – the actual type of batch.
- Parameters
lhs – scalar involved in the saturated addition.
rhs – batch involved in the saturated addition.
- Returns
the result of the saturated addition.
-
template<class X>
inline batch_type_t<X> sadd(const simd_base<X> &lhs, const typename simd_batch_traits<X>::value_type &rhs)¶ Computes the saturate sum of the batch
lhsand the scalarrhs.Equivalent to the saturated sum of two batches where all the values of the second one are initialized to
rhs.- Template Parameters
X – the actual type of batch.
- Parameters
lhs – batch involved in the saturated addition.
rhs – scalar involved in the saturated addition.
- Returns
the result of the saturated addition.
-
template<class X, class Y>
batch_type_t<X> operator-(const simd_base<X> &lhs, const simd_base<Y> &rhs)¶ Computes the difference of the batches
lhsandrhs.- Template Parameters
X – the actual type of batch.
- Parameters
lhs – batch involved in the difference.
rhs – batch involved in the difference.
- Returns
the result of the difference.
-
template<class X>
batch_type_t<X> 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.- Template Parameters
X – the actual type of batch.
- Parameters
lhs – batch involved in the difference.
rhs – scalar involved in the difference.
- Returns
the result of the difference.
-
template<class X>
batch_type_t<X> 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.- Template Parameters
X – the actual type of batch.
- Parameters
lhs – scalar involved in the difference.
rhs – batch involved in the difference.
- Returns
the result of the difference.
-
template<class X>
inline batch_type_t<X> ssub(const simd_base<X> &lhs, const simd_base<X> &rhs)¶ Computes the saturate difference of the batch
lhsand the batchrhs.lhs.- Template Parameters
X – the actual type of batch.
- Parameters
lhs – batch involved in the saturated difference.
rhs – batch involved in the saturated difference.
- Returns
the result of the saturated difference.
-
template<class X>
inline batch_type_t<X> ssub(const typename simd_batch_traits<X>::value_type &lhs, const simd_base<X> &rhs)¶ Computes the saturate difference of the scalar
lhsand the batchrhs.Equivalent to the saturated sum of two batches where all the values of the first one are initialized to
lhs.- Template Parameters
X – the actual type of batch.
- Parameters
lhs – scalar involved in the saturated difference.
rhs – batch involved in the saturated difference.
- Returns
the result of the saturated difference.
-
template<class X>
inline batch_type_t<X> ssub(const simd_base<X> &lhs, const typename simd_batch_traits<X>::value_type &rhs)¶ Computes the saturate difference of the batch
lhsand the scalarrhs.Equivalent to the saturated difference of two batches where all the values of the second one are initialized to
rhs.- Template Parameters
X – the actual type of batch.
- Parameters
lhs – batch involved in the saturated difference.
rhs – scalar involved in the saturated difference.
- Returns
the result of the saturated difference.
-
template<class X, class Y>
batch_type_t<X> operator*(const simd_base<X> &lhs, const simd_base<Y> &rhs)¶ Computes the product of the batches
lhsandrhs.- Template Parameters
X – the actual type of batch.
- Parameters
lhs – batch involved in the product.
rhs – batch involved in the product.
- Returns
the result of the product.
-
template<class X>
batch_type_t<X> 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.- Template Parameters
X – the actual type of batch.
- Parameters
lhs – batch involved in the product.
rhs – scalar involved in the product.
- Returns
the result of the product.
-
template<class X>
batch_type_t<X> 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.- Template Parameters
X – the actual type of batch.
- Parameters
lhs – scalar involved in the product.
rhs – batch involved in the product.
- Returns
the result of the product.
-
template<class X, class Y>
batch_type_t<X> operator/(const simd_base<X> &lhs, const simd_base<Y> &rhs)¶ Computes the division of the batch
lhsby the batchrhs.- Template Parameters
X – the actual type of batch.
- Parameters
lhs – batch involved in the division.
rhs – batch involved in the division.
- Returns
the result of the division.
-
template<class X>
batch_type_t<X> 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.- Template Parameters
X – the actual type of batch.
- Parameters
lhs – batch involved in the division.
rhs – scalar involved in the division.
- Returns
the result of the division.
-
template<class X>
batch_type_t<X> 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.- Template Parameters
X – the actual type of batch.
- Parameters
lhs – scalar involved in the division.
rhs – batch involved in the division.
- Returns
the result of the division.
-
template<class X, class Y>
batch_type_t<X> operator%(const simd_base<X> &lhs, const simd_base<Y> &rhs)¶ Computes the integer modulo of the batch
lhsby the batchrhs.- Parameters
lhs – batch involved in the modulo.
rhs – batch involved in the modulo.
- Returns
the result of the modulo.
-
template<class X>
batch_type_t<X> 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.- Template Parameters
X – the actual type of batch.
- Parameters
lhs – batch involved in the modulo.
rhs – scalar involved in the modulo.
- Returns
the result of the modulo.
-
template<class X>
batch_type_t<X> 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.- Template Parameters
X – the actual type of batch.
- Parameters
lhs – scalar involved in the modulo.
rhs – batch involved in the modulo.
- Returns
the result of the modulo.
Comparison operators¶
-
template<class X>
simd_batch_traits<X>::batch_bool_type operator==(const simd_base<X> &lhs, const simd_base<X> &rhs)¶ Element-wise equality comparison of batches
lhsandrhs.- Parameters
lhs – batch involved in the comparison.
rhs – batch involved in the comparison.
- Returns
a boolean batch.
-
template<class X>
simd_batch_traits<X>::batch_bool_type operator!=(const simd_base<X> &lhs, const simd_base<X> &rhs)¶ Element-wise inequality comparison of batches
lhsandrhs.- Parameters
lhs – batch involved in the comparison.
rhs – batch involved in the comparison.
- Returns
a boolean batch.
-
template<class X>
simd_batch_traits<X>::batch_bool_type operator<(const simd_base<X> &lhs, const simd_base<X> &rhs)¶ Element-wise lesser than comparison of batches
lhsandrhs.- Parameters
lhs – batch involved in the comparison.
rhs – batch involved in the comparison.
- Returns
a boolean batch.
-
template<class X>
simd_batch_traits<X>::batch_bool_type operator<=(const simd_base<X> &lhs, const simd_base<X> &rhs)¶ Element-wise lesser or equal to comparison of batches
lhsandrhs.- Parameters
lhs – batch involved in the comparison.
rhs – batch involved in the comparison.
- Returns
a boolean batch.
-
template<class X>
simd_batch_traits<X>::batch_bool_type operator>(const simd_base<X> &lhs, const simd_base<X> &rhs)¶ Element-wise greater than comparison of batches
lhsandrhs.- Template Parameters
X – the actual type of batch.
- Parameters
lhs – batch involved in the comparison.
rhs – batch involved in the comparison.
- Returns
a boolean batch.
-
template<class X>
simd_batch_traits<X>::batch_bool_type operator>=(const simd_base<X> &lhs, const simd_base<X> &rhs)¶ Element-wise greater or equal comparison of batches
lhsandrhs.- Template Parameters
X – the actual type of batch.
- Parameters
lhs – batch involved in the comparison.
rhs – batch involved in the comparison.
- Returns
a boolean batch.
Bitwise operators¶
-
template<class X, class Y>
inline batch_type_t<X> operator&(const simd_base<X> &lhs, const simd_base<Y> &rhs)¶ Computes the bitwise and of the batches
lhsandrhs.- Parameters
lhs – batch involved in the operation.
rhs – batch involved in the operation.
- Returns
the result of the bitwise and.
-
template<class X, class Y>
inline batch_type_t<X> operator|(const simd_base<X> &lhs, const simd_base<Y> &rhs)¶ Computes the bitwise or of the batches
lhsandrhs.- Parameters
lhs – batch involved in the operation.
rhs – batch involved in the operation.
- Returns
the result of the bitwise or.
-
template<class X, class Y>
inline batch_type_t<X> operator^(const simd_base<X> &lhs, const simd_base<Y> &rhs)¶ Computes the bitwise xor of the batches
lhsandrhs.- Parameters
lhs – batch involved in the operation.
rhs – batch involved in the operation.
- Returns
the result of the bitwise xor.
Reducers¶
Miscellaneous¶
-
template<class X>
inline batch_type_t<X> 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];
- Parameters
cond – batch condition.
a – batch values for truthy condition.
b – batch value for falsy condition.
- Returns
the result of the selection.
-
template<class X, bool... Masks>
inline batch_type_t<X> select(const batch_bool_constant<typename simd_batch_traits<X>::value_type, Masks...> &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 in the constant batchcond.Equivalent to
for(std::size_t i = 0; i < N; ++i) res[i] = cond[i] ? a[i] : b[i];
- Parameters
cond – constant batch condition.
a – batch values for truthy condition.
b – batch value for falsy condition.
- Returns
the result of the selection.
Other operators¶
Warning
doxygenfunction: Unable to resolve 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 operator!(const simd_batch_bool<X> &rhs)
- template<class X> simd_batch_traits<X>::batch_bool_type operator!(const simd_base<X> &rhs)
-
template<class X>
inline std::ostream &xsimd::operator<<(std::ostream &out, const simd_batch<X> &rhs)¶ Insert the batch
rhsinto the streamout.- Template Parameters
X – the actual type of batch.
- Parameters
out – the output stream.
rhs – the batch to output.
- Returns
the output stream.