AI Engine API User Guide (AIE-API) 2024.1
|
AIE API provides operations to change the location of the elements within a vector and to combine the elements from two or more vectors.
Classes | |
class | aie::filter_mode< T, Elems > |
Enables precomputation of the filter element selection. More... | |
class | aie::interleave_unzip_mode< T, Elems > |
Enables precomputation of the interleave element selection. More... | |
class | aie::interleave_zip_mode< T, Elems > |
Enables precomputation of the interleave element selection. More... | |
Functions | |
template<Vector Vec, ElemBaseType T, unsigned Elems> requires (std::is_same_v<typename Vec::value_type, T> && Vec::size() == Elems) | |
auto | aie::filter (const Vec &v, filter_mode< T, Elems > mode) -> vector< T, Elems/2 > |
Returns a vector of half the size. | |
template<Vector Vec> | |
auto | aie::filter_even (const Vec &v, unsigned chunk_size=1) -> vector< typename Vec::value_type, Vec::size()/2 > |
Returns a vector of half the size whose contents follow the following pattern. | |
template<Vector Vec> | |
auto | aie::filter_odd (const Vec &v, unsigned chunk_size=1) -> vector< typename Vec::value_type, Vec::size()/2 > |
Returns a vector of half the size whose contents follow the following pattern. | |
template<ComplexVector Vec> | |
auto | aie::imag (const Vec &v) -> vector< detail::utils::get_complex_component_type_t< typename Vec::value_type >, Vec::size()> |
Gather and return the imaginary components of a complex vector. | |
template<ComplexElem Elem> | |
auto | aie::imag (Elem e) -> detail::utils::get_complex_component_type_t< operand_base_type_t< Elem > > |
Return the imaginary component of a complex value. | |
template<Vector Vec1, Vector Vec2> requires (is_same_vector_v<Vec1, Vec2>) | |
auto | aie::interleave_unzip (const Vec1 &v, const Vec2 &w, unsigned chunk_size) -> std::pair< aie_dm_resource_remove_t< Vec1 >, aie_dm_resource_remove_t< Vec1 > > |
Picks elements sequentially from the input vectors and writes them alternatively into the output vectors. | |
template<Vector Vec1, Vector Vec2, ElemBaseType T, unsigned Elems> requires (arch::is(arch::AIE_ML) && is_same_vector_v<Vec1, Vec2> && std::is_same_v<typename Vec1::value_type, T> && Vec1::size() == Elems) | |
auto | aie::interleave_unzip (const Vec1 &v1, const Vec2 &v2, const interleave_unzip_mode< T, Elems > &mode) -> std::pair< aie_dm_resource_remove_t< Vec1 >, aie_dm_resource_remove_t< Vec1 > > |
Picks elements sequentially from the input vectors and writes them alternatively into the output vectors. | |
template<Vector Vec1, Vector Vec2, ElemBaseType T, unsigned Elems> requires (arch::is(arch::AIE_ML) && is_same_vector_v<Vec1, Vec2> && std::is_same_v<typename Vec1::value_type, T> && Vec1::size() == Elems) | |
auto | aie::interleave_zip (const Vec1 &v, const Vec2 &w, const interleave_zip_mode< T, Elems > &mode) -> std::pair< aie_dm_resource_remove_t< Vec1 >, aie_dm_resource_remove_t< Vec1 > > |
Picks elements alternatively from the input vectors and writes them sequentially into the output vectors. | |
template<Vector Vec1, Vector Vec2> requires (is_same_vector_v<Vec1, Vec2>) | |
auto | aie::interleave_zip (const Vec1 &v, const Vec2 &w, unsigned chunk_size) -> std::pair< aie_dm_resource_remove_t< Vec1 >, aie_dm_resource_remove_t< Vec1 > > |
Picks elements alternatively from the input vectors and writes them sequentially into the output vectors. | |
template<ComplexVector Vec> | |
auto | aie::real (const Vec &v) -> vector< detail::utils::get_complex_component_type_t< typename Vec::value_type >, Vec::size()> |
Gather and return the real components of a complex vector. | |
template<ComplexElem Elem> | |
auto | aie::real (Elem e) -> detail::utils::get_complex_component_type_t< operand_base_type_t< Elem > > |
Return the real component of a complex value. | |
template<Vector Vec> | |
auto | aie::reverse (const Vec &v) -> aie_dm_resource_remove_t< Vec > |
Returns a vector whose contents are the same as the input vector, but in reverse order. | |
template<Elem E1, Elem E2, Mask M> requires (is_valid_elem_op_v<E1, E2>) | |
vector< operand_base_type_t< E1 >, M::size()> | aie::select (const E1 &a, const E2 &b, const M &m) |
Combines the values of the input vector and value into a vector of the same size by using a mask that specifies which is the source input for each element of the output vector. | |
template<Vector Vec, Elem E, Mask M> requires (is_valid_elem_op_v<E, typename Vec::value_type> && Vec::size() == M::size()) | |
auto | aie::select (const Vec &v, E a, const M &m) -> aie_dm_resource_remove_t< Vec > |
Combines the values of the input vector and value into a vector of the same size by using a mask that specifies which is the source input for each element of the output vector. | |
template<Vector Vec1, Vector Vec2, Mask M> requires (is_same_vector_v<Vec1, Vec2> && Vec1::size() == M::size()) | |
auto | aie::select (const Vec1 &v1, const Vec2 &v2, const M &m) -> aie_dm_resource_remove_t< Vec1 > |
Combines the values of the two input vectors into a vector of the same size by using a mask that specifies which is the source input for each element of the output vector. | |
template<Elem E, Vector Vec, Mask M> requires (is_valid_elem_op_v<E, typename Vec::value_type> && Vec::size() == M::size()) | |
auto | aie::select (E a, const Vec &v, const M &m) -> aie_dm_resource_remove_t< Vec > |
Combines the values of the input value and vector into a vector of the same size by using a mask that specifies which is the source input for each element of the output vector. | |
template<Vector Vec> | |
auto | aie::shuffle_down (const Vec &v, unsigned n) -> aie_dm_resource_remove_t< Vec > |
Returns a vector whose contents are the same as the input vector, but shifted down by n. | |
template<Vector Vec> | |
auto | aie::shuffle_down_fill (const Vec &v, const Vec &fill, unsigned n) -> aie_dm_resource_remove_t< Vec > |
Returns a vector whose contents are the same as the input vector, but shifted down by n. | |
template<Vector Vec> | |
auto | aie::shuffle_down_replicate (const Vec &v, unsigned n) -> aie_dm_resource_remove_t< Vec > |
Returns a vector whose contents are the same as the input vector, but shifted down by n. | |
template<Vector Vec> | |
auto | aie::shuffle_down_rotate (const Vec &v, unsigned n) -> aie_dm_resource_remove_t< Vec > |
Returns a vector whose contents are the same as the input vector, but shifted down by n (elements wrap around): | |
template<Vector Vec> | |
auto | aie::shuffle_up (const Vec &v, unsigned n) -> aie_dm_resource_remove_t< Vec > |
Returns a vector whose contents are the same as the input vector, but shifted up by n. | |
template<Vector Vec> | |
auto | aie::shuffle_up_fill (const Vec &v, const Vec &fill, unsigned n) -> aie_dm_resource_remove_t< Vec > |
Returns a vector whose contents are the same as the input vector, but shifted up by n. | |
template<Vector Vec> | |
auto | aie::shuffle_up_replicate (const Vec &v, unsigned n) -> aie_dm_resource_remove_t< Vec > |
Returns a vector whose contents are the same as the input vector, but shifted up by n. | |
template<Vector Vec> | |
auto | aie::shuffle_up_rotate (const Vec &v, unsigned n) -> aie_dm_resource_remove_t< Vec > |
Returns a vector whose contents are the same as the input vector, but shifted up by n (elements wrap around): | |
template<Vector Vec> | |
auto | aie::transpose (const Vec &v, unsigned Row, unsigned Col) -> aie_dm_resource_remove_t< Vec > |
The input vector is interpreted as a row-major matrix of the dimensions specified by Row and Col, the function returns a vector ordered as the transpose of the specified matrix. | |
class aie::filter_mode |
Enables precomputation of the filter element selection.
Allows to efficiently choose from multiple element selection alternatives at execution time, including odd/even, when performing a filter operation.
Example:
T | Element type of the input vectors to be used in the interleave. |
Elems | Number of elements of the input vectors to be used in the interleave. |
Public Member Functions | |
constexpr | filter_mode (const filter_mode &)=default |
Copy constructor for class filter_mode. | |
Static Public Member Functions | |
static constexpr filter_mode | even (unsigned chunk_size) noexcept |
Construts a filter_mode object that specifies the same pattern used in filter_even. | |
static constexpr filter_mode | odd (unsigned chunk_size) noexcept |
Construts a filter_mode object that specifies the same pattern used in filter_odd. | |
|
constexprdefault |
Copy constructor for class filter_mode.
|
inlinestaticconstexprnoexcept |
Construts a filter_mode object that specifies the same pattern used in filter_even.
chunk_size | Number of contiguous elements taken from the input vector. It must be a power of two. |
|
inlinestaticconstexprnoexcept |
Construts a filter_mode object that specifies the same pattern used in filter_odd.
chunk_size | Number of contiguous elements taken from the input vector. It must be a power of two. |
class aie::interleave_unzip_mode |
Enables precomputation of the interleave element selection.
Allows to efficiently choose from multiple element selection alternatives at execution time, when performing an interleave_unzip operation.
Example:
T | Element type of the input vectors to be used in the interleave. |
Elems | Number of elements of the input vectors to be used in the interleave. |
Public Member Functions | |
constexpr | interleave_unzip_mode (const interleave_unzip_mode &)=default |
Copy constructor for class interleave_unzip_mode. | |
constexpr | interleave_unzip_mode (unsigned chunk_size) noexcept |
Constructor for class interleave_unzip_mode. | |
|
inlineexplicitconstexprnoexcept |
Constructor for class interleave_unzip_mode.
chunk_size | Number of contiguous elements taken in an interleave_unzip operation. It must be a power of two. |
|
constexprdefault |
Copy constructor for class interleave_unzip_mode.
class aie::interleave_zip_mode |
Enables precomputation of the interleave element selection.
Allows to efficiently choose from multiple element selection alternatives at execution time, when performing an interleave_unzip operation.
Example:
T | Element type of the input vectors to be used in the interleave. |
Elems | Number of elements of the input vectors to be used in the interleave. |
Public Member Functions | |
constexpr | interleave_zip_mode (const interleave_zip_mode &)=default |
Copy constructor for class interleave_zip_mode. | |
constexpr | interleave_zip_mode (unsigned chunk_size) noexcept |
Constructor for class interleave_zip_mode. | |
|
inlineexplicitconstexprnoexcept |
Constructor for class interleave_zip_mode.
chunk_size | Number of contiguous elements taken in an interleave_zip operation. It must be a power of two. |
|
constexprdefault |
Copy constructor for class interleave_zip_mode.
auto aie::filter | ( | const Vec & | v, |
filter_mode< T, Elems > | mode | ||
) | -> vector<T, Elems / 2> |
Returns a vector of half the size.
The output vector's contents may follow different patterns depending on how filter_mode argument was constructed.
v | Input vector. It must meet aie::Vector. |
mode | Specifies what pattern will be used to pick the contents for the output vector. |
auto aie::filter_even | ( | const Vec & | v, |
unsigned | chunk_size = 1 |
||
) | -> vector<typename Vec::value_type, Vec::size() / 2> |
Returns a vector of half the size whose contents follow the following pattern.
For example
v | Input vector. Must meet aie::Vector. |
chunk_size | Number of contiguous elements taken from the input vector. Must be a power of two. |
auto aie::filter_odd | ( | const Vec & | v, |
unsigned | chunk_size = 1 |
||
) | -> vector<typename Vec::value_type, Vec::size() / 2> |
Returns a vector of half the size whose contents follow the following pattern.
For example
v | Input vector. Must meet aie::Vector. |
chunk_size | Number of contiguous elements taken from the input vector. Must be a power of two. |
auto aie::imag | ( | const Vec & | v | ) | -> vector<detail::utils::get_complex_component_type_t<typename Vec::value_type>, Vec::size()> |
Gather and return the imaginary components of a complex vector.
v | Complex input vector |
auto aie::imag | ( | Elem | e | ) | -> detail::utils::get_complex_component_type_t<operand_base_type_t<Elem>> |
Return the imaginary component of a complex value.
e | Complex input |
auto aie::interleave_unzip | ( | const Vec1 & | v, |
const Vec2 & | w, | ||
unsigned | chunk_size | ||
) | -> std::pair<aie_dm_resource_remove_t<Vec1>, aie_dm_resource_remove_t<Vec1>> |
Picks elements sequentially from the input vectors and writes them alternatively into the output vectors.
v | First input vector. Must meet aie::Vector. |
w | Second input vector. Must meet aie::Vector. |
chunk_size | Number of contiguous elements taken from each input vector. It must be a power of two. |
auto aie::interleave_unzip | ( | const Vec1 & | v1, |
const Vec2 & | v2, | ||
const interleave_unzip_mode< T, Elems > & | mode | ||
) | -> std::pair<aie_dm_resource_remove_t<Vec1>, aie_dm_resource_remove_t<Vec1>> |
Picks elements sequentially from the input vectors and writes them alternatively into the output vectors.
In cases where the interleave chunk size is picked at execution time, this overload allows the user to precompute the interleave mode in advance (it is an expensive operation).
v1 | First input vector. Must meet aie::Vector. |
v2 | Second input vector. Must meet aie::Vector. |
mode | Precomputed interleave mode, specifying the number of contiguous elements. |
auto aie::interleave_zip | ( | const Vec1 & | v, |
const Vec2 & | w, | ||
const interleave_zip_mode< T, Elems > & | mode | ||
) | -> std::pair<aie_dm_resource_remove_t<Vec1>, aie_dm_resource_remove_t<Vec1>> |
Picks elements alternatively from the input vectors and writes them sequentially into the output vectors.
In cases where the interleave chunk size is picked at execution time, this overload allows the user to precompute the interleave mode in advance (it is an expensive operation).
v | First input vector. Must meet aie::Vector. |
w | Second input vector. Must meet aie::Vector. |
mode | Precomputed interleave mode, specifying the number of contiguous elements. |
auto aie::interleave_zip | ( | const Vec1 & | v, |
const Vec2 & | w, | ||
unsigned | chunk_size | ||
) | -> std::pair<aie_dm_resource_remove_t<Vec1>, aie_dm_resource_remove_t<Vec1>> |
Picks elements alternatively from the input vectors and writes them sequentially into the output vectors.
v | First input vector. Must meet aie::Vector. |
w | Second input vector. Must meet aie::Vector. |
chunk_size | Number of contiguous elements taken from each input vector. It must be a power of two. |
auto aie::real | ( | const Vec & | v | ) | -> vector<detail::utils::get_complex_component_type_t<typename Vec::value_type>, Vec::size()> |
Gather and return the real components of a complex vector.
v | Complex input vector |
auto aie::real | ( | Elem | e | ) | -> detail::utils::get_complex_component_type_t<operand_base_type_t<Elem>> |
Return the real component of a complex value.
e | Complex input |
auto aie::reverse | ( | const Vec & | v | ) | -> aie_dm_resource_remove_t<Vec> |
Returns a vector whose contents are the same as the input vector, but in reverse order.
v | Input vector. The type must meet aie::Vector. |
vector< operand_base_type_t< E1 >, M::size()> aie::select | ( | const E1 & | a, |
const E2 & | b, | ||
const M & | m | ||
) |
Combines the values of the input vector and value into a vector of the same size by using a mask that specifies which is the source input for each element of the output vector.
auto aie::select | ( | const Vec & | v, |
E | a, | ||
const M & | m | ||
) | -> aie_dm_resource_remove_t<Vec> |
Combines the values of the input vector and value into a vector of the same size by using a mask that specifies which is the source input for each element of the output vector.
v | Input vector. The type must meet aie::Vector. |
a | Input value. The type must meet aie::Elem. |
m | Mask that specifies the source input for each output element. The type must meet aie::Mask. |
auto aie::select | ( | const Vec1 & | v1, |
const Vec2 & | v2, | ||
const M & | m | ||
) | -> aie_dm_resource_remove_t<Vec1> |
Combines the values of the two input vectors into a vector of the same size by using a mask that specifies which is the source input for each element of the output vector.
v1 | First input vector. The type must meet aie::Vector. |
v2 | Second input vector. The type must meet aie::Vector. |
m | Mask that specifies the source input for each output element. The type must meet aie::Mask. |
auto aie::select | ( | E | a, |
const Vec & | v, | ||
const M & | m | ||
) | -> aie_dm_resource_remove_t<Vec> |
Combines the values of the input value and vector into a vector of the same size by using a mask that specifies which is the source input for each element of the output vector.
a | Input value. The type must meet aie::Elem. |
v | Input vector. The type must meet aie::Vector. |
m | Mask that specifies the source input for each output element. The type must meet aie::Mask. |
auto aie::shuffle_down | ( | const Vec & | v, |
unsigned | n | ||
) | -> aie_dm_resource_remove_t<Vec> |
Returns a vector whose contents are the same as the input vector, but shifted down by n.
Elements do not wrap around and new elements are undefined.
v | Input vector. The type must meet aie::Vector. |
n | Distance for the elements to be shifted. |
auto aie::shuffle_down_fill | ( | const Vec & | v, |
const Vec & | fill, | ||
unsigned | n | ||
) | -> aie_dm_resource_remove_t<Vec> |
Returns a vector whose contents are the same as the input vector, but shifted down by n.
Elements do not wrap around and new elements are filled from a second vector.
v | Input vector. The type must meet aie::Vector. |
fill | Second input vector used to fill the elements in the upper part of the output vector. |
n | Distance for the elements to be shifted. |
auto aie::shuffle_down_replicate | ( | const Vec & | v, |
unsigned | n | ||
) | -> aie_dm_resource_remove_t<Vec> |
Returns a vector whose contents are the same as the input vector, but shifted down by n.
Elements do not wrap around and new elements are copies of the last element of the input vector.
v | Input vector. The type must meet aie::Vector. |
n | Distance for the elements to be shifted. |
auto aie::shuffle_down_rotate | ( | const Vec & | v, |
unsigned | n | ||
) | -> aie_dm_resource_remove_t<Vec> |
Returns a vector whose contents are the same as the input vector, but shifted down by n (elements wrap around):
v | Input vector. The type must meet aie::Vector. |
n | Distance for the elements to be shifted. |
auto aie::shuffle_up | ( | const Vec & | v, |
unsigned | n | ||
) | -> aie_dm_resource_remove_t<Vec> |
Returns a vector whose contents are the same as the input vector, but shifted up by n.
Elements do not wrap around and new elements are undefined.
v | Input vector. The type must meet aie::Vector. |
n | Distance for the elements to be shifted. |
auto aie::shuffle_up_fill | ( | const Vec & | v, |
const Vec & | fill, | ||
unsigned | n | ||
) | -> aie_dm_resource_remove_t<Vec> |
Returns a vector whose contents are the same as the input vector, but shifted up by n.
Elements do not wrap around and new elements are filled from a second vector.
v | Input vector. The type must meet aie::Vector. |
fill | Second input vector used to fill the elements in the lower part of the output vector. |
n | Distance for the elements to be shifted. |
auto aie::shuffle_up_replicate | ( | const Vec & | v, |
unsigned | n | ||
) | -> aie_dm_resource_remove_t<Vec> |
Returns a vector whose contents are the same as the input vector, but shifted up by n.
Elements do not wrap around and new elements are copies of the first element of the input vector.
v | Input vector. The type must meet aie::Vector. |
n | Distance for the elements to be shifted. |
auto aie::shuffle_up_rotate | ( | const Vec & | v, |
unsigned | n | ||
) | -> aie_dm_resource_remove_t<Vec> |
Returns a vector whose contents are the same as the input vector, but shifted up by n (elements wrap around):
v | Input vector. The type must meet aie::Vector. |
n | Distance for the elements to be shifted. |
auto aie::transpose | ( | const Vec & | v, |
unsigned | Row, | ||
unsigned | Col | ||
) | -> aie_dm_resource_remove_t<Vec> |
The input vector is interpreted as a row-major matrix of the dimensions specified by Row and Col, the function returns a vector ordered as the transpose of the specified matrix.
For Row equal to 1, the input vector is returned.
v | Input vector. The type must meet aie::Vector, with number of elements equal to Row * Col. |
Row | Number of rows of the input matrix shape. |
Col | Number of cols of the input matrix shape. |