[Gems-users] a confusing action in MOESI_CMP_directory


Date: Thu, 24 Sep 2009 15:31:10 +0800
From: "shanshuchang" <shanshuchang@xxxxxxxxx>
Subject: [Gems-users] a confusing action in MOESI_CMP_directory
Hi all,
I am studing MOESI_CMP_directory and I am really confused about the action e_sendData:
 
  action(e_sendData, "e", desc="Send data from cache to requestor") {
    peek(requestNetwork_in, RequestMsg) {
      if (in_msg.RequestorMachine == MachineType:L2Cache) {
        enqueue(responseNetwork_out, ResponseMsg, latency="L1_REQUEST_LATENCY") {
           ***;
        }
           ***;
      }
      else {
        enqueue(responseNetwork_out, ResponseMsg, latency="L1_REQUEST_LATENCY") {
          ***;
          out_msg.Destination.add(in_msg.Requestor);
          ***;
          out_msg.MessageSize := MessageSizeType:ResponseLocal_Data;
        }
        DEBUG_EXPR("Sending data to L1");
      }
    }
  }
 
It seems that the action's "else{***;}" codes are used to send data to other processors who request L1_GETS.
But here it uses MessageBuffer requestNetwork_out which are connected with L2 cache's corresponding MessageBuffer.
 
Meanwhile, L1 cache with block state IS can just get data message from another MessageBuffer of L1--responseToL1Cache_in,
So I am confused about how the data message from L1 owner is transferred to the L1 with IS state.
 
Thanks.
[← Prev in Thread] Current Thread [Next in Thread→]
  • [Gems-users] a confusing action in MOESI_CMP_directory, shanshuchang <=