2021.1 Vitis™ アプリケーション アクセラレーション開発フロー チュートリアル

2020.2 Vitis アプリケーション アクセラレーション開発フロー チュートリアル

ビデオたたみ込みフィルター アプリケーションのアクセラレーション

このチュートリアルでは、ザイリンクス Alveo データセンター アクセラレータ カードを使用してアクセラレーションされた計算量の多いアプリケーションについて説明します。FPGA 上で実行する特定のカーネルを設計し、パフォーマンスのためのホスト側アプリケーションの最適化について簡単に説明します。カーネルはスループットが最大になるように設計され、ホスト アプリケーションは、ホストと FPGA カードの間でデータが効率的に転送されるように最適化されます。ホスト アプリケーションは、複数のカーネル呼び出しに対処できるようにデータ転送を重複させて、データ移動の遅延をなくします。このチュートリアルでは、Vitis HLS を使用してビルド可能なハードウェア カーネルのパフォーマンスを簡単に見積もる方法と、その見積もりがどれくらい正確で実際のハードウェア パフォーマンスに近いかについても説明します。

アクセラレーションの概要

1 つ目の演習は、ビデオ フィルターをザイリンクス Alveo アクセラレータ カードに移植することで達成可能なアクセラレーション パフォーマンスをすばやく体験できるように設計されています。Alveo シリーズ カードは、データセンター アプリケーションをアクセラレーションするために設計されています。ただし、このチュートリアルはいくつかの簡単な変更を加えると、ほかのアクセラレータ カードにも適用できます。

この最初の演習で実行する手順は次のとおりです。

  • Vitis アプリケーション アクセラレーション開発フローを設定

  • ハードウェア最適化済みのアクセラレータを実行し、そのパフォーマンスをアプリケーションのベースラインと比較

この演習では、CPU のパフォーマンスと比較すると、かなりパフォーマンスを向上できることを示します。このチュートリアルの次の演習では、2D たたみ込みカーネルとホスト側アプリケーションのさまざまな最適化および設計手法を使用して、このようなパフォーマンスを達成する方法について説明します。

GitHub リポジトリのクローンおよび Vitis ツールの設定

このチュートリアルを実行するには、次の手順に従って git リポジトリのクローンを作成し、圧縮ファイルをダウンロードして抽出する必要があります。

git repo のクローン

次のコマンドを使用して、リポジトリをクローンします。

git clone https://github.com/Xilinx/Vitis-Tutorials.git

大容量ファイルのコピーおよび抽出

次のたたみ込みチュートリアル ディレクトリに大きなファイルをコピーして抽出します。

cd /VITIS_TUTORIAL_REPO_PATH/Hardware_Accelerators/Design_Tutorials/01-convolution-tutorial wget https://www.xilinx.com/bin/public/openDownload?filename=conv_tutorial_files.tar.gz -O conv_tutorial_files.tar.gz tar -xvzf conv_tutorial_files.tar.gz

注記: VITIS_TUTORIAL_REPO_PATH は、git repo のクローンが作成されたローカル ディレクトリ パスです。

Vitis ツールの設定

ローカル インストールごとに、次のコマンドを使用して、アプリケーション ビルドおよびランタイム環境を設定します。

source <XILINX_VITIS_INSTALL_PATH>/settings64.sh source <XRT_INSTALL_PATH>/setup.sh

アプリケーション パフォーマンスのベースライン

ソフトウェア アプリケーションは、解像度 1920x1080 の高解像度 (HD) ビデオフレーム/画像を処理します。一連の画像にたたみ込みを実行し、パフォーマンス結果のサマリを表示します。これは、ベースライン ソフトウェアのパフォーマンスを測定するために使用されます。次のように、チュートリアルを指定する環境変数を repo のパスを基準に設定してください。

export CONV_TUTORIAL_DIR=/VITIS_TUTORIAL_REPO_PATH/Hardware_Accelerators/Design_Tutorials/01-convolution-tutorial

VITIS_TUTORIAL_REPO_PATH は、クローン後にユーザーが配置した git repo のローカル パスです。

注記: このチュートリアルのすべての演習で CONV_TUTORIAL_DIR 変数が正しく設定されるようにしてください。

アプリケーションを実行して、次のようにパフォーマンスを測定します。

cd $CONV_TUTORIAL_DIR/sw_run ./run.sh

次に示すような結果が表示されます。CPU のスループットを書き留めておきます。

---------------------------------------------------------------------------- Number of runs : 60 Image width : 1920 Image height : 1080 Filter type : 6 Generating a random 1920x1080 input image Running Software version on 60 images CPU Time : 28.0035 s CPU Throughput : 12.7112 MB/s ----------------------------------------------------------------------------

FPGA アクセラレーション アプリケーションの実行

ホスト アプリケーションの起動

FPGA アクセラレーションされたビデオたたみ込みフィルターを使用するアプリケーションを起動します。アプリケーションは、実際の FPGA カードで実行されます (システム実行とも呼ばれます)。

cd $CONV_TUTORIAL_DIR make run

結果のサマリは、次のようになります。

---------------------------------------------------------------------------- Xilinx 2D Filter Example Application (Randomized Input Version) FPGA binary : ../xclbin/fpgabinary.hw.xclbin Number of runs : 60 Image width : 1920 Image height : 1080 Filter type : 3 Max requests : 12 Compare perf. : 1 Programming FPGA device Generating a random 1920x1080 input image Running FPGA accelerator on 60 images Running Software version Comparing results Test PASSED: Output matches reference FPGA Time : 0.4240 s FPGA Throughput : 839.4765 MB/s CPU Time : 28.9083 s CPU Throughput : 12.3133 MB/s FPGA Speedup : 68.1764 x ----------------------------------------------------------------------------

結果

ホスト アプリケーション コンソールの出力から、FPGA アクセラレーション カーネルが 68x の係数で CPU のみのインプリメンテーションを上回ることがわかります。CPU よりもパフォーマンスが大きく向上します。次の演習では、このパフォーマンスによって 1080p の解像度で 3 つ以上の HD ビデオ チャンネルを並列処理する方法を説明します。このチュートリアルでは、C++ で記述されたカーネルとホスト アプリケーションをビルドして、このようなパフォーマンス向上を達成する方法について説明します。ホスト アプリケーションは、OpenCL API とザイリンクス ランタイム (XRT) を使用して、このカスタム ビルド ハードウェア カーネルの計算能力を効果的に引き出します。


次の演習モジュール: ビデオたたみ込みフィルター: 概要とパフォーマンス見積もり

Copyright© 2020-2021