Data transfer¶
-
template<class
T, classA= default_arch>
batch<T, A>broadcast(T v) noexcept¶ Creates a batch from the single value
v.- Return
a new batch instance
- Parameters
v: the value used to initialize the batch
-
template<class
To, classA= default_arch, classFrom>
simd_return_type<From, To>broadcast_as(From v) noexcept¶ Creates a batch from the single value
vand the specified batch value typeTo.- Return
a new batch instance
- Parameters
v: the value used to initialize the batch
-
template<class
T, classA, size_tI>
batch<T, A>insert(batch<T, A> const &x, T val, index<I> pos) noexcept¶ Create a new batch equivalent to
xbut with elementvalset at positionpos.- Return
copy of
xwith positionposset toval- Parameters
x: batchval: value to setpos: index of the updated slot
-
template<class
To, classA= default_arch, classFrom>
simd_return_type<From, To>load_as(From const *ptr, aligned_mode) noexcept¶ Creates a batch from the buffer
ptrand the specifed batch value typeTo.The memory needs to be aligned.
- Return
a new batch instance
- Parameters
ptr: the memory buffer to read
-
template<class
To, classA= default_arch, classFrom>
simd_return_type<From, To>load_as(From const *ptr, unaligned_mode) noexcept¶ Creates a batch from the buffer
ptrand the specifed batch value typeTo.The memory does not need to be aligned.
- Return
a new batch instance
- Parameters
ptr: the memory buffer to read
-
template<class
A= default_arch, classFrom>
batch<From, A>load(From const *ptr, aligned_mode = {}) noexcept¶ Creates a batch from the buffer
ptr.The memory needs to be aligned.
- Return
a new batch instance
- Parameters
ptr: the memory buffer to read
-
template<class
A= default_arch, classFrom>
batch<From, A>load(From const *ptr, unaligned_mode) noexcept¶ Creates a batch from the buffer
ptr.The memory does not need to be aligned.
- Return
a new batch instance
- Parameters
ptr: the memory buffer to read
-
template<class
A= default_arch, classFrom>
batch<From, A>load_aligned(From const *ptr) noexcept¶ Creates a batch from the buffer
ptr.The memory needs to be aligned.
- Return
a new batch instance
- Parameters
ptr: the memory buffer to read
-
template<class
A= default_arch, classFrom>
batch<From, A>load_unaligned(From const *ptr) noexcept¶ Creates a batch from the buffer
ptr.The memory does not need to be aligned.
- Return
a new batch instance
- Parameters
ptr: the memory buffer to read
-
template<class
To, classA= default_arch, classFrom>
voidstore_as(To *dst, batch<From, A> const &src, aligned_mode) noexcept¶ Copy content of batch
srcto the bufferdst.The memory needs to be aligned.
- Parameters
dst: the memory buffer to write tosrc: the batch to copy
-
template<class
To, classA= default_arch, classFrom>
voidstore_as(To *dst, batch<From, A> const &src, unaligned_mode) noexcept¶ Copy content of batch
srcto the bufferdst.The memory does not need to be aligned.
- Parameters
dst: the memory buffer to write tosrc: the batch to copy
-
template<class
A, classT>
voidstore(T *mem, batch<T, A> const &val, aligned_mode = {}) noexcept¶ Copy content of batch
valto the buffermem.The memory does not need to be aligned.
- Parameters
mem: the memory buffer to write toval: the batch to copy from
-
template<class
A, classT>
voidstore(T *mem, batch<T, A> const &val, unaligned_mode) noexcept¶ Copy content of batch
valto the buffermem.The memory does not need to be aligned.
- Parameters
mem: the memory buffer to write toval: the batch to copy from
-
template<class
A, classT>
voidstore_aligned(T *mem, batch<T, A> const &val) noexcept¶ Copy content of batch
valto the buffermem.The memory needs to be aligned.
- Parameters
mem: the memory buffer to write toval: the batch to copy from
-
template<class
A, classT>
voidstore_unaligned(T *mem, batch<T, A> const &val) noexcept¶ Copy content of batch
valto the buffermem.The memory does not need to be aligned.
- Parameters
mem: the memory buffer to write toval: the batch to copy
-
template<class
T, classA, classVt, Vt...Values>
std::enable_if<std::is_arithmetic<T>::value, batch<T, A>>::typeswizzle(batch<T, A> const &x, batch_constant<batch<Vt, A>, Values...> mask) noexcept¶ Rearrange elements from
xaccording to maskmask.- Return
swizzled batch
- Parameters
x: batchmask: constant batch mask of integer elements of the same size as element ofx
-
template<class
T, classA>
batch<T, A>zip_hi(batch<T, A> const &x, batch<T, A> const &y) noexcept¶ Unpack and interleave data from the HIGH half of batches
xandy.Store the results in the Return value.
- Return
a batch of the high part of shuffled values.
- Parameters
x: a batch of integer or floating point or double precision values.y: a batch of integer or floating point or double precision values.
-
template<class
T, classA>
batch<T, A>zip_lo(batch<T, A> const &x, batch<T, A> const &y) noexcept¶ Unpack and interleave data from the LOW half of batches
xandy.Store the results in the Return value.
- Return
a batch of the low part of shuffled values.
- Parameters
x: a batch of integer or floating point or double precision values.y: a batch of integer or floating point or double precision values.
The following empty types are used for tag dispatching:
-
struct
aligned_mode¶ tag for load and store of aligned memory.
-
struct
unaligned_mode¶ tag for load and store of unaligned memory.