AI Engine API User Guide (AIE) 2023.2
Loading...
Searching...
No Matches
Vector and Accumulator Conversions

Vectors can be reinterpreted as vectors with a different element type, as long as they have the same total size. More...

Overview

Vectors can be reinterpreted as vectors with a different element type, as long as they have the same total size.

v2 = v.cast_to<int32>(v);
v3 = aie::vector_cast<cint16>(v);
auto cast_to() const
Reinterprets the current vector as a vector of the given type.
Definition vector.hpp:242
Type for vector registers.
Definition vector.hpp:107
int32_t int32
Definition types.hpp:64

Vectors can be converted into accumulators. Their values can be shifted into a larger magnitude to implement fixed point precision schemes (this does not apply to floating point accumulators).

acc.from_vector(v, shift);
void from_vector(const vector< T, Elems > &v, int shift=0)
Updates the contents of the accumulator using the values in the given vector after applying the reque...
Definition accum.hpp:415
Type for vector accumulators.
Definition accum.hpp:84

Conversely, accumulators can be converted into vectors. Their values can be shifted down before rounding and saturation is applied (this does not apply to floating point accumulators).

v = acc.to_vector<int16>(shift);
vector< T, Elems > to_vector(int shift=0) const
Applies shift-round-saturate to the elements of the accumulator and stores the result into a vector o...
Definition accum.hpp:354
int16_t int16
Definition types.hpp:63

Functions

template<AccumElemBaseType AccumTag, VectorOrOp Vec>
accum< AccumTag, Vec::size()> aie::from_vector (const Vec &v, int shift=0)
 Returns the values of the passed vector in an accumulator of the requested type after applying the requested upshift operation.
 
template<VectorOrOp Vec, typename T2 = Utils::get_prev_integer_type_t<typename Vec::value_type>>
auto aie::pack (const Vec &v) -> vector< T2, Vec::size()>
 Returns a conversion of the passed vector to the next smaller integer datatype, with the same number of elements.
 
template<typename TR , typename T >
requires (AccumOrOp<T> || MmulOrOp<T>)
vector< TR, T::size()> aie::to_vector (const T &acc, int shift=0)
 Returns the values of the passed accumulator in a vector of the requested type.
 
template<VectorOrOp Vec, typename T2 = Utils::get_next_integer_type_t<typename Vec::value_type>>
requires (Utils::is_one_of_v<T2, int8, uint8, int16, uint16>)
auto aie::unpack (const Vec &v) -> vector< T2, Vec::size()>
 Returns a conversion of the passed vector to the next larger integer datatype, with the same number of elements.
 
template<ElemBaseType DstT, Accum Acc>
requires (arch::is(arch::AIE_ML))
auto aie::vector_cast (const Acc &acc)
 Reinterpret an accumulator as a vector.
 
template<ElemBaseType DstT, Vector Vec>
auto aie::vector_cast (const Vec &v)
 Reinterpret a vector using a different element type.
 

Function Documentation

◆ from_vector()

template<AccumElemBaseType AccumTag, VectorOrOp Vec>
accum< AccumTag, Vec::size()> aie::from_vector ( const Vec &  v,
int  shift = 0 
)

Returns the values of the passed vector in an accumulator of the requested type after applying the requested upshift operation.

Parameters
vInput vector. The type must meet VectorOrOp.
shiftOptional upshift in bits to be applied to output accumulator. This parameter is ignored for floating-point types.
Template Parameters
AccumTagAccumulator tag that specifies returned accumulator type. The class must be compatible with the vector type (real/complex).

◆ pack()

template<VectorOrOp Vec, typename T2 = Utils::get_prev_integer_type_t<typename Vec::value_type>>
auto aie::pack ( const Vec &  v) -> vector<T2, Vec::size()>

Returns a conversion of the passed vector to the next smaller integer datatype, with the same number of elements.

Parameters
vInput vector. The type must meet VectorOrOp
Template Parameters
T2Element type for the returned vector. Can only select between int8/uint8 on AIE1.

◆ to_vector()

template<typename TR , typename T >
requires (AccumOrOp<T> || MmulOrOp<T>)
vector< TR, T::size()> aie::to_vector ( const T &  acc,
int  shift = 0 
)

Returns the values of the passed accumulator in a vector of the requested type.

The values can be shifted down before rounding and saturation are applied (does not apply to floating point accumulators).

Parameters
accInput accumulator. The type must meet AccumOrOp or MmulOrOp.
shiftOptional downshift in bits to be applied to output data. This parameter is ignored for floating-point types.
Template Parameters
TRElement type for the returned vector.

◆ unpack()

template<VectorOrOp Vec, typename T2 = Utils::get_next_integer_type_t<typename Vec::value_type>>
requires (Utils::is_one_of_v<T2, int8, uint8, int16, uint16>)
auto aie::unpack ( const Vec &  v) -> vector<T2, Vec::size()>

Returns a conversion of the passed vector to the next larger integer datatype, with the same number of elements.

Parameters
vInput vector. The type must meet VectorOrOp

◆ vector_cast() [1/2]

template<ElemBaseType DstT, Accum Acc>
requires (arch::is(arch::AIE_ML))
auto aie::vector_cast ( const Acc &  acc)

Reinterpret an accumulator as a vector.

The returned vector has the same size in bits as the input accumulator.

Template Parameters
DstTElement type for the returned vector.
Parameters
accInput accumulator.

◆ vector_cast() [2/2]

template<ElemBaseType DstT, Vector Vec>
auto aie::vector_cast ( const Vec &  v)

Reinterpret a vector using a different element type.

The returned vector has the same size in bits as the input vector.

Template Parameters
DstTElement type for the returned vector.
Parameters
vInput vector.