インテル® FPGA SDK for OpenCL™プロ・エディション: プログラミング・ガイド

ID 683846
日付 4/01/2019
Public
ドキュメント目次

6.2.1. 同じメモリータイプの複数のインターフェイスでのバッファーの分割

同じメモリータイプの複数のインターフェイスにおいてメモリーを分割する際は、OpenCL™カーネルコンパイル中のバーストインターリーブを最初に無効にする必要があります。次に、OpenCLバッファーを割り当てるメモリーバンクをホスト・アプリケーションに指定する必要があります。
デフォルトで、 インテル® FPGA SDK for OpenCL™オフライン・コンパイラーは、各グローバル・メモリー・タイプをバーストインターリーブ方式でコンフィグレーションします。バーストインターリーブ方式のコンフィグレーションは通常、メモリーバンク間に最良のロードバランスをもたらします。ただし、インターリーブ領域以外へのメモリー分割が、より効率的な場合もあります。

次の図は、バーストインターリーブでのメモリー分割と、インターリーブ以外のメモリー分割における違いを表しています。

使用可能なグローバル・メモリー・タイプの一部またはすべてを手動で分割するには、次の作業を実行します。

  1. OpenCLカーネルを -no-interleaving=<global_memory_type> フラグでコンパイルし、指定されたメモリータイプのメモリーバンクを個別のアドレスでコンフィグレーションします。 -no-interleaving=<global_memory_type> フラグの使用方法に関しては、グローバルメモリーのバーストインターリーブの無効化 (-no-interleaving=<global_memory_type>) の章を参照ください。
  2. ホスト・アプリケーションにOpenCLバッファーを作成し、CL_CHANNELフラグでバッファーをいずれかのバンクへ割り当てます。
    • CL_CHANNEL_1_INTELFPGAを指定し、バッファーを使用可能な最下位メモリー領域に割り当てます。
    • CL_CHANNEL_2_INTELFPGAを指定し、メモリーを2番目のバンクに割り当てます (利用可能な場合)。
    重要: それぞれのバッファーは、単一メモリーバンクにのみ割り当ててください。ランタイムに2番目のバンクが利用できない場合、メモリーは1番目のバンクに割り当てられます。グローバルメモリーが利用できない場合は、clCreateBuffer呼び出しは失敗し、エラーメッセージCL_MEM_OBJECT_ALLOCATION_FAILUREが表示されます。