Intel® FPGA SDK for OpenCL™: ベスト・プラクティス・ガイド

ID 683521
日付 12/08/2017
Public
ドキュメント目次

7. メモリーアクセス効率向上のための戦略

メモリーアクセス効率は、しばしばOpenCL™カーネルの全体的なパフォーマンスを左右します。 OpenCLコードを開発する際には、グローバル・メモリー・アクセスの回数を最小限に抑えることが有効です。 OpenCL仕様バージョン1.0では、 globalメモリー、 constantメモリー、 localメモリー、およびprivateメモリーの4種類のメモリータイプが記述されています。

相互接続トポロジーは、共有されたグローバル、定数、およびローカル・メモリー・システムをそれらの基礎となるメモリーに接続します。相互接続はメモリーポートへのアクセスアービトレーションを含みます。

メモリーアクセスは、共有メモリーリソース(つまり、グローバル、ローカル、および定数メモリー)を競合します。 OpenCLカーネルが多数のメモリーアクセスを実行する場合、 Intel® FPGA SDK for OpenCL™オフライン・コンパイラーはメモリーアクセス要求を処理するための複雑なアービトレーション・ロジックを生成する必要があります。複雑なアービトレーションロジックにより、最大動作周波数(f max )が低下し、カーネルの性能が低下する可能性があります。

以下のセクションでは、メモリーアクセスの最適化について詳しく説明します。要約すると、グローバル・メモリー・アクセスを最小限にすることは、以下の理由から有益である。

  • 一般に、OpenCLカーネルのパフォーマンスが向上すると、グローバルメモリー帯域幅要件が増加します。
  • グローバルメモリーの最大帯域幅は、最大ローカルメモリー帯域幅よりもずっと小さくなります。
  • FPGAの最大計算帯域幅は、グローバルメモリー帯域幅よりもはるかに大きくなります。
    重要: 可能であれば、ローカル、プライベート、または定数メモリーを使用して、カーネルのメモリー帯域幅を増やしてください。