summaryrefslogtreecommitdiff
path: root/src/mem/cache/prefetch/Prefetcher.py
diff options
context:
space:
mode:
authorJavier Bueno <javier.bueno@metempsy.com>2018-12-13 12:08:35 +0100
committerJavier Bueno Hedo <javier.bueno@metempsy.com>2019-01-16 16:05:44 +0000
commit60995026786d7e8000d379c0f47c7ee36b9c2444 (patch)
tree0033d936bbf05dc5ea427aa738b03bc481750788 /src/mem/cache/prefetch/Prefetcher.py
parent3a3ad05aca43fb4dae1a0a9785549dcfc385af0d (diff)
downloadgem5-60995026786d7e8000d379c0f47c7ee36b9c2444.tar.xz
mem-cache: Access Map Pattern Matching Prefetcher
Implementation of the Access Map Pattern Matching prefetcher Based in the description of the following paper: Access map pattern matching for high performance data cache prefetch. Ishii, Y., Inaba, M., & Hiraki, K. (2011). Journal of Instruction-Level Parallelism, 13, 1-24. Change-Id: I0d4b7f7afc2ab4938bdd8755bfed26e26a28530c Reviewed-on: https://gem5-review.googlesource.com/c/15096 Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com> Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com>
Diffstat (limited to 'src/mem/cache/prefetch/Prefetcher.py')
-rw-r--r--src/mem/cache/prefetch/Prefetcher.py34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/mem/cache/prefetch/Prefetcher.py b/src/mem/cache/prefetch/Prefetcher.py
index a868a2583..3d9c66565 100644
--- a/src/mem/cache/prefetch/Prefetcher.py
+++ b/src/mem/cache/prefetch/Prefetcher.py
@@ -179,3 +179,37 @@ class SignaturePathPrefetcher(QueuedPrefetcher):
"Minimum confidence to issue prefetches")
lookahead_confidence_threshold = Param.Float(0.75,
"Minimum confidence to continue exploring lookahead entries")
+
+class AccessMapPatternMatchingPrefetcher(QueuedPrefetcher):
+ type = 'AccessMapPatternMatchingPrefetcher'
+ cxx_class = 'AccessMapPatternMatchingPrefetcher'
+ cxx_header = "mem/cache/prefetch/access_map_pattern_matching.hh"
+
+ start_degree = Param.Unsigned(4,
+ "Initial degree (Maximum number of prefetches generated")
+ hot_zone_size = Param.MemorySize("2kB", "Memory covered by a hot zone")
+ access_map_table_entries = Param.MemorySize("256",
+ "Number of entries in the access map table")
+ access_map_table_assoc = Param.Unsigned(8,
+ "Associativity of the access map table")
+ access_map_table_indexing_policy = Param.BaseIndexingPolicy(
+ SetAssociative(entry_size = 1, assoc = Parent.access_map_table_assoc,
+ size = Parent.access_map_table_entries),
+ "Indexing policy of the access map table")
+ access_map_table_replacement_policy = Param.BaseReplacementPolicy(LRURP(),
+ "Replacement policy of the access map table")
+ high_coverage_threshold = Param.Float(0.25,
+ "A prefetch coverage factor bigger than this is considered high")
+ low_coverage_threshold = Param.Float(0.125,
+ "A prefetch coverage factor smaller than this is considered low")
+ high_accuracy_threshold = Param.Float(0.5,
+ "A prefetch accuracy factor bigger than this is considered high")
+ low_accuracy_threshold = Param.Float(0.25,
+ "A prefetch accuracy factor smaller than this is considered low")
+ high_cache_hit_threshold = Param.Float(0.875,
+ "A cache hit ratio bigger than this is considered high")
+ low_cache_hit_threshold = Param.Float(0.75,
+ "A cache hit ratio smaller than this is considered low")
+ epoch_cycles = Param.Cycles(256000, "Cycles in an epoch period")
+ offchip_memory_latency = Param.Latency("30ns",
+ "Memory latency used to compute the required memory bandwidth")