AIE architectures offer multiplication instructions that can perform additional operations on on the input arguments. Instead of adding one variant for each possible combination, AIE API offers types that can wrap an existing vector, accumulator of element reference and be passed into the multiplication function. Then the API will merge the operations into a single instruction or apply the operation on the vector before the multiplication, depending on the hardware support,
The following example performs an element-wise multiplication of the absolute of vector a and the conjugate of vector b.
{
return ret;
}
constexpr auto mul(const Vec1 &v1, const Vec2 &v2) -> accum< AccumTag, Vec1::size()>
Definition: aie.hpp:3445
constexpr unary_op< T, Operation::Abs > op_abs(const T &e)
Definition: aie.hpp:575
constexpr unary_op< T, Operation::Conj > op_conj(const T &e)
Definition: aie.hpp:590
Definition: aie_declaration.hpp:71
Definition: aie_declaration.hpp:68
|
template<typename T > |
constexpr unary_op< T, Operation::Abs > | aie::op_abs (const T &e) |
| More...
|
|
template<Accum Acc> |
constexpr unary_op< Acc, Operation::Acc_Add > | aie::op_add (const Acc &acc) |
| More...
|
|
template<typename T > |
constexpr unary_op< T, Operation::Conj > | aie::op_conj (const T &e) |
| More...
|
|
template<VectorOrOp Vec1, VectorOrOp Vec2> |
constexpr binary_op< Vec1, Vec2, Operation::Max > | aie::op_max (const Vec1 &a, const Vec2 &b) |
| More...
|
|
template<VectorOrOp Vec1, VectorOrOp Vec2> |
constexpr binary_op< Vec1, Vec2, Operation::Min > | aie::op_min (const Vec1 &a, const Vec2 &b) |
| More...
|
|
template<typename T > |
constexpr unary_op< T, Operation::None > | aie::op_none (const T &e) |
| More...
|
|
template<typename T > |
constexpr binary_op< T, bool, Operation::Sign > | aie::op_sign (const T &e, bool is_signed) |
| More...
|
|
template<Accum Acc> |
constexpr unary_op< Acc, Operation::Acc_Sub > | aie::op_sub (const Acc &acc) |
| More...
|
|
template<Accum Acc> |
constexpr binary_op< Acc, bool, Operation::Zero > | aie::op_zero (const Acc &acc, const bool to_zero) |
| More...
|
|
◆ op_abs()
Returns an absolute operation modifier for the given vector or element. On some architecture versions, this operation can be collapsed with a subsequent multiplication.
- Parameters
-
◆ op_add()
Returns an addition operation modifier for the given accumulator.
- Parameters
-
acc | Accumulator to which the operation is performed. |
◆ op_conj()
Returns a conjugate operation modifier for the given complex vector or element. On some architecture versions, this operation can be collapsed with a subsequent multiplication.
- Parameters
-
◆ op_max()
Returns a maximum operation modifier for the given pair of vectors or elements. On some architecture versions, this operation can be collapsed with a subsequent multiplication.
- Parameters
-
a | First vector or element passed to the operation. The type must meet Vector or Elem. |
b | Second vector or element passed to the operation. The type must be the same as for a. |
◆ op_min()
Returns a minimum operation modifier for the given pair of vectors or elements. On some architecture versions, this operation can be collapsed with a subsequent multiplication.
- Parameters
-
a | First vector or element passed to the operation. The type must meet Vector or Elem. |
b | Second vector or element passed to the operation. The type must be the same as for a. |
◆ op_none()
Returns an empty operation modifier for the given vector or element.
- Parameters
-
e | Vector or element to which the operation is performed. The type must meet Vector or Elem. |
◆ op_sign()
Returns dynamically signed/unsigned operation modifier for the vector or element, based on the boolean parameter. On some architecture versions, this operation can be collapsed with a subsequent operation.
- Parameters
-
e | Vector, element or accumulator passed to the operation. The type must meet Vector, Elem, Accum or be another operation, using an integer type. |
is_signed | Controls if the first paramer is interpreted as signed, or not. |
◆ op_sub()
Returns a subtraction operation modifier for the given accumulator.
- Parameters
-
acc | Accumulator to which the operation is performed. |
◆ op_zero()
Zeroes out the given accumulator or not depending on the zero parameter. On some architectures this operation can be collapsed with a subsequent operation.
- Parameters
-
acc | Accumulator to which the operation is performed. |
zero | Controls if the passed accumulator is zeroed or not. |