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