Batch of scalars

template <class T, class A>
class xsimd::batch

batch of integer or floating point values.

Abstract representation of an SIMD register for floating point or integral value.

Template Parameters
  • T: the type of the underlying values.

  • A: the architecture this batch is tied too.

Inherits from types::simd_register< T, A >, xsimd::types::integral_only_operators< T, A >

Public Types

template<>
using value_type = T

Type of the scalar elements within this batch.

template<>
using arch_type = A

SIMD Architecture abstracted by this batch.

template<>
using register_type = typename types::simd_register::register_type

SIMD register type abstracted by this batch.

template<>
using batch_bool_type = batch_bool<T, A>

Associated batch type used to represented logical operations on this batch.

Public Functions

XSIMD_INLINE batch()

Create a batch initialized with undefined values.

XSIMD_INLINE batch(T val)

Create a batch with all element initialized to val.

template <class… Ts>
XSIMD_INLINE batch(T val0, T val1, Ts... vals)

Create a batch with elements initialized from val0, val1, vals

There must be exactly size elements in total.

XSIMD_INLINE batch(batch_bool_type const &b)

Converts a bool_batch to a batch where each element is set to 1 (resp.

0) if the corresponding element is true (resp. false).

XSIMD_INLINE batch(register_type reg)

Wraps a compatible native simd register as a batch.

This is generally not needed but becomes handy when doing architecture-specific operations.

template <class U>
XSIMD_INLINE void xsimd::batch::store_aligned(U * mem) const

Copy content of this batch to the buffer mem.

The memory needs to be aligned.

template <class U>
XSIMD_INLINE void xsimd::batch::store_unaligned(U * mem) const

Copy content of this batch to the buffer mem.

The memory does not need to be aligned.

template <class U>
XSIMD_INLINE void xsimd::batch::store(U * mem, aligned_mode) const

Equivalent to batch::store_aligned()

template <class U>
XSIMD_INLINE void xsimd::batch::store(U * mem, unaligned_mode) const

Equivalent to batch::store_unaligned()

template <class U, class V>
XSIMD_INLINE void xsimd::batch::scatter(U * dst, batch < V, arch_type > const & index) const

Scatter elements from this batch into addresses starting at dst and offset by each element in index.

If T is not of the same size as U, a static_cast is performed at element scatter time.

XSIMD_INLINE T xsimd::batch::get(std::size_t i) const

Retrieve the i th scalar element in this batch.

warning This is very inefficient and should only be used for debugging purpose.

template <class U>
XSIMD_INLINE batch<T, A> xsimd::batch::broadcast(U val)

Equivalent to batch::batch(T val).

template <class U>
XSIMD_INLINE batch<T, A> xsimd::batch::load_aligned(U const * mem)

Loading from aligned memory.

May involve a conversion if U is different from T.

template <class U>
XSIMD_INLINE batch<T, A> xsimd::batch::load_unaligned(U const * mem)

Loading from unaligned memory.

May involve a conversion if U is different from T.

template <class U>
XSIMD_INLINE batch<T, A> xsimd::batch::load(U const * mem, aligned_mode)

Equivalent to batch::load_aligned()

template <class U>
XSIMD_INLINE batch<T, A> xsimd::batch::load(U const * mem, unaligned_mode)

Equivalent to batch::load_unaligned()

template <typename U, typename V>
XSIMD_INLINE batch<T, A> xsimd::batch::gather(U const * src, batch < V, A > const & index)

Create a new batch gathering elements starting at address src and offset by each element in index.

If T is not of the same size as U, a static_cast is performed at element gather time.

Public Static Attributes

constexpr std::size_t size = sizeof(types::simd_register<T, A>) / sizeof(T)

Number of scalar elements in this batch.

Friends

XSIMD_INLINE batch operator+(batch const & self, batch const & other)

Shorthand for xsimd::add()

XSIMD_INLINE batch operator-(batch const & self, batch const & other)

Shorthand for xsimd::sub()

XSIMD_INLINE batch operator*(batch const & self, batch const & other)

Shorthand for xsimd::mul()

XSIMD_INLINE batch operator/(batch const & self, batch const & other)

Shorthand for xsimd::div()

XSIMD_INLINE batch operator&(batch const & self, batch const & other)

Shorthand for xsimd::bitwise_and()

XSIMD_INLINE batch operator|(batch const & self, batch const & other)

Shorthand for xsimd::bitwise_or()

XSIMD_INLINE batch operator^(batch const & self, batch const & other)

Shorthand for xsimd::bitwise_xor()

XSIMD_INLINE batch operator&&(batch const & self, batch const & other)

Shorthand for xsimd::logical_and()

XSIMD_INLINE batch operator||(batch const & self, batch const & other)

Shorthand for xsimd::logical_or()

template <typename T, std::size_t N>
struct xsimd::make_sized_batch

type utility to select a batch of given type and size

If one of the available architectures has a native vector type of the given type and size, sets the type member to the appropriate batch type. Otherwise set its to void.

Template Parameters
  • T: the type of the underlying values.

  • N: the number of elements of that type in the batch.