summaryrefslogtreecommitdiff
path: root/src/mem/cache/prefetch/base.hh
diff options
context:
space:
mode:
authorMitch Hayenga ext:(%2C%20Amin%20Farmahini%20%3Caminfar%40gmail.com%3E) <mitch.hayenga+gem5@gmail.com>2014-01-29 23:21:25 -0600
committerMitch Hayenga ext:(%2C%20Amin%20Farmahini%20%3Caminfar%40gmail.com%3E) <mitch.hayenga+gem5@gmail.com>2014-01-29 23:21:25 -0600
commit95735e10e7ea85320ee39c15a4132eece8417af4 (patch)
tree370863ea1bb2413937c03218e0b59aecc7a76fbe /src/mem/cache/prefetch/base.hh
parent32cc2ea8b9173863adeaa03f4d7ee1635acfdef7 (diff)
downloadgem5-95735e10e7ea85320ee39c15a4132eece8417af4.tar.xz
mem: prefetcher: add options, support for unaligned addresses
This patch extends the classic prefetcher to work on non-block aligned addresses. Because the existing prefetchers in gem5 mask off the lower address bits of cache accesses, many predictable strides fail to be detected. For example, if a load were to stride by 48 bytes, with 64 byte cachelines, the current stride based prefetcher would see an access pattern of 0, 64, 64, 128, 192.... Thus not detecting a constant stride pattern. This patch fixes this, by training the prefetcher on access and not masking off the lower address bits. It also adds the following configuration options: 1) Training/prefetching only on cache misses, 2) Training/prefetching only on data acceses, 3) Optionally tagging prefetches with a PC address. #3 allows prefetchers to train off of prefetch requests in systems with multiple cache levels and PC-based prefetchers present at multiple levels. It also effectively allows a pipelining of prefetch requests (like in POWER4) across multiple levels of cache hierarchy. Improves performance on my gem5 configuration by 4.3% for SPECINT and 4.7% for SPECFP (geomean).
Diffstat (limited to 'src/mem/cache/prefetch/base.hh')
-rw-r--r--src/mem/cache/prefetch/base.hh20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/mem/cache/prefetch/base.hh b/src/mem/cache/prefetch/base.hh
index 953852c38..fc0dd0b36 100644
--- a/src/mem/cache/prefetch/base.hh
+++ b/src/mem/cache/prefetch/base.hh
@@ -89,18 +89,28 @@ class BasePrefetcher : public ClockedObject
const Cycles latency;
/** The number of prefetches to issue */
- unsigned degree;
+ const unsigned degree;
/** If patterns should be found per context id */
- bool useMasterId;
+ const bool useMasterId;
/** Do we prefetch across page boundaries. */
- bool pageStop;
+ const bool pageStop;
/** Do we remove prefetches with later times than a new miss.*/
- bool serialSquash;
+ const bool serialSquash;
/** Do we prefetch on only data reads, or on inst reads as well. */
- bool onlyData;
+ const bool onlyData;
+
+ /** Do we trigger/train prefetch on cache misses only, or all accesses. */
+ const bool onMissOnly;
+
+ /** Do we trigger/train prefetch on reads only, or all accesses. */
+ const bool onReadOnly;
+
+ /** Do we tag prefetch's with PC addresses, allowing lower pc-based
+ prefetchers to prefetch on prefetch requests */
+ const bool onPrefetch;
/** System we belong to */
System* system;