複数のサブグラフを含む大型のグラフを構築する際、カーネルの 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)
関数を使用してください。