次のグラフ制御 API は、グラフ API を使用して、グラフの初期化、実行、待機、および終了を特定の回数だけ反復実行する方法の例を示しています。グラフ オブジェクト mygraph
は、simpleGraph
という定義済みのグラフ クラスを使用して宣言されます。その後、main
アプリケーションでこのグラフ オブジェクトが初期化および実行されます。init()
メソッドは、事前に指定された AI エンジン タイルの AI エンジン アレイにグラフを読み込みます。これには、各 AI エンジンの ELF バイナリの読み込み、配線用のストリーム スイッチの設定、I/O の DMA の設定が含まれます。プロセッサはディスエーブル ステートに保持されます。run()
メソッドは、プロセッサをイネーブルにしてグラフの実行を開始します。run
API の実行時に正の整数引数を指定すると、グラフを指定の回数だけ反復実行できます。これは、グラフ実行のデバッグに便利です。
#include "project.h"
simpleGraph mygraph;
int main(void) {
mygraph.init();
mygraph.run(3); // run 3 iterations
mygraph.wait(); // wait for 3 iterations to finish
mygraph.run(10); // run 10 iterations
mygraph.end(); // wait for 10 iterations to finish
return 0;
}
wait()
API は、1 回目の実行の終了を待ってから 2 回目の実行を開始するために使用します。wait
には end
と同じブロッキング効果がありますが、グラフを再初期化せずに再実行できる点が異なります。run
API はグラフのアクティブ プロセッサのループ境界を変更するため、wait
を挿入せずに run
を連続実行すると、予期されない影響が見られることがあります。
グラフ反復
グラフは、複数のカーネル、入力、出力ポートを持つことができます。グラフの接続は、データフロー グラフ内のネットと同じで、カーネル間、カーネルと入力ポート間、またはカーネルと出力ポート間のいずれかであり、接続として設定できます。グラフは、グラフ内のカーネルが想定するデータのバッファーまたはストリームに相当するデータ サンプルを消費し、グラフ内のすべてのカーネルの出力で想定されるデータのバッファーまたはストリームに相当するデータ サンプルを生成するときに、1 回の反復を実行します。