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

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

1.3.4. UMsg

重要: UMsgは、FPGA統合プラットフォームでのみサポートされています。

UMsgは、CCI-Pの読み出し帯域幅を消費することなく、AFUのスピンループと同じ機能を提供します。これはスピンループの最適化と考えることができ、FPGAキャッシュ・コントローラー内の監視エージェントが、ドライバーによって割り当てられたキャッシュラインへのスヌーピングを監視しています。キャッシュラインへのスヌーピングを検出すると、データを読み出し、AFUにUMsgを送信します。

UMsgフローはキャッシュ・コヒーレンシー・プロトコルを使用し、CPUからAFUへの順序付けされていない高速通信パスを実装します。このプロセスは図 8 に示されるとおり、2つの段階で構成されます。

最初の段階は初期化です。ここでSWはUMsgアドレス空間 (UMAS) を固定し、UMASの開始アドレスをFPGAキャッシュ・コントローラーと共有します。これが完了すると、FPGAキャッシュ・コントローラーはUMASの各キャッシュラインを読み出し、それをFPGAキャッシュに共有状態で配置します。

2番目は実際に使用する段階であり、CPUはUMASに書き込みを行います。CPUがUMASに書き込むと、FPGAキャッシュへのスヌーピングが生成されます。FPGAはスヌーピングに応答し、ラインを無効としてマークします。CPUの書き込みリクエストが完了し、データがグローバルに可視化されます。UMASアドレス範囲のスヌーピングは監視エージェント (MA) をトリガーします。MAはキャッシュライン (CL) の読み出しリクエストをCPUに送信し、また、オプションでAFUにUMsgをヒント (UMsgH) とともに送信します。読み出しリクエストが完了すると、64 BのデータをともなうUMsgがAFUに送信されます。
図 8. UMsgの初期化および使用のフロー

機能的にUMsgは、スピンループもしくは、インテルXeonプロセッサーのmonitorおよびmwait命令と同等です。

UMsgの主な特性
  • マルチスレッド・アプリケーションの異なるアドレスへのスピンループに相対的な順序付けの保証がないように、異なるアドレスへのUMsgに順序付けの保証はありません。
  • UMAS CLへのCPUの書き込みがすべて、対応するUMsgになるわけではありません。AFUはそれまでに行われたCLの値の変更を見逃す可能性がありますが、CLの最新データを読むことが保証されています。前述のとおり、これをスピンループのように考えると理解しやすくなります。プロデューサー・スレッドがフラグCLを複数回更新した場合、ポーリングスレッドはそれまでに行われた値の変更を見逃す可能性がありますが、最新の値を読むことが保証されています。
次に、UMsgにマッピングされる可能性のある記述子キューポインターのソフトウェア更新を使用例として示します。ポインターは常に増加することが想定されます。UMsgは、AFUがポインターの最終の値を読むことを保証しますが、それまでにポインターに行われた更新を見逃す可能性があります。ただし、これは許容されます。
  1. UMsgはFPGAキャッシュを使用するため、キャッシュ・ポリューションを引き起こす可能性があります。キャッシュ・ポリューションとは、プログラムが不必要にデータをキャッシュにロードし、ほかの必要なデータを追い出すことでパフォーマンスが低下することです。
  2. CPUは誤ったスヌーピングを示す場合があるため、UMsgHは手がかりとなる情報として扱う必要があります。つまり、投機的実行またはUMsgHに基づくプリフェッチを開始することは可能ですが、結果を確定する前にUMsgを待つ必要があります。
  3. UMsgのレイテンシーは、RdLine_Sを使用するAFUの読み出しポーリングと同じですが、読み出しトラフィックに使用できるCCI-Pチャネルの帯域幅を節約します。