AMD Vitis™ 環境では、ソフトウェア アプリケーション コンポーネントは、ザイリンクス ランタイム (XRT) のネイティブ API を使用してネイティブ C++ で記述できます。XRT ネイティブ API については、ここで簡単に説明します。詳細は、XRT 資料サイトの XRT ネイティブ API を参照してください。アプリケーション コンポーネントは通常、データセンター アクセラレーションでは、x86 サーバー上で実行されるので「ホスト アプリケーション」と呼ばれ、PL カーネルや AI エンジン グラフと同じデバイスのエンベデッド プロセッサ ベース システムでは、単に「アプリケーション」と呼ばれます。
通常、ホスト アプリケーションの構造は次の 3 つの手順に分けることができます。
- プラットフォーム デバイス ID を指定して .xclbin をロード
- PL カーネルとカーネル引数の設定
- ソフトウェア アプリケーションと PL カーネル間でデータを転送
- AI エンジン グラフ アプリケーションのロードと起動
- システムを実行し、結果を表示
AMD Versal™ アダプティブ SoC デバイスの場合、PS アプリケーションが PL ハードウェアと AI エンジン グラフ アプリケーションを含むヘテロジニアス システム全体を管理します。詳細は、 『AI エンジン ツールおよびフロー ユーザー ガイド』 (UG1076) の「PS ホスト アプリケーションのプログラミング」を参照してください。
ネイティブ XRT API を使用するには、ホスト アプリケーションが
xrt_coreutil
ライブラリにリンクしている必要があります。次に例を示します。g++ -g -std=c++17 -I$XILINX_XRT/include -L$XILINX_XRT/lib -lxrt_coreutil -pthread
XRT ネイティブ C++ API を使用してホスト コードをコンパイルするには、-std=c++17
の C++ 標準が必要です。-std=c++17
は 4.9.0 から GCC に導入されているので、4.9.0 より古い GCC バージョンでは、代わりに -std=c++1y
を使用します。
重要: ホスト アプリケーションをマルチスレッドで実行する場合は、
fork()
システム呼び出しを呼び出す際に注意が必要です。fork()
は、すべてのランタイム スレッドを複製するわけではありません。このため、子プロセスを完全な Vitis コア開発キットのアプリケーションとして実行することはできません。Vitis ソフトウェア プラットフォーム アプリケーションから別のプロセスを起動する場合は、posix_spawn()
を使用することをお勧めします。