stride.hh (13426:d2b0e9ec67f1) stride.hh (13427:72a3afac3e78)
1/*
1/*
2 * Copyright (c) 2018 Inria
2 * Copyright (c) 2012-2013, 2015 ARM Limited
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software
9 * licensed hereunder. You may use the software subject to the license

--- 23 unchanged lines hidden (view full) ---

33 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
34 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
35 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
36 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
37 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
38 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39 *
40 * Authors: Ron Dreslinski
3 * Copyright (c) 2012-2013, 2015 ARM Limited
4 * All rights reserved
5 *
6 * The license below extends only to copyright in the software and shall
7 * not be construed as granting a license to any other intellectual
8 * property including but not limited to intellectual property relating
9 * to a hardware implementation of the functionality of the software
10 * licensed hereunder. You may use the software subject to the license

--- 23 unchanged lines hidden (view full) ---

34 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
35 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
36 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
37 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
38 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
39 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
40 *
41 * Authors: Ron Dreslinski
42 * Daniel Carvalho
41 */
42
43/**
44 * @file
45 * Describes a strided prefetcher.
46 */
47
48#ifndef __MEM_CACHE_PREFETCH_STRIDE_HH__
49#define __MEM_CACHE_PREFETCH_STRIDE_HH__
50
51#include <string>
52#include <unordered_map>
53#include <vector>
54
55#include "base/types.hh"
56#include "mem/cache/prefetch/queued.hh"
43 */
44
45/**
46 * @file
47 * Describes a strided prefetcher.
48 */
49
50#ifndef __MEM_CACHE_PREFETCH_STRIDE_HH__
51#define __MEM_CACHE_PREFETCH_STRIDE_HH__
52
53#include <string>
54#include <unordered_map>
55#include <vector>
56
57#include "base/types.hh"
58#include "mem/cache/prefetch/queued.hh"
59#include "mem/cache/replacement_policies/replaceable_entry.hh"
57#include "mem/packet.hh"
58
60#include "mem/packet.hh"
61
62class BaseReplacementPolicy;
59struct StridePrefetcherParams;
60
61class StridePrefetcher : public QueuedPrefetcher
62{
63 protected:
64 const int maxConf;
65 const int threshConf;
66 const int minConf;
67 const int startConf;
68
69 const int pcTableAssoc;
70 const int pcTableSets;
71
72 const bool useMasterId;
73
74 const int degree;
75
63struct StridePrefetcherParams;
64
65class StridePrefetcher : public QueuedPrefetcher
66{
67 protected:
68 const int maxConf;
69 const int threshConf;
70 const int minConf;
71 const int startConf;
72
73 const int pcTableAssoc;
74 const int pcTableSets;
75
76 const bool useMasterId;
77
78 const int degree;
79
76 struct StrideEntry
80 /** Replacement policy used in the PC tables. */
81 BaseReplacementPolicy* replacementPolicy;
82
83 struct StrideEntry : public ReplaceableEntry
77 {
78 /** Default constructor */
79 StrideEntry();
80
81 /** Invalidate the entry */
82 void invalidate();
83
84 Addr instAddr;

--- 7 unchanged lines hidden (view full) ---

92 {
93 public:
94 /**
95 * Default constructor. Create a table with given parameters.
96 *
97 * @param assoc Associativity of the table.
98 * @param sets Number of sets in the table.
99 * @param name Name of the prefetcher.
84 {
85 /** Default constructor */
86 StrideEntry();
87
88 /** Invalidate the entry */
89 void invalidate();
90
91 Addr instAddr;

--- 7 unchanged lines hidden (view full) ---

99 {
100 public:
101 /**
102 * Default constructor. Create a table with given parameters.
103 *
104 * @param assoc Associativity of the table.
105 * @param sets Number of sets in the table.
106 * @param name Name of the prefetcher.
107 * @param replacementPolicy Replacement policy used by the table.
100 */
108 */
101 PCTable(int assoc, int sets, const std::string name);
109 PCTable(int assoc, int sets, const std::string name,
110 BaseReplacementPolicy* replacementPolicy);
102
103 /**
104 * Default destructor.
105 */
106 ~PCTable();
107
108 /**
109 * Search for an entry in the pc table.

--- 9 unchanged lines hidden (view full) ---

119 *
120 * @param pc The PC value.
121 * @return The victimized entry.
122 */
123 StrideEntry* findVictim(Addr pc);
124
125 private:
126 const std::string name() {return _name; }
111
112 /**
113 * Default destructor.
114 */
115 ~PCTable();
116
117 /**
118 * Search for an entry in the pc table.

--- 9 unchanged lines hidden (view full) ---

128 *
129 * @param pc The PC value.
130 * @return The victimized entry.
131 */
132 StrideEntry* findVictim(Addr pc);
133
134 private:
135 const std::string name() {return _name; }
127 const int pcTableAssoc;
128 const int pcTableSets;
129 const std::string _name;
130 std::vector<std::vector<StrideEntry>> entries;
131
132 /**
136 const int pcTableSets;
137 const std::string _name;
138 std::vector<std::vector<StrideEntry>> entries;
139
140 /**
141 * Replacement policy used by StridePrefetcher.
142 */
143 BaseReplacementPolicy* replacementPolicy;
144
145 /**
133 * PC hashing function to index sets in the table.
134 *
135 * @param pc The PC value.
136 * @return The set to which this PC maps.
137 */
138 Addr pcHash(Addr pc) const;
139 };
140 std::unordered_map<int, PCTable> pcTables;

--- 26 unchanged lines hidden ---
146 * PC hashing function to index sets in the table.
147 *
148 * @param pc The PC value.
149 * @return The set to which this PC maps.
150 */
151 Addr pcHash(Addr pc) const;
152 };
153 std::unordered_map<int, PCTable> pcTables;

--- 26 unchanged lines hidden ---