38 #include "params/WeightedLRURP.hh" 46 WeightedLRURPParams::create()
53 replacement_data)
const 61 replacement_data,
int occupancy)
const 65 std::static_pointer_cast<WeightedLRUReplData>(replacement_data)->
66 last_occ_ptr = occupancy;
72 assert(candidates.size() > 0);
78 for (
const auto& candidate : candidates) {
80 std::shared_ptr<WeightedLRUReplData> candidate_replacement_data =
82 candidate->replacementData);
84 std::shared_ptr<WeightedLRUReplData> victim_replacement_data =
86 victim->replacementData);
88 if (candidate_replacement_data->last_occ_ptr <
89 victim_replacement_data->last_occ_ptr) {
91 }
else if (candidate_replacement_data->last_occ_ptr ==
92 victim_replacement_data->last_occ_ptr) {
95 if (time < victim_replacement_data->last_touch_tick) {
103 std::shared_ptr<ReplacementData>
111 replacement_data)
const 115 replacement_data)->last_touch_tick =
curTick();
120 replacement_data)
const 124 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.