gem5 v24.1.0.1
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
random_rp.cc
Go to the documentation of this file.
1
30
31#include <cassert>
32#include <memory>
33
34#include "params/RandomRP.hh"
35
36namespace gem5
37{
38
39namespace replacement_policy
40{
41
43 : Base(p)
44{
45}
46
47void
48Random::invalidate(const std::shared_ptr<ReplacementData>& replacement_data)
49{
50 // Unprioritize replacement data victimization
51 std::static_pointer_cast<RandomReplData>(
52 replacement_data)->valid = false;
53}
54
55void
56Random::touch(const std::shared_ptr<ReplacementData>& replacement_data) const
57{
58}
59
60void
61Random::reset(const std::shared_ptr<ReplacementData>& replacement_data) const
62{
63 // Unprioritize replacement data victimization
64 std::static_pointer_cast<RandomReplData>(
65 replacement_data)->valid = true;
66}
67
70{
71 // There must be at least one replacement candidate
72 assert(candidates.size() > 0);
73
74 // Choose one candidate at random
75 ReplaceableEntry* victim = candidates[rng->random<unsigned>(0,
76 candidates.size() - 1)];
77
78 // Visit all candidates to search for an invalid entry. If one is found,
79 // its eviction is prioritized
80 for (const auto& candidate : candidates) {
81 if (!std::static_pointer_cast<RandomReplData>(
82 candidate->replacementData)->valid) {
83 victim = candidate;
84 break;
85 }
86 }
87
88 return victim;
89}
90
91std::shared_ptr<ReplacementData>
93{
94 return std::shared_ptr<ReplacementData>(new RandomReplData());
95}
96
97} // namespace replacement_policy
98} // namespace gem5
A replaceable entry is a basic entry in a 2d table-like structure that needs to have replacement func...
A common base class of cache replacement policy objects.
Definition base.hh:55
std::shared_ptr< ReplacementData > instantiateEntry() override
Instantiate a replacement data entry.
Definition random_rp.cc:92
void invalidate(const std::shared_ptr< ReplacementData > &replacement_data) override
Invalidate replacement data to set it as the next probable victim.
Definition random_rp.cc:48
gem5::Random::RandomPtr rng
Definition random_rp.hh:52
void touch(const std::shared_ptr< ReplacementData > &replacement_data) const override
Touch an entry to update its replacement data.
Definition random_rp.cc:56
void reset(const std::shared_ptr< ReplacementData > &replacement_data) const override
Reset replacement data.
Definition random_rp.cc:61
ReplaceableEntry * getVictim(const ReplacementCandidates &candidates) const override
Find replacement victim at random.
Definition random_rp.cc:69
STL vector class.
Definition stl.hh:37
Random()=delete
Bitfield< 0 > p
Copyright (c) 2024 Arm Limited All rights reserved.
Definition binary32.hh:36
Copyright (c) 2018-2020 Inria All rights reserved.
Random-specific implementation of replacement data.
Definition random_rp.hh:56

Generated on Mon Jan 13 2025 04:28:38 for gem5 by doxygen 1.9.8