AI エンジン グラフのインポート - 2021.2 日本語

Vitis Model Composer ユーザー ガイド (UG1483)

Document ID
UG1483
Release Date
2021-10-22
Version
2021.2 日本語

AI エンジン グラフ で説明したように、グラフは異なる計算カーネル関数の接続です。カーネル関数がブロックとして Model Composer にインポートされるカーネルのインポートとは異なり、この場合はグラフ コードがブロックとしてインポートされます。グラフをブロックとして Model Composer にインポートするには、AI エンジン ライブラリから AI エンジン グラフ ブロックを選択する必要があります。

図 1. AIE Graph ブロック

Model Composer では、AI エンジン Graph ブロックを AI エンジン カーネル ブロックと接続し、デザイン全体を Simulink 環境でシミュレーションできます。

重要: このプロセスでは、カーネル コードが開発済みで、関連付けられているカーネルが適切に構成されていると想定されます。

AIE Graph ブロックでは、AI エンジン グラフを Model Composer にインポートするのに 2 つの方法がサポートされます。

  • ヘッダー ファイル (*.h) を使用
  • ソース ファイル (*.cpp) を使用

ヘッダー ファイルの使用

ヘッダー ファイル (.h) を使用してグラフをインポートするには、 AIE Graph ブロックをダブルクリックし、[General] タブで Header file (*.h) をオンにします。次の図に示すように、ヘッダー ファイル、クラス、検索パス、およびプリプロセッサ オプションを指定します。

図 2. AI エンジン グラフの [Block Parameters] ダイアログ ボックス

次の表に、各パラメーターの名前と説明を示します。

表 1. AI エンジン グラフの [Block Parameters] ダイアログ ボックス
パラメーター名 パラメーターのデータ型 必要性 説明
[Graph application file (*.h)] 文字列 必須 アプリケーション グラフ クラスが定義され、適応型データフロー (ADF) ヘッダー (adf.h)、カーネル関数のプロトタイプが含まれているファイル (.h) を指定します。
[Graph class] 文字列 必須 グラフ クラスの名前を指定します。
[Graph search paths] 文字列のベクター 必須 シミュレーションに含めるヘッダー ファイル、カーネル、およびインクルード ファイルの検索パスを指定します。adf.h が定義されている検索パス $XILINX_VITIS/adf/include はデフォルトで含まれているので、指定する必要はありません。
[Preprocessor options]   オプション ダウンストリームのコンパイルを特定のプリプロセッサ オプションを使用して実行する場合にプリプロセッサ引数を指定します。使用可能な形式は -Dname および -Dname=definition で、複数指定できます。引数は -D で開始する必要があり、<definition> が指定されていない場合は 1 と想定されます。

graph.h

#ifndef __XMC_PROJ_H__
#define __XMC_PROJ_H__
 
#include <adf.h>
#include "simple.h"
 
class Proj_base : public adf::graph {
public:
   adf::kernel AIE_Kernel;
 
public:
   adf::input_port In1, In2;
   adf::output_port Out1, Out2;
 
   Proj_base() {
      // create kernel AIE_Kernel
      AIE_Kernel = adf::kernel::create(simple_comp_1);
      adf::source(AIE_Kernel) = "simple.cc";
 
      // create kernel constraints AIE_Kernel
      adf::runtime<ratio>( AIE_Kernel ) = 0.9;
 
      // create nets to specify connections
      adf::connect< adf::stream > net0 (In1, AIE_Kernel.in[0]);
      adf::connect< adf::stream > net1 (In2, AIE_Kernel.in[1]);
      adf::connect< adf::stream > net2 (AIE_Kernel.out[0], Out1);
      adf::connect< adf::stream > net3 (AIE_Kernel.out[1], Out2);
   }
};
 
class Proj : public adf::graph {
public:
   Proj_base mygraph;
 
public:
   adf::input_plio In1, In2;
   adf::output_plio Out1, Out2;
 
   Proj() {
      In1 = adf::input_plio::create("In1",
            adf::plio_32_bits,
            "./data/input/In1.txt");
 
      In2 = adf::input_plio::create("In2",
            adf::plio_32_bits,
            "./data/input/In2.txt");
 
      Out1 = adf::output_plio::create("Out1",
            adf::plio_32_bits,
            "Out1.txt");
 
      Out2 = adf::output_plio::create("Out2",
            adf::plio_32_bits,
            "Out2.txt");
 
      adf::connect< > (In1.out[0], mygraph.In1);
      adf::connect< > (In2.out[0], mygraph.In2);
      adf::connect< > (mygraph.Out1, Out1.in[0]);
      adf::connect< > (mygraph.Out2, Out2.in[0]);
   }
};
 
