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

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

7.5. メモリー・レプリケーションファクタの制御によるローカルメモリーへのアクセスの最適化

メモリー複製率は、デザインがローカル・メモリー・システムを実装するために使用するM20Kメモリーブロックの数です。 メモリー複製因子を制御するには、お使いのOpenCLカーネル™のsinglepumpまたはdoublepumpカーネル属性が含まれます。 singlepumpdoublepumpのカーネル属性は インテル® FPGA SDK for OpenCL™ の高度な機能一部です。

インテル® M20Kメモリーブロックには2つのphysicalポートがあります。各M20Kブロックで使用できる論理ポートの数は、ポンピングの程度によって異なります。ポンピングは、他のデザインと比較してM20Kブロックのクロック周波数の尺度です。

カーネルがローカル・メモリー・システムlmemのための3つの読み出しポートと1つの書き込みポートを指定するデザイン例を検討してください。以下のコード例に示すように、ローカル変数宣言のsinglepumpカーネル属性を含めて、M20Kブロックは残りのデザインと同じ頻度で実行されます。

int __attribute__((memory,
                   numbanks(1),
                   bankwidth(64),
                   singlepump,
                   numreadports(3), 
                   numwriteports(1))) 
                   lmem[16];
図 83. シングルポンプM20Kメモリーブロックへのアクセス

各シングルポンプM20Kブロックには2つのlogicaポートがあります。ローカル・メモリー・システムの各書き込みポートは、デザインがメモリーシステムを実装するために使用するすべてのM20Kブロックに接続する必要があります。ローカル・メモリー・システムの各読み出しポートは、1つのM20Kブロックに接続する必要があります。これらの接続の制約のため、 lmemに指定されたポート数を実装するには、3つのM20Kブロックが必要です 。

ローカル変数宣言にdoublepumpカーネル属性を含める場合、残りのデザインと同じ頻度でM20Kメモリーブロックを実行するように指定します。


int __attribute__((memory,
                   numbanks(1),
                   bankwidth(64),
                   doublepump,
                   numreadports(3), 
                   numwriteports(1))) 
                   lmem[16];
図 84. ダブルポンピングされたM20Kメモリーブロックへのアクセス

各ダブルポンプM20Kブロックには4つの論理ポートがあります。そのため、3つの読み出しポートと1つの書き込みポートをすべてlmemに実装するには、1つのM20Kブロックが必要です 。

重要:
  • メモリーをダブルポンピングすると、リソースのオーバーヘッドが増加します。実際にM20Kを節約したり、パフォーマンスを向上させたり、その両方を達成した場合にのみ、 doublepumpカーネル属性を使用してください。
  • ストアはすべてのレプリケートに接続されている必要があり、競合に遭ってはいけません。したがって、ストアが3つ以上ある場合、メモリーは複製されません。ローカルメモリー・レプリケーションは、単一のストアでうまく動作します。
  • メモリーシステム全体が複製されるため、潜在的に大きなM20Kメモリーブロックが観察されることがあります。