最適なデータ アクセス パターン

FPGA で最適なパフォーマンスを得るためのデータ アクセス パターンは、次のとおりです。

  • データ入力の読み込みを最小限にします。データがブロックに読み込まれると、多くの並列パスに簡単に供給できますが、ハードウェア関数への入力がパフォーマンスのボトルネックになることがあります。データを読み込んだ後、再利用する必要がある場合は、ローカル キャッシュを使用します。
  • 配列、特に大型の配列へのアクセスを最小限に抑えます。配列はブロック RAM にインプリメントされますが、ブロック RAM では I/O ポートと同様ポート数が限られるので、パフォーマンスのボトルネックになることがあります。配列は小型の配列および個別のレジスタに分割できますが、大型の配列を分割すると使用されるレジスタ数が多くなります。小型のローカル キャッシュを使用して累積などの結果を保持してから、最終結果を配列に書き出すようにします。
  • パイプライン処理されたタスクであっても、タスクを条件で実行するのではなく、パイプライン処理されたタスク内で条件分岐を実行するようにします。条件文は、パイプラインで個別のパスとしてインプリメントされます。データが 1 つのタスクから次のタスク内で実行される条件に流れるようにすると、システムのパフォーマンスが向上します。
  • 入力の読み込みと同様にポートはボトルネックになるので、出力の書き出しを最小限にします。追加のアクセスを複製すると、問題がシステム内に先送りされるだけです。

データをストリーミング方式で処理する C コードでは、関数引数に対する読み出し/書き込みを一度のみにすると、FPGA に効率的にインプリメントできるようになります。FPGA が必要なパフォーマンスで動作しない理由をデバッグするよりも、高パフォーマンスの FPGA インプリメンテーションが得られる C のアルゴリズムを設計する方が生産的です。