#endif // __XMC_PROJ_H__
注記: PLIO 属性が指定されたグラフ クラスをインポートすることはできません。インポートしようとすると、Model Composer からエラー メッセージが表示されます。この場合は、Proj_base クラスを使用してグラフをインポートします。

GUI パラメーターをアップデートしたら、Import をクリックします。[Block Parameters] ダイアログ ボックスが次に示すようにアップデートされます。[Graph Class] タブには、チェック ボックスを含む [RTP] 列が表示されます。ポートがランタイム パラメーターである場合にのみ、このチェック ボックスをオンにできます。そうでない場合は、Build を直接クリックできます。

図 3. [Block Parameters] ダイアログ ボックス

[Block Parameters] ダイアログ ボックスは次の図に示すようになります。ポートの方向とデータ型が示されます。

図 4. [Block Parameters] ダイアログ ボックス

[Graph Port Name]、[Data Type] などのパラメーターは、グラフ コードから自動的にアップデートされます。ユーザーが編集可能な唯一のパラメーターは、信号サイズ ([Signal size]) です。

表 2. ユーザーが編集可能なパラメーター
ユーザーが編集可能なパラメーター 必要性 説明
[Signal size] 必須 出力信号のサイズを示します。カーネルの起動時に生成されるサンプルの最大数以上の値に設定する必要があります。

次の図に、入力および出力ポートを含む AIE Graph ブロックを示します。

図 5. AIE Graph ブロック

[General] タブの [Import] ボタンが [Update] に変わり、ブロック パラメーターをアップデートできるようになります。

図 6. [Update] ボタン

ソース ファイル (*.cpp) の使用

ソース ファイル (.cpp) を使用してグラフをインポートするには、 AIE Graph ブロックをダブルクリックし、[General] タブで Source file (*.cpp) をオンにします。次の図に示すように、グラフ アプリケーション ファイル (*.cpp)、検索パス、およびプリプロセッサ オプションを指定します。

図 7. AI エンジン グラフの [Block Parameters] ダイアログ ボックス

次の表に、各パラメーターの名前と説明を示します。

表 3. AI エンジン グラフの [Block Parameters] ダイアログ ボックス
パラメーター名 パラメーターのデータ型 必要性 説明
[Graph application file] 文字列 必須 ADF データフローをインスタンシエートし、シミュレーション プラットフォームに接続するファイル (.cpp) を指定します。このファイルには、データフロー グラフを初期化して実行する main() 関数が含まれます。
[Graph search paths] 文字列のベクター 必須 シミュレーションに含めるヘッダー ファイル、カーネル、およびインクルード ファイルの検索パスを指定します。adf.h が定義されている検索パス $XILINX_VITIS/adf/include はデフォルトで含まれているので、指定する必要はありません。
[Preprocessor options]   オプション ダウンストリームのコンパイルを特定のプリプロセッサ オプションを使用して実行する場合にプリプロセッサ引数を指定します。使用可能な形式は -Dname および -Dname=definition で、複数指定できます。引数は -D で開始する必要があり、<definition> が指定されていない場合は 1 と想定されます。

次に、グラフ .cpp ファイルの例を示します。グラフは次のように接続されます。このファイルは、[Block Parameters] ダイアログ ボックスの [Graph application file] で指定する必要があります。

graph.cpp

#include "Proj.h"
 
// instantiate cardano dataflow graph
Proj mygraph;
 
// initialize and run the dataflow graph
#if defined(__AIESIM__) || defined(__X86SIM__)
int main(void) {
   mygraph.init();
   mygraph.run();
   mygraph.end();
   return 0;
}
#endif

パラメーターをアップデートしたら、Import をクリックします。ツールによりグラフ データベースが生成され、インポートが正常に完了すると、次の図に示すように、AIE Graph ブロックの入力および出力ポートがアップデートされます。

図 8. AIE Graph ブロック

ヘッダー ファイルとソース ファイルのインポート時に生成される AIE Graph ブロックのインターフェイスは同じです。

AIE Graph ブロックの [Block Parameters] ダイアログ ボックスの [Function] タブは、ヘッダー ファイルを使用してグラフをインポートした場合と同様です。[Signal size] パラメーターをアップデートできます。OK をクリックして [Block Parameters] ダイアログ ボックスを閉じます。

重要:
  • AI エンジン グラフの inout ポートを AI エンジン グラフの input RTP ポートに接続するには、両方のポートの同期に互換性がある必要があります。互換性がない場合は、Model Composer で適切なエラーが表示されます。
  • RTP ポートの動作がデフォルトの動作と異なる場合は、接続をグラフ コードで async または sync ポートとして指定する必要があります。