[gem5-dev] Change in gem5/gem5[develop]: mem-cache: Allow sending packet information to replacement policy

2021-07-01 Thread Daniel Carvalho (Gerrit) via gem5-dev
Daniel Carvalho has submitted this change. (  
https://gem5-review.googlesource.com/c/public/gem5/+/38117 )


Change subject: mem-cache: Allow sending packet information to replacement  
policy

..

mem-cache: Allow sending packet information to replacement policy

Some replacement policies can use information such as address or
PC to improve their re-reference prediction.

Change-Id: I412eee09efa2f3511ca1ece76fc2732509df4745
Signed-off-by: Daniel R. Carvalho 
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/38117
Tested-by: kokoro 
Reviewed-by: Jason Lowe-Power 
Maintainer: Jason Lowe-Power 
---
M src/mem/cache/replacement_policies/base.hh
M src/mem/cache/replacement_policies/dueling_rp.cc
M src/mem/cache/replacement_policies/dueling_rp.hh
M src/mem/cache/tags/base_set_assoc.hh
M src/mem/cache/tags/sector_tags.cc
5 files changed, 50 insertions(+), 7 deletions(-)

Approvals:
  Jason Lowe-Power: Looks good to me, approved; Looks good to me, approved
  kokoro: Regressions pass



diff --git a/src/mem/cache/replacement_policies/base.hh  
b/src/mem/cache/replacement_policies/base.hh

index 0393629..0851287 100644
--- a/src/mem/cache/replacement_policies/base.hh
+++ b/src/mem/cache/replacement_policies/base.hh
@@ -33,6 +33,7 @@

 #include "base/compiler.hh"
 #include "mem/cache/replacement_policies/replaceable_entry.hh"
+#include "mem/packet.hh"
 #include "params/BaseReplacementPolicy.hh"
 #include "sim/sim_object.hh"

@@ -67,17 +68,29 @@
  * Update replacement data.
  *
  * @param replacement_data Replacement data to be touched.
+ * @param pkt Packet that generated this access.
  */
 virtual void touch(const std::shared_ptr&
-replacement_data) const =  
0;

+replacement_data, const PacketPtr pkt)
+{
+touch(replacement_data);
+}
+virtual void touch(const std::shared_ptr&
+replacement_data) const = 0;

 /**
  * Reset replacement data. Used when it's holder is inserted/validated.
  *
  * @param replacement_data Replacement data to be reset.
+ * @param pkt Packet that generated this access.
  */
 virtual void reset(const std::shared_ptr&
-replacement_data) const =  
0;

+replacement_data, const PacketPtr pkt)
+{
+reset(replacement_data);
+}
+virtual void reset(const std::shared_ptr&
+replacement_data) const = 0;

 /**
  * Find replacement victim among candidates.
diff --git a/src/mem/cache/replacement_policies/dueling_rp.cc  
b/src/mem/cache/replacement_policies/dueling_rp.cc

index e691141..3565017 100644
--- a/src/mem/cache/replacement_policies/dueling_rp.cc
+++ b/src/mem/cache/replacement_policies/dueling_rp.cc
@@ -54,6 +54,16 @@
 }

 void
+Dueling::touch(const std::shared_ptr& replacement_data,
+const PacketPtr pkt)
+{
+std::shared_ptr casted_replacement_data =
+std::static_pointer_cast(replacement_data);
+replPolicyA->touch(casted_replacement_data->replDataA, pkt);
+replPolicyB->touch(casted_replacement_data->replDataB, pkt);
+}
+
+void
 Dueling::touch(const std::shared_ptr& replacement_data)  
const

 {
 std::shared_ptr casted_replacement_data =
@@ -63,6 +73,22 @@
 }

 void
+Dueling::reset(const std::shared_ptr& replacement_data,
+const PacketPtr pkt)
+{
+std::shared_ptr casted_replacement_data =
+std::static_pointer_cast(replacement_data);
+replPolicyA->reset(casted_replacement_data->replDataA, pkt);
+replPolicyB->reset(casted_replacement_data->replDataB, pkt);
+
+// A miss in a set is a sample to the duel. A call to this function
+// implies in the replacement of an entry, which was either caused by
+// a miss, an external invalidation, or the initialization of the table
+// entry (when warming up)
+ 
duelingMonitor.sample(static_cast(casted_replacement_data.get()));

+}
+
+void
 Dueling::reset(const std::shared_ptr& replacement_data)  
const

 {
 std::shared_ptr casted_replacement_data =
diff --git a/src/mem/cache/replacement_policies/dueling_rp.hh  
b/src/mem/cache/replacement_policies/dueling_rp.hh

index 0c96ca7..314042e 100644
--- a/src/mem/cache/replacement_policies/dueling_rp.hh
+++ b/src/mem/cache/replacement_policies/dueling_rp.hh
@@ -97,8 +97,12 @@

 void invalidate(const std::shared_ptr&  
replacement_data)
  
override;

+void touch(const std::shared_ptr& replacement_data,
+const PacketPtr pkt) override;
 void touch(const std::shared_ptr& replacement_data)  
const
   
override;

+void reset(const std::shared_ptr& replacement_data,
+const PacketPtr pkt) override;
 void reset(const std::shared_ptr& replacement_data)  
const
   

[gem5-dev] Change in gem5/gem5[develop]: mem-cache: Allow sending packet information to replacement policy

2020-11-27 Thread Daniel Carvalho (Gerrit) via gem5-dev
Daniel Carvalho has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/38117 )



Change subject: mem-cache: Allow sending packet information to replacement  
policy

..

mem-cache: Allow sending packet information to replacement policy

Some replacement policies can use information such as address or
PC to improve their re-reference prediction.

Change-Id: I412eee09efa2f3511ca1ece76fc2732509df4745
Signed-off-by: Daniel R. Carvalho 
---
M src/mem/cache/replacement_policies/base.hh
M src/mem/cache/replacement_policies/dueling_rp.cc
M src/mem/cache/replacement_policies/dueling_rp.hh
M src/mem/cache/tags/base_set_assoc.hh
M src/mem/cache/tags/sector_tags.cc
5 files changed, 50 insertions(+), 7 deletions(-)



diff --git a/src/mem/cache/replacement_policies/base.hh  
b/src/mem/cache/replacement_policies/base.hh

index 7d09a4a..f873926 100644
--- a/src/mem/cache/replacement_policies/base.hh
+++ b/src/mem/cache/replacement_policies/base.hh
@@ -34,6 +34,7 @@
 #include 

 #include "mem/cache/replacement_policies/replaceable_entry.hh"
+#include "mem/packet.hh"
 #include "params/BaseReplacementPolicy.hh"
 #include "sim/sim_object.hh"

@@ -112,17 +113,29 @@
  * Update replacement data.
  *
  * @param replacement_data Replacement data to be touched.
+ * @param pkt Packet that generated this access.
  */
 virtual void touch(const std::shared_ptr&
-replacement_data) const =  
0;

