フリーランニング AI エンジン カーネル - 2023.2 日本語

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

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

AI エンジン カーネルは、graph::run(-1) を使用することで連続的に実行させることができます。これを使用すると、カーネルが最後の反復が完了した後に自動的に再起動します。

注記: graph::run() を引数なしで実行すると、AI エンジン カーネルをあらかじめ指定された反復回数 (引数なしでグラフを実行した場合、デフォルトで無限大となる) だけ実行します。グラフを有限の反復回数、たとえば mygraph.run(3); mygraph.run(); で実行する場合、2 回目の run 呼び出しも 3 回の反復で実行されます。

ただし、開始する前に入力バッファーと出力バッファーの準備が完了している必要があります。このため、カーネル実行の反復間には、わずかにオーバーヘッドがあります。このセクションでは、オーバーヘッドが 0 で永久に動作するタイプのカーネルを構築する方法について説明します。これは、フリーランニング AI エンジン カーネルと呼ばれます。

フリーランニング カーネルには、ストリーミング インターフェイスしか含まれません。無限に反復するループは、カーネル内に含めることができます。次に例を示します。

void free_running_aie(input_stream<int32> *in, output_stream<int32> *out) {
	while(true){//for(;;) is acceptable for C++
		int32 tmp=readincr(in);
		chess_separator_scheduler();//make sure stream is flushed
		writeincr(out,tmp+1);
		chess_separator_scheduler();//make sure stream is flushed
	}
}

フリーランニング カーネルには、独自のグラフが定義されている必要があります。このグラフには、ほかのフリーランニングではないカーネルを含めないようにする必要があります。これは、グラフが停止することがないので、フリーランニング以外のカーネルは起動後に制御を失うからです。フリーランニング カーネルを含むグラフは、ほかのグラフに接続できる最上位グラフである必要があります。または、PLIO または GMIO に接続することもできます。フリーランニング グラフとほかのグラフの接続例を次に示します。

passingGraph mygraph;
freeGraph mygraph_free;
connect<> net0(mygraph.out1,mygraph_free.in);
connect<> net1(mygraph_free.out,mygraph.in2);
図 1. フリーランニング グラフの接続

フリーランニング グラフは、mygraph_free.run(-1) を使用して開始することも、ロード後に自動的に開始することもできます。