Daniel Carvalho has uploaded this change for review. (
https://gem5-review.googlesource.com/c/public/gem5/+/47399 )
Change subject: mem-cache: Make WeightedLRU inherit from LRU
......................................................................
mem-cache: Make WeightedLRU inherit from LRU
WeightedLRU adds occupancy information to LRU, so remove the
duplicated code.
Change-Id: Ifec19ea59fb411a5ed7a891e8957b1ab93cdbf05
Signed-off-by: Daniel R. Carvalho <oda...@yahoo.com.br>
---
M src/mem/cache/replacement_policies/ReplacementPolicies.py
M src/mem/cache/replacement_policies/weighted_lru_rp.cc
M src/mem/cache/replacement_policies/weighted_lru_rp.hh
3 files changed, 12 insertions(+), 68 deletions(-)
diff --git a/src/mem/cache/replacement_policies/ReplacementPolicies.py
b/src/mem/cache/replacement_policies/ReplacementPolicies.py
index 34c8a1e..11de0b2 100644
--- a/src/mem/cache/replacement_policies/ReplacementPolicies.py
+++ b/src/mem/cache/replacement_policies/ReplacementPolicies.py
@@ -120,7 +120,7 @@
cxx_header = "mem/cache/replacement_policies/tree_plru_rp.hh"
num_leaves = Param.Int(Parent.assoc, "Number of leaves in each tree")
-class WeightedLRURP(BaseReplacementPolicy):
+class WeightedLRURP(LRURP):
type = "WeightedLRURP"
cxx_class = "replacement_policy::WeightedLRU"
cxx_header = "mem/cache/replacement_policies/weighted_lru_rp.hh"
diff --git a/src/mem/cache/replacement_policies/weighted_lru_rp.cc
b/src/mem/cache/replacement_policies/weighted_lru_rp.cc
index 3900014..334a128 100644
--- a/src/mem/cache/replacement_policies/weighted_lru_rp.cc
+++ b/src/mem/cache/replacement_policies/weighted_lru_rp.cc
@@ -43,24 +43,15 @@
{
WeightedLRU::WeightedLRU(const Params &p)
- : Base(p)
+ : LRU(p)
{
}
void
-WeightedLRU::touch(const std::shared_ptr<ReplacementData>&
- replacement_data) const
+WeightedLRU::touch(const std::shared_ptr<ReplacementData>&
replacement_data,
+ int occupancy) const
{
- std::static_pointer_cast<WeightedLRUReplData>(replacement_data)->
- last_touch_tick =
curTick();
-}
-
-void
-WeightedLRU::touch(const std::shared_ptr<ReplacementData>&
- replacement_data, int occupancy) const
-{
- std::static_pointer_cast<WeightedLRUReplData>(replacement_data)->
- last_touch_tick =
curTick();
+ LRU::touch(replacement_data);
std::static_pointer_cast<WeightedLRUReplData>(replacement_data)->
last_occ_ptr = occupancy;
}
@@ -90,8 +81,8 @@
} else if (candidate_replacement_data->last_occ_ptr ==
victim_replacement_data->last_occ_ptr) {
// Evict the block with a smaller tick.
- Tick time = candidate_replacement_data->last_touch_tick;
- if (time < victim_replacement_data->last_touch_tick) {
+ Tick time = candidate_replacement_data->lastTouchTick;
+ if (time < victim_replacement_data->lastTouchTick) {
victim = candidate;
}
}
@@ -105,22 +96,4 @@
return std::shared_ptr<ReplacementData>(new WeightedLRUReplData);
}
-void
-WeightedLRU::reset(const std::shared_ptr<ReplacementData>&
- replacement_data) const
-{
- // Set last touch timestamp
- std::static_pointer_cast<WeightedLRUReplData>(
- replacement_data)->last_touch_tick = curTick();
-}
-
-void
-WeightedLRU::invalidate(
- const std::shared_ptr<ReplacementData>& replacement_data)
-{
- // Reset last touch timestamp
- std::static_pointer_cast<WeightedLRUReplData>(
- replacement_data)->last_touch_tick = Tick(0);
-}
-
} // namespace replacement_policy
diff --git a/src/mem/cache/replacement_policies/weighted_lru_rp.hh
b/src/mem/cache/replacement_policies/weighted_lru_rp.hh
index 82b31d9..2279683 100644
--- a/src/mem/cache/replacement_policies/weighted_lru_rp.hh
+++ b/src/mem/cache/replacement_policies/weighted_lru_rp.hh
@@ -37,7 +37,7 @@
#include <memory>
#include "base/types.hh"
-#include "mem/cache/replacement_policies/base.hh"
+#include "mem/cache/replacement_policies/lru_rp.hh"
struct WeightedLRURPParams;
@@ -45,59 +45,30 @@
namespace replacement_policy
{
-class WeightedLRU : public Base
+class WeightedLRU : public LRU
{
protected:
/** Weighted LRU implementation of replacement data. */
- struct WeightedLRUReplData : ReplacementData
+ struct WeightedLRUReplData : LRUReplData
{
/** pointer for last occupancy */
int last_occ_ptr;
- /** Tick on which the entry was last touched. */
- Tick last_touch_tick;
-
/**
* Default constructor. Invalidate data.
*/
- WeightedLRUReplData() : ReplacementData(),
- last_occ_ptr(0), last_touch_tick(0) {}
+ WeightedLRUReplData() : LRUReplData(), last_occ_ptr(0) {}
};
public:
typedef WeightedLRURPParams Params;
WeightedLRU(const Params &p);
~WeightedLRU() = default;
- /**
- * Invalidate replacement data to set it as the next probable victim.
- * Sets its last touch tick as the starting tick.
- *
- * @param replacement_data Replacement data to be invalidated.
- */
- void invalidate(const std::shared_ptr<ReplacementData>&
replacement_data)
-
override;
-
- /**
- * Touch an entry to update its replacement data.
- * Sets its last touch tick as the current tick.
- *
- * @param replacement_data Replacement data to be touched.
- */
- void touch(const std::shared_ptr<ReplacementData>&
- replacement_data) const override;
+ using Base::touch;
void touch(const std::shared_ptr<ReplacementData>& replacement_data,
int occupancy) const;
/**
- * Reset replacement data. Used when an entry is inserted.
- * Sets its last touch tick as the current tick.
- *
- * @param replacement_data Replacement data to be reset.
- */
- void reset(const std::shared_ptr<ReplacementData>& replacement_data)
const
-
override;
-
- /**
* Instantiate a replacement data entry.
*
* @return A shared pointer to the new replacement data.
--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/47399
To unsubscribe, or for help writing mail filters, visit
https://gem5-review.googlesource.com/settings
Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: Ifec19ea59fb411a5ed7a891e8957b1ab93cdbf05
Gerrit-Change-Number: 47399
Gerrit-PatchSet: 1
Gerrit-Owner: Daniel Carvalho <oda...@yahoo.com.br>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s