Vitis を使用したアクセラレーションのベスト プラクティス

Vitis™ コア開発キットでアプリケーション コードおよびハードウェア関数を開発する際は、次の事項を考慮してください。

  • アクセラレーションの設計手法については、Vitis ソフトウェア プラットフォームでのアプリケーションのアクセラレーション手法 を参照してください。
  • 入力および出力のデータ量に対して計算時間の比率が高い関数をアクセラレーションします。FPGA カーネルを使用すると計算時間は大幅に短縮されますが、データ量により転送レイテンシが追加されます。
  • 自己完結型の制御構造を持ち、ホストとの定期的な同期を必要としない関数をアクセラレーションします。
  • ホストからグローバル デバイス メモリに大型のデータ ブロックを転送します。小型の転送を複数実行するよりも、1 つの大型転送を実行する方が効率的です。帯域幅テストを実行して最適な転送サイズを検出します。
  • ホストにデータをコピーするのは、必要なときのみにします。カーネルによりグローバル メモリに書き込まれたデータは、別のカーネルで直接読み出すことができます。メモリ リソースには、PLRAM (サイズは小さいが最短レイテンシで高速アクセスが可能)、HBM (中程度のサイズで多少のレイテンシあり)、DDR (サイズは大きいがレイテンシは最長になるので低速アクセス) などが含まれます。
  • 複数のグローバル メモリ リソースを活用して、帯域幅を複数のカーネルに均等に分配します。
  • 512 ビット幅のバーストを実行して、カーネルとグローバル メモリ間の帯域幅を最大限にします。
  • カーネル内のローカル メモリにデータをキャッシュします。ローカル メモリにアクセスする方が、グローバル メモリにアクセスするよりもかなり高速です。
  • ホスト アプリケーションで、イベントおよびノンブロッキング トランザクションを使用して、複数の要求を並列にオーバーラップさせて実行します。
  • FPGA では、タスク レベルの並列処理を活用できるよう異なるカーネルを使用し、データ レベルの並列処理を活用できるよう複数の CU を使用して、複数のタスクを並列実行することによりパフォーマンスをさらに向上します。
  • カーネル内でデータフローを使用したタスク レベルと、ループ展開とループのパイプラインを使用した命令レベルの並列処理を活用して、スループットを最大にします。
  • 一部のザイリンクス FPGA には、複数のパーティション (SLR (Super Logic Region) とも呼ばれる) が含まれます。カーネルをカーネルがアクセスするグローバル メモリ バンクと同じ SLR に配置します。
  • ソフトウェアおよびハードウェア エミュレーションを使用してコードの周波数を検証し、正しく機能することを確認します。
  • Vitis ガイダンス レポートを頻繁に参照します。このレポートには、プロジェクトについて明確で実用的なアドバイスが示されます。