インテル® アクセラレーション・スタック (インテル® Xeon® CPU&FPGA対応) コア・キャッシュ・インターフェイス (CCI-P) リファレンス・マニュアル

ID 683193
日付 11/04/2019
Public
ドキュメント目次

1.3.13.1.1. メモリー書き込みフェンス

CCI-P WrFenceリクエスト

CCI-PWrFenceのリクエストタイプを定義します。これは、VAを含むすべてのVCに使用可能です。FIUWrFenceの実装はC1チャネルをストールするため、CCI-P書き込みパスを共有している書き込みストリームをすべてブロックします。さらに、WrFenceリクエストはグローバルな可観測性を保証するため、FIUはPCIeパスに対して長さゼロの読み出し (ZLR) を生成し、書き込みをプッシュします。そのため、WrFenceリクエストはC1チャネルで長いストールを引き起こす可能性があります。これを回避するには、AFUのデータフローの同期点にその使用を制限します。
  • WrFenceは、書き込みフェンスに続く書き込みが処理される前に、そのフェンスに先行するすべての割り込みまたは書き込みがメモリーに確定されることを保証します。
  • WrFenceの順序は、ほかのメモリー書き込み、割り込み、またはWrFenceリクエストと入れ替わりません。
  • WrFenceは、読み出しリクエストに関して順序付けの保証はしません。
  • WrFenceはそれに続く読み出しをブロックしません。すなわち、メモリー読み出しはWrFenceをバイパスできます。この規則は、「メモリーリクエスト」の章で説明されています。
  • WrFenceリクエストにはvc_selフィールドがあります。これにより、WrFenceが適用される仮想チャネルを決定できます。例えば、VL0を使用してデータブロックを移動する場合は、VL0上の書き込みリクエストのみをシリアル化します。つまり、WrFenceをVL0で使用する必要があります。同様に、VAでのメモリー書き込みを使用する場合は、WrFenceをVAで使用します。
  • WrFenceリクエストは応答を返します。応答はRX C1を介してAFUに伝達され、resp_typeフィールドで識別されます。読み出しはWrFenceをバイパスできるため、書き込みに続いて読み出し を行い、最新のデータが読み出されるようにするには (RaWハザード)、WrFenceを発行し、同じ位置に読み出しを発行する前にWrFenceの応答を待ちます。

書き込み応答のカウント

AFUはメモリー書き込みバリアーを実装します。これは、未処理の書き込みがすべて完了するまで待機し、その後、バリアーの後の次の書き込みを送信することで可能になります。未処理の書き込みを追跡するロジックは、リクエスト時に増加し応答時に減少する単純なカウンターにすることができます。よって、「書き込み応答のカウント」というタイトルが付けられています。書き込み応答は、ローカルの可観測性のみを保証します。この手法は、単一のVC (VL0、VH0、VH1) を対象とする書き込みストリームにメモリーバリアーを実装する場合にのみ機能します。書き込みストリームがVA、もしくはいくつかのVCの組み合わせを使用している場合、この手法は使用しないでください。
注: そのような場合は、代わりに書き込みフェンスを実装します。
この手法の主な利点の1つは、AFUが詳細なバリアーを実装できることです。例えば、AFUに2つの独立した書き込みストリームがある場合、各ストリームに書き込み応答トラッカーを実装することができます。書き込みストリーム1にメモリーバリアーが必要な場合、ストリーム1からの書き込みのみがストールし、ストリーム2からの書き込みの送信は継続します。Mdataフィールドは、ストリームIDのエンコーディングに使用できます。このような詳細なメモリーバリアーにより、以下が可能になります。
  • すべての書き込みではなく、特定の未処理の書き込みの完了のみを待機するため、バリアーのレイテンシーの影響を最小限に抑えます。
  • 無関係な書き込みストリームを継続して進行させることができるため、リンクの使用率が向上します。