マクロ __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>
プリプロセッサの定義を追加する必要があります。