カーネルのロケーション制約 - 2023.2 日本語

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

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

複数のサブグラフを含む大型のグラフを構築する際、カーネルの AI エンジンへのマップを、ほかのカーネルに相対的に指定するか、または絶対配置を指定して制御すると有益な場合があります。aiecompiler には、カーネルのロケーション制約を指定するメカニズムがあります。これを C++ テンプレート クラス指定と共に使用すると、信頼性が高く、スケーラブルで、予測可能なグラフの AI エンジン アレイへのマップを作成できます。これにより、マップでの選択肢が削減され、マップ プロセスにかかる時間が短縮されます。次のグラフ仕様があるとします。

#include <adf.h>
#include "kernels.h
#define NUMCORES (COLS*ROWS)
using namespace adf;

template <int COLS, int ROWS, int STARTCOL, int STARTROW>
class indep_nodes_graph1 : public graph {
 public:
   kernel kr[NUMCORES];
   port<input> datain[NUMCORES] ;
   port<output> dataout[NUMCORES] ;
  
 indep_nodes_graph1() {
  for (int i = 0; i < COLS; i++) {
    for (int j = 0; j < ROWS; j++) {
      int k = i*ROWS + j;
      kr[k] = kernel::create(mykernel);
      source(kr[k])  = "kernels/kernel.cc";
      runtime<ratio>(kr[k]) = 0.9;
      location<kernel>(kr[k]) = tile(STARTCOL+i, STARTROW+j);
    }
  }
  for (int i = 0; i < NUMCORES; i++) {
    connect(datain[i], kr[i].in[0]);
    connect(kr[i].out[0], dataout[i]);
  }
 };
};

テンプレート パラメーターは、(STARTCOL, STARTROW) を基点とするある次元の大型論理デバイス内に配置されるカーネルの COLS x ROWS 論理アレイ (COLS x ROWS = NUMCORES) を指定します。そのグラフ内の各カーネルは、特定の AI エンジンに配置されます。これは、各カーネルを特定のプロセッサ タイルに配置する絶対ロケーション制約を使用して達成します。たとえば次の宣言は、オフセット (3,2) を基点とする 1 x 2 カーネル アレイを作成します。4 x 4 論理デバイス トポロジに組み込む場合、カーネル アレイは右上角に制約されます。

indep_nodes_graph1<1,2,3,2> mygraph;
重要: 以前のリリースでは、カーネル制約の指定に location<absolute>(k) 関数、プロセッサのタイル ロケーションの指定に proc(x,y) 関数が使用されていました。これらの関数は廃止予定です。その代わりに、カーネル制約の指定には location<kernel>(k) 関数、タイル ロケーションの指定には tile(x,y) 関数を使用してください。