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

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

7.2.2. グローバルメモリーの手動分割

メモリーを手動で分割して、各バッファーが異なるメモリーバンクを占めるようにすることができます。
グローバルメモリーのデフォルトのバースト・インターリーブ構成では、メモリーアクセスが別のメモリーバンクよりも1つの外部メモリーバンクを優先しないようにすることで、負荷の不均衡を防ぎます。ただし、データを手動で分割することで、バッファーグループ全体のメモリー帯域幅を制御することができます。
Intel® FPGA SDK for OpenCL™オフライン・コンパイラーは、異なるメモリータイプ間でバースト・インターリーブすることはできません。特定のメモリータイプの各バンクを非インターリーブバンクとして設定するには、OpenCL™カーネルを -no-interleaving=<global_memory_type> フラグでコンパイルします。

カーネルが同じサイズの2つのバッファーをメモリーにアクセスする場合、負荷間の動的スケジューリングに関係なく、両方のメモリーバンクに同時にデータを分散できます。この最適化手順は、見かけ上のメモリー帯域幅を増加させる可能性があります。

カーネルが異種グローバル・メモリー・タイプにアクセスする場合、aocコマンドには、手動でパーティション化する各メモリー・タイプの -no-interleaving=<global_memory_type> オプションを組み込みます。
-no-interleaving=<global_memory_type> オプションの使用方法の詳細については、 インテル® FPGA SDK for OpenCL™ プログラミング・ガイドグローバルメモリー(-no-interleaving=<global_memory_type>)のバーストインターリーブのディセーブルのセクションを参照してください。