『AI エンジン カーネルおよびグラフ プログラミング ガイド』 (UG1079) のカーネルを含むデータフロー グラフの作成では、単純な AI エンジン グラフ アプリケーションを中心に説明しました。最上位アプリケーションでグラフを初期化、実行、終了しました。実際の AI エンジン グラフ アプリケーションでは、ホスト コードでこれらの単純なタスクのほかにもさまざまな操作が実行されます。 Cortex®-A72 で実行する最上位 PS アプリケーションは、グラフと PL カーネルを制御し、グラフへのデータ入力の管理、グラフからデータ出力の処理、グラフと共に動作する PL カーネルの制御を実行します。
さらに、AI エンジン グラフ アプリケーションを Linux オペレーティング システムまたはベアメタル システムで実行できます。これらの 2 つのシステムでのプログラミング要件は、次のトピックで説明するように、大きく異なります。AMD では、グラフおよび PL カーネルを制御するためにホスト プログラムの API 呼び出しで使用されるオペレーティング システム別のドライバーを提供しています。Linux の場合は、XRT API で提供しており、ベアメタルの場合、AI エンジン カーネルはグラフ API を使用して制御され、PL カーネルは libUIO
ドライバーの呼び出しを使用して制御されます。
複数のグラフの実行を回避
グラフが PS ベースのホスト アプリケーションにインプリメントされている場合、graph.cpp コードに条件付きプラグマ (#ifdef
) を定義し、グラフが一回のみ初期化または実行されるようにする必要があります。次のコード例は、
『AI エンジン カーネルおよびグラフ プログラミング ガイド』
(UG1079) のカーネルを含むデータフロー グラフの作成で定義した単純なアプリケーションに、保護マクロ __AIESIM__
および __X86SIM__
を追加したものです。
#include "project.h"
simpleGraph mygraph;
#if defined(__AIESIM__) || defined(__X86SIM__)
int main(void) {
mygraph.init();
mygraph.run(<number_of_iterations>);
mygraph.end();
return 0;
}
#endif
この条件付き指示子は、AI エンジン シミュレータで使用するためにのみアプリケーションをコンパイルします。グラフおよび PS ホスト アプリケーションの両方からグラフが複数回初期化または実行されるのを回避します。この指示子は、graph.cpp を AI エンジン シミュレータおよび x86 シミュレータで実行できるようにします。ただし、ハードウェアおよびハードウェア エミュレーションで実行する場合、グラフは初期化されて、graph.cpp からではなく PS アプリケーションから実行されます。