+replacement_data, const PacketPtr pkt)
+{
+touch(replacement_data);
+}
+virtual void touch(const std::shared_ptr&
+replacement_data) const = 0;

 /**
  * Reset replacement data. Used when it's holder is inserted/validated.
  *
  * @param replacement_data Replacement data to be reset.
+ * @param pkt Packet that generated this access.
  */
 virtual void reset(const std::shared_ptr&
-replacement_data) const =  
0;

+replacement_data, const PacketPtr pkt)
+{
+reset(replacement_data);
+}
+virtual void reset(const std::shared_ptr&
+replacement_data) const = 0;

 /**
  * Find replacement victim among candidates.
diff --git a/src/mem/cache/replacement_policies/dueling_rp.cc  
b/src/mem/cache/replacement_policies/dueling_rp.cc

index f3cce39..3e2e604 100644
--- a/src/mem/cache/replacement_policies/dueling_rp.cc
+++ b/src/mem/cache/replacement_policies/dueling_rp.cc
@@ -53,6 +53,16 @@
 }

 void
+Dueling::touch(const std::shared_ptr& replacement_data,
+const PacketPtr pkt)
+{
+std::shared_ptr casted_replacement_data =
+std::static_pointer_cast(replacement_data);
+replPolicyA->touch(casted_replacement_data->replDataA, pkt);
+replPolicyB->touch(casted_replacement_data->replDataB, pkt);
+}
+
+void
 Dueling::touch(const std::shared_ptr& replacement_data)  
const

 {
 std::shared_ptr casted_replacement_data =
@@ -62,6 +72,22 @@
 }

 void
+Dueling::reset(const std::shared_ptr& replacement_data,
+const PacketPtr pkt)
+{
+std::shared_ptr casted_replacement_data =
+std::static_pointer_cast(replacement_data);
+replPolicyA->reset(casted_replacement_data->replDataA, pkt);
+replPolicyB->reset(casted_replacement_data->replDataB, pkt);
+
+// A miss in a set is a sample to the duel. A call to this function
+// implies in the replacement of an entry, which was either caused by
+// a miss, an external invalidation, or the initialization of the table
+// entry (when warming up)
+ 
duelingMonitor.sample(static_cast(casted_replacement_data.get()));

+}
+
+void
 Dueling::reset(const std::shared_ptr& replacement_data)  
const

 {
 std::shared_ptr casted_replacement_data =
diff --git a/src/mem/cache/replacement_policies/dueling_rp.hh  
b/src/mem/cache/replacement_policies/dueling_rp.hh

index 0bd0d95..3077744 100644
--- a/src/mem/cache/replacement_policies/dueling_rp.hh
+++ b/src/mem/cache/replacement_policies/dueling_rp.hh
@@ -97,8 +97,12 @@

 void invalidate(const std::shared_ptr&  
replacement_data)
  
override;

+void touch(const std::shared_ptr& replacement_data,
+const PacketPtr pkt) override;
 void touch(const std::shared_ptr& replacement_data)  
const
   
override;

+void reset(const std::shared_ptr& replacement_data,
+const PacketPtr pkt) override;
 void reset(const std::shared_ptr& replacement_data)  
const
   
override;

 ReplaceableEntry* getVictim(
diff --git a/src/mem/cache/tags/base_set_assoc.hh  
b/src/mem/cache/tags/base_set_assoc.hh

index 07e19a5..38baa6d 100644
--- a/src/mem/cache/tags/base_set_assoc.hh
+++ b/src/me