35#include "params/BRRIPRP.hh"
40namespace replacement_policy
44 :
Base(
p), numRRPVBits(
p.num_bits), hitPriority(
p.hit_priority),
53 std::shared_ptr<BRRIPReplData> casted_replacement_data =
54 std::static_pointer_cast<BRRIPReplData>(replacement_data);
57 casted_replacement_data->valid =
false;
61BRRIP::touch(
const std::shared_ptr<ReplacementData>& replacement_data)
const
63 std::shared_ptr<BRRIPReplData> casted_replacement_data =
64 std::static_pointer_cast<BRRIPReplData>(replacement_data);
70 casted_replacement_data->rrpv.reset();
72 casted_replacement_data->rrpv--;
61BRRIP::touch(
const std::shared_ptr<ReplacementData>& replacement_data)
const {
…}
77BRRIP::reset(
const std::shared_ptr<ReplacementData>& replacement_data)
const
79 std::shared_ptr<BRRIPReplData> casted_replacement_data =
80 std::static_pointer_cast<BRRIPReplData>(replacement_data);
85 casted_replacement_data->rrpv.saturate();
86 if (
rng->random<
unsigned>(1, 100) <=
btp) {
87 casted_replacement_data->rrpv--;
91 casted_replacement_data->valid =
true;
77BRRIP::reset(
const std::shared_ptr<ReplacementData>& replacement_data)
const {
…}
98 assert(candidates.size() > 0);
104 int victim_RRPV = std::static_pointer_cast<BRRIPReplData>(
108 for (
const auto& candidate : candidates) {
109 std::shared_ptr<BRRIPReplData> candidate_repl_data =
110 std::static_pointer_cast<BRRIPReplData>(
111 candidate->replacementData);
114 if (!candidate_repl_data->valid) {
119 int candidate_RRPV = candidate_repl_data->rrpv;
120 if (candidate_RRPV > victim_RRPV) {
122 victim_RRPV = candidate_RRPV;
128 int diff = std::static_pointer_cast<BRRIPReplData>(
134 for (
const auto& candidate : candidates) {
135 std::static_pointer_cast<BRRIPReplData>(
136 candidate->replacementData)->rrpv += diff;
143std::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.
#define fatal_if(cond,...)
Conditional fatal macro that checks the supplied condition and only causes a fatal error if the condi...
Copyright (c) 2024 Arm Limited All rights reserved.
BRRIP-specific implementation of replacement data.