38 #include "params/WeightedLRURP.hh" 47 WeightedLRURPParams::create()
54 replacement_data)
const 62 replacement_data,
int occupancy)
const 66 std::static_pointer_cast<WeightedLRUReplData>(replacement_data)->
67 last_occ_ptr = occupancy;
73 assert(candidates.size() > 0);
79 for (
const auto& candidate : candidates) {
81 std::shared_ptr<WeightedLRUReplData> candidate_replacement_data =
83 candidate->replacementData);
85 std::shared_ptr<WeightedLRUReplData> victim_replacement_data =
87 victim->replacementData);
89 if (candidate_replacement_data->last_occ_ptr <
90 victim_replacement_data->last_occ_ptr) {
92 }
else if (candidate_replacement_data->last_occ_ptr ==
93 victim_replacement_data->last_occ_ptr) {
96 if (time < victim_replacement_data->last_touch_tick) {
104 std::shared_ptr<ReplacementData>
112 replacement_data)
const 116 replacement_data)->last_touch_tick =
curTick();
121 replacement_data)
const 125 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.