|
AI Engine API User Guide (AIE-API) 2025.1
|
| bfloat16 | float | |||||
|---|---|---|---|---|---|---|
| Output bits | Type | Arch. | Implementation | Notes | Implementation | Notes |
| 4b | Scalar | AIE | ||||
| AIE-ML XDNA1 | Runs on vector unit | Runs on vector unit | ||||
| XDNA2 | Runs on vector unit | Runs on vector unit | ||||
| AIE-MLv2 | Runs on vector unit | Runs on vector unit | ||||
| Vector | AIE | |||||
| AIE-ML XDNA1 | Emulated | Uses aie::rounding_mode::conv_even | Emulated | Uses aie::rounding_mode::conv_even | ||
| XDNA2 | Emulated | Uses aie::rounding_mode::conv_even | Emulated | Uses aie::rounding_mode::conv_even | ||
| AIE-MLv2 | Emulated | Uses aie::rounding_mode::conv_even | Emulated | Uses aie::rounding_mode::conv_even | ||
| 8b | Scalar | AIE | Native to 32b + cast | |||
| AIE-ML XDNA1 | Runs on vector unit | Runs on vector unit | ||||
| XDNA2 | Runs on vector unit | Runs on vector unit | ||||
| AIE-MLv2 | Runs on vector unit | Runs on vector unit | ||||
| Vector | AIE | Element-wise scalar | ||||
| AIE-ML XDNA1 | Emulated | Uses aie::rounding_mode::conv_even | Emulated | Uses aie::rounding_mode::conv_even | ||
| XDNA2 | Emulated | Uses aie::rounding_mode::conv_even | Emulated | Uses aie::rounding_mode::conv_even | ||
| AIE-MLv2 | Emulated | Uses aie::rounding_mode::conv_even | Emulated | Uses aie::rounding_mode::conv_even | ||
| 16b | Scalar | AIE | Native to 32b + cast | |||
| AIE-ML XDNA1 | Runs on vector unit | Runs on vector unit | ||||
| XDNA2 | Runs on vector unit | Native | Uses aie::rounding_mode::conv_even | |||
| AIE-MLv2 | Runs on vector unit | Native | Uses aie::rounding_mode::conv_even | |||
| Vector | AIE | Vectorized emulated impl | ||||
| AIE-ML XDNA1 | Native to 32b + extract lower 16b1 | Uses aie::rounding_mode::conv_even | Emulated | Uses aie::rounding_mode::conv_even | ||
| XDNA2 | Native to 32b + extract lower 16b1 | Uses aie::rounding_mode::conv_even | Emulated | Uses aie::rounding_mode::conv_even | ||
| AIE-MLv2 | Native to 32b + extract lower 16b1 | Uses aie::rounding_mode::conv_even | Emulated | Uses aie::rounding_mode::conv_even | ||
| 32b | Scalar | AIE | Native | |||
| AIE-ML XDNA1 | Runs on vector unit | Runs on vector unit | ||||
| XDNA2 | Runs on vector unit | Native | Uses aie::rounding_mode::conv_even | |||
| AIE-MLv2 | Runs on vector unit | Native | Uses aie::rounding_mode::conv_even | |||
| Vector | AIE | Vectorized emulated impl | ||||
| AIE-ML XDNA1 | Native | Uses aie::rounding_mode::conv_even | Emulated | Uses aie::rounding_mode::conv_even | ||
| XDNA2 | Native | Uses aie::rounding_mode::conv_even | Emulated | Uses aie::rounding_mode::conv_even | ||
| AIE-MLv2 | Native | Uses aie::rounding_mode::conv_even | Emulated | Uses aie::rounding_mode::conv_even | ||
| Output type | Type | Arch. | int4 | int8 | int16 | int32 |
|---|---|---|---|---|---|---|
| bfloat16 | Scalar | AIE | ||||
| AIE-ML XDNA1 | Runs on vector unit | Runs on vector unit | Runs on vector unit | Runs on vector unit | ||
| XDNA2 | Runs on vector unit | Runs on vector unit | Runs on vector unit | Runs on vector unit | ||
| AIE-MLv2 | Runs on vector unit | Runs on vector unit | Runs on vector unit | Runs on vector unit | ||
| Vector | AIE | |||||
| AIE-ML XDNA1 | Emulated | Emulated | Emulated | Emulated | ||
| XDNA2 | Emulated | Emulated | Emulated | Emulated | ||
| AIE-MLv2 | Emulated | Emulated | Emulated | Emulated | ||
| float | Scalar | AIE | Cast to int32 + native | Cast to int32 + native | Native | |
| AIE-ML XDNA1 | Runs on vector unit | Runs on vector unit | Runs on vector unit | Runs on vector unit | ||
| XDNA2 | Cast to int32 + native | Cast to int32 + native | Cast to int32 + native | Native | ||
| AIE-MLv2 | Cast to int32 + native | Cast to int32 + native | Cast to int32 + native | Native | ||
| Vector | AIE | Element-wise scalar | Emulated | Element-wise scalar | ||
| AIE-ML XDNA1 | Emulated | Emulated | Emulated | Emulated | ||
| XDNA2 | Emulated | Emulated | Emulated | Emulated | ||
| AIE-MLv2 | Emulated | Emulated | Emulated | Emulated |
Functions | |
| template<typename TR = cint32> requires (arch::is(arch::AIE, arch::AIE_ML) && Utils::is_one_of_v<TR, cint16, cint32>) | |
| auto | aie::to_fixed (cfloat a, int shift=0) |
| Convert a floating point value into a fixed-point value. | |
| template<typename TR = int32, unsigned Elems> requires (arch::is(arch::Gen2)) | |
| auto | aie::to_fixed (const vector< bfloat16, Elems > &v, int shift=0) -> vector< TR, Elems > |
| Convert the elements in a bfloat16 vector into fixed-point values. | |
| template<typename TR = cint32, unsigned Elems> requires ((arch::is(arch::AIE) || (arch::is(arch::AIE_ML) && __AIE_API_COMPLEX_FP32_EMULATION__ == 1)) && Utils::is_one_of_v<TR, cint16, cint32>) | |
| auto | aie::to_fixed (const vector< cfloat, Elems > &v, int shift=0) -> vector< TR, Elems > |
| Convert the elements in a floating point vector into fixed-point values. | |
| template<typename TR = int32, unsigned Elems> requires ((arch::is(arch::Gen2) && Utils::is_one_of_v<TR, int4, uint4, int8, uint8, int16, uint16, int32, uint32>) || (arch::is(arch::Gen1) && Utils::is_one_of_v<TR, int16, int32>)) | |
| auto | aie::to_fixed (const vector< float, Elems > &v, int shift=0) -> vector< TR, Elems > |
| Convert the elements in a floating point vector into fixed-point values. | |
| template<typename TR = int32> requires (Utils::is_one_of_v<TR, int8, int16, int32>) | |
| auto | aie::to_fixed (float a, int shift=0) |
| Convert a floating point value into a fixed-point value. | |
| template<typename TR = int32, unsigned Elems> requires (arch::is(arch::Gen2) && Utils::is_one_of_v<TR, int16, int32>) | |
| auto | aie::to_fixed_floor (const vector< bfloat16, Elems > &v, int shift=0) -> vector< TR, Elems > |
| Convert the elements in a bfloat16 vector into floored fixed-point values. | |
| template<typename TR = float, Accum Acc> requires (std::is_same_v<TR, float> && arch::is(arch::Gen2)) | |
| auto | aie::to_float (const Acc &acc, int shift=0) -> vector< TR, Acc::size()> |
| Convert the elements in a real fixed-point accumulator into floating point values. | |
| template<typename TR = float, VectorOrOp Vec> requires ((arch::is(arch::Gen2) && Utils::is_one_of_v<typename Vec::value_type, int4, uint4, int8, uint8, int16, uint16, int32, uint32>) || (arch::is(arch::Gen1) && Utils::is_one_of_v<typename Vec::value_type, int16, int32>)) | |
| auto | aie::to_float (const Vec &v, int shift=0) -> vector< TR, Vec::size()> |
| Convert the elements in a real fixed-point vector into floating point values. | |
| template<typename TR = cfloat, typename T, unsigned Elems> requires (Utils::is_one_of_v<T, cint16, cint32>) | |
| auto | aie::to_float (const vector< T, Elems > &v, int shift=0) -> vector< TR, Elems > |
| Convert the elements in a complex fixed-point vector into floating point values. | |
| template<typename TR = float> | |
| auto | aie::to_float (int a, int shift=0) |
| Convert a fixed-point value into a floating point value. | |
| template<typename TR = cfloat, typename T> requires (Utils::is_one_of_v<T, cint16, cint32>) | |
| auto | aie::to_float (T a, int shift=0) |
| Convert a complex fixed-point value into a floating point value. | |
| auto aie::to_fixed | ( | cfloat | a, |
| int | shift = 0 ) |
Convert a floating point value into a fixed-point value.
| a | Input value. |
| shift | Position of the point in the output value. |
| TR | Type of the returned fixed-point value. |
Convert the elements in a bfloat16 vector into fixed-point values.
| v | Input vector. |
| shift | Position of the point in the output values. |
| TR | Type of the returned fixed-point values. |
| auto aie::to_fixed | ( | const vector< cfloat, Elems > & | v, |
| int | shift = 0 ) -> vector<TR, Elems> |
Convert the elements in a floating point vector into fixed-point values.
| v | Input vector. |
| shift | Position of the point in the output values. |
| TR | Type of the returned fixed-point values. |
| auto aie::to_fixed | ( | const vector< float, Elems > & | v, |
| int | shift = 0 ) -> vector<TR, Elems> |
Convert the elements in a floating point vector into fixed-point values.
| v | Input vector. |
| shift | Position of the point in the output values. |
| TR | Type of the returned fixed-point values. |
| auto aie::to_fixed | ( | float | a, |
| int | shift = 0 ) |
Convert a floating point value into a fixed-point value.
| a | Input value. |
| shift | Position of the point in the output value. |
| TR | Type of the returned fixed-point value. |
| auto aie::to_fixed_floor | ( | const vector< bfloat16, Elems > & | v, |
| int | shift = 0 ) -> vector<TR, Elems> |
Convert the elements in a bfloat16 vector into floored fixed-point values.
| v | Input vector. |
| shift | Position of the point in the output values. |
| TR | Type of the returned fixed-point values. |
| auto aie::to_float | ( | const Acc & | acc, |
| int | shift = 0 ) -> vector<TR, Acc::size()> |
Convert the elements in a real fixed-point accumulator into floating point values.
| acc | Input accumulator. |
| shift | Position of the point in the input values. |
| auto aie::to_float | ( | const Vec & | v, |
| int | shift = 0 ) -> vector<TR, Vec::size()> |
Convert the elements in a real fixed-point vector into floating point values.
| v | Input vector. |
| shift | Position of the point in the input values. |
| auto aie::to_float | ( | const vector< T, Elems > & | v, |
| int | shift = 0 ) -> vector<TR, Elems> |
Convert the elements in a complex fixed-point vector into floating point values.
| v | Input vector. |
| shift | Position of the point in the input values. |
| auto aie::to_float | ( | int | a, |
| int | shift = 0 ) |
Convert a fixed-point value into a floating point value.
| a | Input value. |
| shift | Position of the point in the input value. |
| auto aie::to_float | ( | T | a, |
| int | shift = 0 ) |
Convert a complex fixed-point value into a floating point value.
| a | Input value. |
| shift | Position of the point in the input value. |