デバイス アーキテクチャのマクロ - 2023.2 日本語

AI エンジン ツールおよびフロー ユーザー ガイド (UG1076)

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

マクロ __AIE_ARCH__

AI エンジン コンパイラは、異なるアーキテクチャを区別するために事前に定義された __AIE_ARCH__ マクロをサポートしています。

  • __AIE_ARCH__=10: AI エンジン デバイスの場合、10 が事前に定義された値となります。
  • __AIE_ARCH__=20: AI エンジン ML デバイスの場合、20 が事前に定義された値となります。

このマクロは、AI エンジン カーネルまたは AI エンジン グラフ コードの内部で使用できます。異なるアーキテクチャを設計する場合、マクロを使用して特定のアーキテクチャを保護できます。

たとえば、カーネル コードは、このマクロを使用してアーキテクチャ固有の API を選択します。

void fir24(input_buffer<cint16,...> &iwin, output_buffer<cint16> &owin) {
  ...
  #if __AIE_ARCH__==10
    acc=aie::sliding_mul_sym<4,4>(...);
  #elif __AIE_ARCH__==20
    acc=aie::sliding_mul<4,8>(...);
  #endif
  ...
}

次の例では、グラフ コードでマクロを使用し、特定のアーキテクチャに応じてバッファー サイズを選択する方法を示しています。

//Using __AIE_ARCH__ macro to define buffer size for AI Engine device
#if __AIE_ARCH__==10
  static const int NUM=4096;
//Using __AIE_ARCH__ macro to define buffer size for AI Engine-ML device
#elif __AIE_ARCH__==20
  static const int NUM=8192;
//Covering rest of the cases - recommended for PS compilation
#else
  static const NUM=4096; 
#endif

using namespace adf;
class topgraph: public adf::graph
{
public:
	kernel k;
	
	topgraph(){
            ......
            k=kernel::create(mykernel);
            dimensions(k.in[0])={NUM};
            dimensions(k.out[0])={NUM};
	}
};
注記: グラフ コードが PS コードのコンパイルに含まれる場合、デバイスを区別するために、Arm クロス コンパイラに -D__AIE_ARCH__=<NUM> プリプロセッサの定義を追加する必要があります。