AI エンジン API では、多数の演算に対して演算子のオーバーロードがサポートされています。この機能を使用するには、ヘッダー ファイル aie_api/operators.hpp
を含め、aie::operators
名前空間を使用します。
含まれている演算子は次のとおりです。
- 演算子
+
- 加算演算子。
aie::add
と等価です。 - 演算子
+=
- 加算代入演算子。
- 演算子
-
- 否定演算子。
aie::neg
と等価です。 - 演算子
-
- 減算演算子。
aie::sub
と等価です。 - 演算子
-=
- 減算代入演算子。
- 演算子
!=
- 不等号比較演算子。
aie::neq
と等価です。 - 演算子
<
- 小なり比較演算子。
aie::lt
と等価です。 - 演算子
<=
- 以下比較演算子。
aie::le
と等価です。 - 演算子
==
- 等号比較演算子。
aie::eq
と等価です。 - 演算子
>
- 大なり比較演算子。
aie::gt
と等価です。 - 演算子
>=
- 以上比較演算子。
aie::ge
と等価です。 - 演算子
<<
- ビット単位左シフト演算子。
aie::upshift
と等価です。 - 演算子
>>
- ビット単位右シフト演算子。
aie::downshift
と等価です。 - 演算子
&
- ビット単位 AND 演算子。
aie::bit_and
と等価です。 - 演算子
^
- ビット単位 XOR 演算子。
aie::bit_xor
と等価です。 - 演算子
|
- ビット単位 OR 演算子。
aie::bit_or
と等価です。 - 演算子
~
- ビット単位 NEG 演算子。
aie::bit_not
と等価です。
次に、演算子を使用したコード例を示します。
#include <aie_api/aie.hpp>
#include <aie_api/aie_adf.hpp>
#include <aie_api/utils.hpp>
#include <aie_api/operators.hpp>
using namespace aie::operators;
aie::vector<int32,8> va,vb;
aie::vector<int32,8> vadd=va+vb;
aie::vector<int32,8> vsub=va-vb;
// negation of each element
aie::vector<int32,8> vneg=-vb;
vadd+=vneg;
aie::print(va,true,"va=");
aie::print(vadd,true,"vadd=");
// compare each element of the vector correspondingly
auto msk_neq=(vadd!=va);
// mask bit equals 1 if vector element not equal
aie::print(msk_neq,true,"msk_neq=");
// bit not
auto vnot_va=~va;
// bit xor
auto vones=va ^ vnot_va;
aie::print(vones,true,"vones=");
// choose vadd if mask bit equals 0
auto vout=aie::select(vadd,vones,msk_neq);
aie::print(vout,true,"vout=");
次に、上記のコードの出力例を示します。
va=9 10 11 12 13 14 15 16
vadd=9 10 11 12 13 14 15 16
msk_neq=0 0 0 0 0 0 0 0
vones=-1 -1 -1 -1 -1 -1 -1 -1
vout=9 10 11 12 13 14 15 16