SDAccel アプリケーションは、ソフトウェア プログラムと FPGA バイナリの 2 つのコンポーネントを含むヘテロジニアス アプリケーションです。これらの 2 つのコンポーネントは、専用のコンパイル チェーンを使用してビルドします。この演習では、コマンド ラインから VADD サンプルをコンパイル、リンク、および実行する方法について説明します。
OpenCL™ API 呼び出しを使用して C/C++ で記述されたホスト アプリケーションは、標準 CGG コンパイラや XCPP (GCC 周りのシンプルなラッパー) のいずれかを使用してビルドできます。各ソース ファイルはオブジェクト ファイル (o) にコンパイルされ、ザイリンクス SDAccel ランタイム共有ライブラリとリンクされて、実行ファイル (EXE) が作成されます。GCC および関連するコマンド ライン オプションの詳細は、GNU コンパイラ コレクション (GCC) の使用を参照してください。
ホスト コードをビルドするには、./reference-files/src
ファイルに次の XCPP コマンドを使用します。
xcpp -I$XILINX_XRT/include/ -I$XILINX_VIVADO/include/ -Wall -O0 -g -std=c++14 ./src/host.cpp -o 'host' -L$XILINX_XRT/lib/ -lOpenCL -lpthread -lrt -lstdc++
このコマンドはザイリンクス ランタイム (XRT)、Vivado ツール、OpenCL API に必要なライブラリおよびインクルード ファイルを指定します。ホストのビルド方法の詳細は、「アクセラレーションされたアプリケーションをビルドして実行するための基本的な概念」チュートリアルのアプリケーションのビルド演習を参照してください。
ヒント: ここに示すコマンドを実行するには、「アプリケーションのビルド」で説明するように、SDx 開発ツールおよび XRT 用の環境を設定する必要があります。
ソフトウェア アプリケーションと同様、ハードウェアのビルドには、XOCC コンパイラを使用して コンパイルおよびリンクをする必要があります。
次のコマンドの場合、ビルド ターゲットはソフトウェア エミュレーション (-t sw_emu
) です。「アクセラレーションされたアプリケーションをビルドして実行するための基本的な概念」チュートリアルのアプリケーションのビルド演習で説明したように、hw_emu
および hw
などの別のビルド ターゲットを指定することもできます。
-
次のコマンドを使用して VADD サンプルのハードウェア カーネルをコンパイルします。
xocc -t sw_emu --platform xilinx_u200_xdma_201830_1 -g -c -k vadd -I'../src' -o'vadd.xilinx_u200_xdma_201830_1.xo' './src/vadd.cpp'
-
次のコマンドを使用して VADD サンプルのハードウェア カーネルをリンクします。
xocc -t sw_emu --platform xilinx_u200_xdma_201830_1 -g -l --nk vadd:1:vadd_1 -o'vadd.xilinx_u200_xdma_201830_1.xclbin' vadd.xilinx_u200_xdma_201830_1.xo
ハードウェアでデザインを実行する前に、ソフトウェアおよびハードウェア エミュレーションの実行モードでデザインを実行して、機能を検証しておいてください。どのエミュレーション モードでもアプリケーションを実行するのは、次の 2 つのプロセスです。
- エミュレーション コンフィギュレーション ファイルを生成。
- アプリケーションを実行。
-
ソフトウェア エミュレーション モード (
-t sw_emu
) で実行するには、エミュレーション コンフィギュレーション ファイルを生成し、XCL_EMULATION_MODE 環境変数を設定します。emconfigutil --platform xilinx_u200_xdma_201830_1 export XCL_EMULATION_MODE=sw_emu
-
コンフィギュレーション ファイル (
emconfig.json
) を生成して XCL_EMULATION_MODE を設定したら、次のコマンドでホスト プログラムとカーネルをソフトウェア エミュレーション モードで実行します。./host vadd.xilinx_u200_xdma_201830_1.xclbin
-
エミュレーション実行を確認します。
Found Platform Platform Name: Xilinx INFO: Reading vadd.xilinx_u200_xdma_201830_1.xclbin Loading: 'vadd.xilinx_u200_xdma_201830_1.xclbin' TEST PASSED
重要: RTL カーネルでは、C モデルが関連付けられている場合にソフトウェア エミュレーションがサポートされます。C モデルが使用可能でない場合は、ハードウェア エミュレーションを使用してカーネル コードをデバッグする必要があります。
-
ハードウェア エミュレーションの場合は、
-t hw_emu
XOCC オプションを使用してカーネルをビルドし直します。xocc -t hw_emu --platform xilinx_u200_xdma_201830_1 -g -c -k vadd -I'../src' -o'vadd.xilinx_u200_xdma_201830_1.xo' './src/vadd.cpp' xocc -t hw_emu --platform xilinx_u200_xdma_201830_1 -g -l --nk vadd:1:vadd_1 -o'vadd.xilinx_u200_xdma_201830_1.xclbin' vadd.xilinx_u200_xdma_201830_1.xo
-
ハードウェア エミュレーション モードで実行するには、エミュレーション コンフィギュレーション ファイルを生成し、XCL_EMULATION_MODE 環境変数を設定します。
emconfigutil --platform xilinx_u200_xdma_201830_1 export XCL_EMULATION_MODE=hw_emu
-
次のコマンドを使用し、ホスト プログラムとカーネルをハードウェア エミュレーション モードで実行します。
./host vadd.xilinx_u200_xdma_201830_1.xclbin
-
エミュレーション実行を確認します。
Found Platform Platform Name: Xilinx INFO: Reading vadd.xilinx_u200_xdma_201830_1.xclbin Loading: 'vadd.xilinx_u200_xdma_201830_1.xclbin' INFO: [HW-EM 01] Hardware emulation runs simulation underneath. Using a large data set will result in long simulation times. It is recommended that a small dataset is used for faster execution. The flow uses approximate models for DDR memory and interconnect and hence the performance data generated is approximate. TEST PASSED INFO: [SDx-EM 22] [Wall clock time: 16:39, Emulation time: 0.108767 ms] Data transfer between kernel(s) and global memory(s) vadd_1:m_axi_gmem-DDR[1] RD = 32.000 KB WR = 16.000 KB
エミュレーション モードを使用して機能の正しさとホストとカーネルの統合を検証したら、次はザイリンクス FPGA の Alveo アクセラレータ カードをターゲットにします (-t hw
)。
-
ハードウェアの場合は、
-t hw
XOCC オプションを使用してカーネルをビルドし直します。xocc -t hw_emu --platform xilinx_u200_xdma_201830_1 -g -c -k vadd -I'../src' -o'vadd.xilinx_u200_xdma_201830_1.xo' './src/vadd.cpp' xocc -t hw_emu --platform xilinx_u200_xdma_201830_1 -g -l --nk vadd:1:vadd_1 -o'vadd.xilinx_u200_xdma_201830_1.xclbin' vadd.xilinx_u200_xdma_201830_1.xo
-
XCL_EMULATION_MODE 環境は設定しないようにします。
unset XCL_EMULATION_MODE
この段階ではデザインを Vivado ツールで合成して FPGA ハードウェアに読み込むビットストリームにパッケージする必要があるので、ハードウェア ビルドに時間がかかる可能性があります。
-
ビルドが準備でき、環境変数を正しく設定したら、デザインを Alveo アクセラレータ カードで実行します。
./host vadd.xilinx_u200_xdma_201830_1.xclbin
-
エミュレーション実行を確認します。
Found Platform Platform Name: Xilinx INFO: Reading vadd.xilinx_u200_xdma_201830_1.xclbin Loading: 'vadd.xilinx_u200_xdma_201830_1.xclbin' TEST PASSED
makefile は、コマンドおよびオプションを整理する単純な方法で、必要に応じてビルドを繰り返しやすくします。./reference-files
に含まれる Makefile
には、上記で定義したコマンドが含まれており、ビルドをクリーンアップし、プロジェクトをビルドし直すための構造も含まれます。
この Makefile
を使用するには、使用しているホスト コードのビルド ターゲット (TARGET)、ハードウェア (DEVICE)、およびバージョン (VER) を指定する必要があります。
-
ソフトウェア エミュレーションをターゲットにする場合は、次の
make
コマンドを使用します。make check TARGET=sw_emu DEVICE=<DEVICE> VER=host_cpp
-
ハードウェア エミュレーションをターゲットにする場合は、次の
make
コマンドを使用します。make check TARGET=hw_emu DEVICE=<DEVICE> VER=host_cpp
-
ハードウェアをターゲットにするには、次の
make
コマンドを使用します。make check TARGET=hw DEVICE=<DEVICE> VER=host_cpp
次のステップは、アプリケーションのプロファイルです。
Copyright© 2019 Xilinx