インターコネクト間のプロトコルフローについて
次に、CHIのプロトコルフローについて見ていく。
Read Transaction flows
Read transactions with DMT and without snoops
DMTというのはDirect Memory Transferであるということを思い出しておく。つまりリクエスタの要求に対して、データはHomeノードを介さず直接変換される。
- RN-FがHN-FにReadリクエストを送る
- HN-FがSN-FにReadリクエストを送る
- SN-FはデータレスポンスをRN-Fに直接返信する
- 最初のリクエストがReadSharedの場合、RN-FはHN-FにCompAckを送信する。
この図を見てわかる通り、RN-Fのキャッシュラインの状態はI(Invalid)からUC(Unique Clean)状態になる。
Read transactions with DMT and with snoops
DMTにおけるスヌープ付きのリードリクエストについてフローを確認する。このためには、ReadShared
トランザクションを送出する。
下記のダイアグラムにおいて、ノードの役割は以下のとおりである。
- RN-F0 : リクエストノード。リクエストを送出する。
- RN-F1 : リクエストノード。今回はリクエストを送出せず、ホームノードからスヌープを受け取る。
- HN-F : ホームノード。スヌープ処理とスレーブへのリクエスト送出を取り扱う。
- SN-F : スレーブノード。データリクエストを受け取りレスポンスを返す。
いかのような順序でフローが実行される。
- RN-F0がHN-Fにリードリクエストを送出する。
- HN-FがスヌープリクエストをRN-F1に送出する。
- RN-F1からスヌープレスポンスを受け取り、RN-F1にデータが存在しないことを確認した後、HN-FがSN-Fに対してリードリクエストを送出する。
- SN-FはデータレスポンスをRN-F0に送出する。
- RN-F0はCompAckをHN-Fに送出し、ReadSharedのリクエストを完了させる。
read transaction with DCT
DCTはダイレクトキャッシュ転送(Direct Cache Transfer)を用いるタイプの転送について。
ここでのポイントは、RN-F1のスヌープリクエストに対するレスポンスが、直接RN-F0に返されるということである。
- RN-F0はホームノードHN-FにReadSharedを送出する。
- HN-FはSnpSharedFwdを送出して、RN-F1に対してフォワーディングスヌープリクエストを転送する。
- RN-F1のキャッシュライン状態はUCからSCに更新される。
- RN-F1はCompData_SCをRN-F0に転送する。
- RN-F1はSnpResp_SC_Fwded_SC スヌープをリクエストをHN-Fに送出する。つまり、
- CompDataレスポンスをRN-F0が送信し、HN-Fは転送を完了する。