ホスト コードの構造 - 2022.1 日本語

Vitis 統合ソフトウェア プラットフォームの資料: アプリケーション アクセラレーション開発 (UG1393)

Document ID
UG1393
Release Date
2022-05-25
Version
2022.1 日本語

VSC は、アプリケーション コードの開発とアクセラレータ ハードウェアへのソフトウェア呼び出しを管理するためのシンプルなテンプレートを提供しています。このテンプレートを使用すると、ハードウェア構成に関係なく、C++ ソフトウェア API を統一された形式で作成できます。

    auto arg1BP  = myACC::create_bufpool( .... ); (1)
    ....
    myACC::send_while([= .... ]() // (2)
    {
        int* arg1 = myAcc::alloc_buf<int>(arg1BP, .... ); // (4)
        ....
        myACC::compute( arg1, .... ); // (5)
        ....
        return ( while_cond ); // (3)
    }
    myACC::receive_all_in_order([= .... ]() // (6)
    {
        ....
    }
    myACC::join(); // (7)

上記の擬似コードに示されるように、このテンプレートの構造は、次の部分で構成されています。これらの詳細は、VPP_ACC クラスの API を参照してください。

  • create_bufpool(): アクセラレータに渡されたポインター引数ごとにバッファー プールを作成し、引数データ (入力、出力、リモートなど) の仕様を提供します。
  • send_while(): アクセラレータ上のジョブの全体的なスケジューリングを制御するスレッドで、ラムダ関数を使用して各ジョブにデータを提供します。
  • return ( while_cond );: ラムダ関数の本体をループで実行して、必ずブール値を返します。send_while 本体内の return 文を使用すると、返される値が true である限りループの実行を継続し、false の場合にループを停止して send_while スレッドを終了できます。return 文は、ラムダ関数を宣言して使用する前に sent_value が 0 に設定されている場合は、++sent_value<MAX_SEND にできます。
  • alloc_buf(): 現在のループ イテレーションのバッファー プールからのメモリ バッファー オブジェクトを割り当てます。
  • compute(): アクセラレータ ハードウェアで compute() 関数の 1 つのジョブ実行をスケジュールするソフトウェア呼び出しです。
  • receive_all_in_order(): スケジュールされたジョブの結果を待つスレッドです。これはユーザー定義のもう 1 つのラムダ関数であり、send_while() スレッドが実行されている間はループで実行されます。
  • join(): 送信および受信スレッドの完了を待ちます。

次のセクションでは、アプリケーション コードを作成するその他の詳細を示します。