40 #include "params/WeightedLRURP.hh" 48 WeightedLRURPParams::create()
55 replacement_data)
const 63 replacement_data,
int occupancy)
const 67 std::static_pointer_cast<WeightedLRUReplData>(replacement_data)->
68 last_occ_ptr = occupancy;
74 assert(candidates.size() > 0);
80 for (
const auto& candidate : candidates) {
82 std::shared_ptr<WeightedLRUReplData> candidate_replacement_data =
84 candidate->replacementData);
86 std::shared_ptr<WeightedLRUReplData> victim_replacement_data =
88 victim->replacementData);
90 if (candidate_replacement_data->last_occ_ptr <
91 victim_replacement_data->last_occ_ptr) {
93 }
else if (candidate_replacement_data->last_occ_ptr ==
94 victim_replacement_data->last_occ_ptr) {
97 if (time < victim_replacement_data->last_touch_tick) {
105 std::shared_ptr<ReplacementData>
113 replacement_data)
const 117 replacement_data)->last_touch_tick =
curTick();
122 replacement_data)
const 126 replacement_data)->last_touch_tick =
Tick(0);
BaseReplacementPolicyParams Params
Convenience typedef.
void invalidate(const std::shared_ptr< ReplacementData > &replacement_data) const override
Invalidate replacement data to set it as the next probable victim.
void touch(const std::shared_ptr< ReplacementData > &replacement_data) const override
Touch an entry to update its replacement data.
A common base class of cache replacement policy objects.
void reset(const std::shared_ptr< ReplacementData > &replacement_data) const override
Reset replacement data.
Tick curTick()
The current simulated tick.
ReplaceableEntry * getVictim(const ReplacementCandidates &candidates) const override
Find replacement victim using weight.
WeightedLRUPolicy(const Params *p)
uint64_t Tick
Tick count type.
Tick last_touch_tick
Tick on which the entry was last touched.
Weighted LRU implementation of replacement data.
A replaceable entry is a basic entry in a 2d table-like structure that needs to have replacement func...
std::shared_ptr< ReplacementData > instantiateEntry() override
Instantiate a replacement data entry.