キャストおよびデータ型変換 - 2023.2 日本語

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

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

キャスト組み込み関数 (as_[Type]()) を使用すると、同じサイズのベクター型またはスカラー型間のキャストを実行できます。キャストは、アキュムレータ ベクター型でも実行できます。通常は、できるだけ最小のデータ型を使用することで、レジスタ溢れを減らし、パフォーマンスを向上させることができます。たとえば、48 ビット アキュムレータ (acc48) がデザイン要件を満たす場合、より大きな 80 ビット アキュムレータ (acc80) よりもそちらを使用することをお勧めします。

注記: acc80 ベクター データ型は、隣接する 2 つの 48 ビット レーンを使用します。

標準 C キャストも使用でき、次の例に示すように、ほとんどすべての場合で同じように動作します。

aie::vector<int16,8> iv;
aie::vector<cint16,4> cv=as_v4cint16(iv); 
aie::vector<cint16,4> cv2=*(aie::vector<cint16,4>*)&iv; 
aie::accum<acc80,8> cas_iv;
aie::accum<acc48,8> cas_cv=as_v8cacc48(cas_iv);

浮動小数点から固定小数点 (float2fix()) および固定小数点から浮動小数点 (fix2float()) への変換用のハードウェア サポートが組み込まれています。たとえば、固定小数点平方根、逆平方根、および反転は、浮動小数点精度でインプリメントされ、関数の前後で fix2float() および float2fix() 変換が使用されます。

注記: AI エンジンの浮動小数点は、IEEE 規格に完全に準拠していません。例外については、 『Versal アダプティブ SoC AI エンジン アーキテクチャ マニュアル』 (AM009) を参照してください。

この例では、平方根と反転関数はベクター化できないので、スカラー エンジンが使用されています。これは、関数プロトタイプの入力のデータ型からわかります。

float _sqrtf(float a) //scalar float operation
int sqrt(int a,...) //scalar integer operation

入力のデータ型は、ベクター型 (vint) ではなく、スカラー型 (int) です。

変換関数 (fix2floatfloat2fix) は、呼び出された関数によって、ベクター エンジンまたはまたはスカラー エンジンのいずれかで処理できます。データ戻り値の型とデータ引数の型の違いに注意してください。

float fix2float(int n,...) //Uses the scalar engine
v8float fix2float(aie::vector<int32,8> ivec,...) //Uses the vector engine
注記: float2fix の場合、float2fix_safe (デフォルト) と float2fix_fast という 2 つのインプリメンテーション タイプがあり、float2fix_safe インプリメンテーションには、より厳密なデータ型チェックが含まれます。FLOAT2FIX_FAST マクロを定義すると、float2fixfloat2fix_fast インプリメンテーションが選択されるようにできます。