36 #include "params/BRRIPRP.hh"
42 namespace replacement_policy
46 :
Base(
p), numRRPVBits(
p.num_bits), hitPriority(
p.hit_priority),
55 std::shared_ptr<BRRIPReplData> casted_replacement_data =
56 std::static_pointer_cast<BRRIPReplData>(replacement_data);
59 casted_replacement_data->valid =
false;
63 BRRIP::touch(
const std::shared_ptr<ReplacementData>& replacement_data)
const
65 std::shared_ptr<BRRIPReplData> casted_replacement_data =
66 std::static_pointer_cast<BRRIPReplData>(replacement_data);
72 casted_replacement_data->rrpv.reset();
74 casted_replacement_data->rrpv--;
79 BRRIP::reset(
const std::shared_ptr<ReplacementData>& replacement_data)
const
81 std::shared_ptr<BRRIPReplData> casted_replacement_data =
82 std::static_pointer_cast<BRRIPReplData>(replacement_data);
87 casted_replacement_data->rrpv.saturate();
89 casted_replacement_data->rrpv--;
93 casted_replacement_data->valid =
true;
100 assert(candidates.size() > 0);
106 int victim_RRPV = std::static_pointer_cast<BRRIPReplData>(
110 for (
const auto& candidate : candidates) {
111 std::shared_ptr<BRRIPReplData> candidate_repl_data =
112 std::static_pointer_cast<BRRIPReplData>(
113 candidate->replacementData);
116 if (!candidate_repl_data->valid) {
121 int candidate_RRPV = candidate_repl_data->rrpv;
122 if (candidate_RRPV > victim_RRPV) {
124 victim_RRPV = candidate_RRPV;
130 int diff = std::static_pointer_cast<BRRIPReplData>(
136 for (
const auto& candidate : candidates) {
137 std::static_pointer_cast<BRRIPReplData>(
138 candidate->replacementData)->rrpv += diff;
145 std::shared_ptr<ReplacementData>
Copyright (c) 2018-2020 Inria All rights reserved.
A replaceable entry is a basic entry in a 2d table-like structure that needs to have replacement func...
std::shared_ptr< replacement_policy::ReplacementData > replacementData
Replacement data associated to this entry.
ReplaceableEntry * getVictim(const ReplacementCandidates &candidates) const override
Find replacement victim using rrpv.
const unsigned numRRPVBits
Number of RRPV bits.
void invalidate(const std::shared_ptr< ReplacementData > &replacement_data) 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.
void reset(const std::shared_ptr< ReplacementData > &replacement_data) const override
Reset replacement data.
const bool hitPriority
The hit priority (HP) policy replaces entries that do not receive cache hits over any cache entry tha...
const unsigned btp
Bimodal throtle parameter.
std::shared_ptr< ReplacementData > instantiateEntry() override
Instantiate a replacement data entry.
A common base class of cache replacement policy objects.
BaseReplacementPolicyParams Params
std::enable_if_t< std::is_integral_v< T >, T > random()
Use the SFINAE idiom to choose an implementation based on whether the type is integral or floating po...
#define fatal_if(cond,...)
Conditional fatal macro that checks the supplied condition and only causes a fatal error if the condi...
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
GEM5_DEPRECATED_NAMESPACE(GuestABI, guest_abi)
BRRIP-specific implementation of replacement data.