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