API 演算の例 - 2023.2 日本語

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

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

次の例は、実数を rva、虚数を rvb (aie::vector<int32,8> 型) に含む 2 つのベクターを取得し、オフセットを使用して必要に応じて値をインターリーブする新しい複素ベクターを作成します。

aie::vector<int32,8> rva,rvb;
auto rv=aie::interleave_zip(rva,rvb,1);
aie::vector<cint32,8> cv=aie::concat(rv.first.cast_to<cint32>(),rv.second.cast_to<cint32>());

次の例は、aie::vector<cint32,8> 型の cv ベクターの実数部と虚数部を抽出します。

aie::vector<cint32,8> cv;
aie::vector<int32,16> re_im=cv.cast_to<int32>();
aie::vector<int32,8> re=aie::filter_even(re_im,1);
aie::vector<int32,8> im=aie::filter_odd(re_im,1);

aie::broadcast を使用して、ベクターのすべての要素を指定した値に設定できます。次の例は、ベクター内の 8 つの要素すべてを定数値に設定する方法を示します。

// set all elements to 100
aie::vector<int32,8> v1=aie::broadcast<int32,8>(100); 

次の例は、aie::broadcast を使用して、ベクター内の複数の値を繰り返し設定します。

alignas(aie::vector_decl_align) int16 init_data[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

// set 0 1 2 3 repeatedly into buff
aie::vector<int16,32> buff=aie::broadcast<cint32,8>(*(cint32*)init_data).cast_to<int16>();

次の例は、rva の各要素と rvb の最初の要素を乗算する方法を示します。これは、ベクターと定数値を乗算するのに効率的な方法です。

aie::vector<int32,8> rva,rvb;
aie::accum<acc80,8> acc = aie::mul(rva,rvb[0]);

次の例は、rva の各要素と rvb の対応する要素を乗算します。

aie::vector<int32,8> va,vb;
aie::accum<acc80,8> acc=aie::mul(va,vb);

次の例は、データ ストレージが行優先形式である場合に、mmul 組み込み関数を使用して int8 x int8 データ型の行列乗算を実行します。

// Z_{2x8} * X_{8x8} = A_{2x8}
aie::vector<int8,16> Z;
aie::vector<int8,64> X;
aie::mmul<2,8,8,int8,int8> m;
m.mul(Z,X);

// Z_{4x8} * X_{8x4} = A_{4x4}
aie::vector<int8,32> Z;
aie::vector<int8,32> X;
aie::mmul<4,8,4,int8,int8> m;
m.mul(Z,X);

ベクター レーンの並べ替えの詳細は、 『AI エンジン組み込み関数ユーザー ガイド』 (UG1078) を参照してください。