Operator Overloading (演算子のオーバーロード) - 2023.2 日本語

AI エンジン カーネルおよびグラフ プログラミング ガイド (UG1079)

Document ID
UG1079
Release Date
2023-12-04
Version
2023.2 日本語

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