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