changeset 1aa497ac86b2 in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=1aa497ac86b2
description:
        ruby: mesi: remove owner and sharer fields from directory tags

        The directory controller should not have the sharer field since there is
        only one level 2 cache. Anyway the field was not in use.  The owner 
field
        was being used to track the l2 cache version (in case of distributed 
l2) that
        has the cache block under consideration.  The information is not 
required
        since the version of the level 2 cache can be obtained from a subset of 
the
        address bits.

diffstat:

 configs/ruby/MESI_CMP_directory.py         |   1 +
 src/mem/protocol/MESI_CMP_directory-dir.sm |  50 ++++++-----------------------
 2 files changed, 12 insertions(+), 39 deletions(-)

diffs (155 lines):

diff -r bdd606534bdc -r 1aa497ac86b2 configs/ruby/MESI_CMP_directory.py
--- a/configs/ruby/MESI_CMP_directory.py        Tue Dec 03 10:51:40 2013 -0600
+++ b/configs/ruby/MESI_CMP_directory.py        Fri Dec 20 20:34:03 2013 -0600
@@ -174,6 +174,7 @@
                                                              use_map =
                                                            options.use_map),
                                          memBuffer = mem_cntrl,
+                                         l2_select_num_bits = l2_bits,
                                          transitions_per_cycle = options.ports,
                                          ruby_system = ruby_system)
 
diff -r bdd606534bdc -r 1aa497ac86b2 src/mem/protocol/MESI_CMP_directory-dir.sm
--- a/src/mem/protocol/MESI_CMP_directory-dir.sm        Tue Dec 03 10:51:40 
2013 -0600
+++ b/src/mem/protocol/MESI_CMP_directory-dir.sm        Fri Dec 20 20:34:03 
2013 -0600
@@ -38,14 +38,15 @@
  : DirectoryMemory * directory,
    MemoryControl * memBuffer,
    Cycles to_mem_ctrl_latency = 1,
-   Cycles directory_latency = 6
+   Cycles directory_latency = 6,
+   int l2_select_num_bits
 {
-
-  MessageBuffer requestToDir, network="From", virtual_network="0", 
ordered="false", vnet_type="request";
-  MessageBuffer responseToDir, network="From", virtual_network="1", 
ordered="false", vnet_type="response";
-
-  MessageBuffer requestFromDir, network="To", virtual_network="0", 
ordered="false", vnet_type="request";
-  MessageBuffer responseFromDir, network="To", virtual_network="1", 
ordered="false", vnet_type="response";
+  MessageBuffer requestToDir, network="From", virtual_network="0",
+        ordered="false", vnet_type="request";
+  MessageBuffer responseToDir, network="From", virtual_network="1",
+        ordered="false", vnet_type="response";
+  MessageBuffer responseFromDir, network="To", virtual_network="1",
+        ordered="false", vnet_type="response";
 
   // STATES
   state_declaration(State, desc="Directory states", 
default="Directory_State_I") {
@@ -82,8 +83,6 @@
   structure(Entry, desc="...", interface="AbstractEntry") {
     State DirectoryState,          desc="Directory state";
     DataBlock DataBlk,             desc="data for the block";
-    NetDest Sharers,                   desc="Sharers for this block";
-    NetDest Owner,                     desc="Owner of this block";
   }
 
   // TBE entries for DMA requests
@@ -104,6 +103,7 @@
 
   // ** OBJECTS **
 
+  int l2_select_low_bit, default="RubySystem::getBlockSizeBits()";
   TBETable TBEs, template="<Directory_TBE>", constructor="m_number_of_TBEs";
 
   void set_tbe(TBE tbe);
@@ -133,21 +133,11 @@
   }
 
   void setState(TBE tbe, Address addr, State state) {
-
     if (is_valid(tbe)) {
       tbe.TBEState := state;
     }
 
     if (directory.isPresent(addr)) {
-
-      if (state == State:I)  {
-        assert(getDirectoryEntry(addr).Owner.count() == 0);
-        assert(getDirectoryEntry(addr).Sharers.count() == 0);
-      } else if (state == State:M) {
-        assert(getDirectoryEntry(addr).Owner.count() == 1);
-        assert(getDirectoryEntry(addr).Sharers.count() == 0);
-      }
-
       getDirectoryEntry(addr).DirectoryState := state;
     }
   }
@@ -416,22 +406,14 @@
     requestNetwork_in.recycle();
   }
 
-
-  action(e_ownerIsRequestor, "e", desc="The owner is now the requestor") {
-    peek(requestNetwork_in, RequestMsg) {
-      getDirectoryEntry(address).Owner.clear();
-      getDirectoryEntry(address).Owner.add(in_msg.Requestor);
-    }
-  }
-
-
   action(inv_sendCacheInvalidate, "inv", desc="Invalidate a cache block") {
     peek(requestNetwork_in, RequestMsg) {
       enqueue(responseNetwork_out, ResponseMsg, latency=directory_latency) {
       out_msg.Addr := address;
       out_msg.Type := CoherenceResponseType:INV;
       out_msg.Sender := machineID;
-      out_msg.Destination := getDirectoryEntry(address).Owner;
+      out_msg.Destination.add(mapAddressToRange(address, MachineType:L2Cache,
+                                     l2_select_low_bit, l2_select_num_bits));
       out_msg.MessageSize := MessageSizeType:Response_Control;
       }
     }
@@ -450,10 +432,6 @@
     }
   }
 
-  action(c_clearOwner, "c", desc="Clear the owner field") {
-    getDirectoryEntry(address).Owner.clear();
-  }
-
   action(v_allocateTBE, "v", desc="Allocate TBE") {
     peek(requestNetwork_in, RequestMsg) {
       TBEs.allocate(address);
@@ -500,10 +478,8 @@
 
   // TRANSITIONS
 
-
   transition(I, Fetch, IM) {
     qf_queueMemoryFetchRequest;
-    e_ownerIsRequestor;
     j_popIncomingRequestQueue;
   }
 
@@ -514,7 +490,6 @@
   }
 //added by SS
   transition(M, CleanReplacement, I) {
-    c_clearOwner;
     a_sendAck;
     k_popIncomingResponseQueue;
   }
@@ -526,7 +501,6 @@
   }
 
   transition(MI, Memory_Ack, I) {
-    c_clearOwner;
     aa_sendAck;
     l_popMemQueue;
     kd_wakeUpDependents;
@@ -580,7 +554,6 @@
 
   transition(M_DRDI, Memory_Ack, I) {
     aa_sendAck;
-    c_clearOwner;
     l_popMemQueue;
     kd_wakeUpDependents;
   }
@@ -600,7 +573,6 @@
   transition(M_DWRI, Memory_Ack, I) {
     dwt_writeDMADataFromTBE;
     aa_sendAck;
-    c_clearOwner;
     da_sendDMAAck;
     w_deallocateTBE;
     l_popMemQueue;
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to