From 60995026786d7e8000d379c0f47c7ee36b9c2444 Mon Sep 17 00:00:00 2001 From: Javier Bueno Date: Thu, 13 Dec 2018 12:08:35 +0100 Subject: 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 Maintainer: Nikos Nikoleris --- src/mem/cache/prefetch/Prefetcher.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'src/mem/cache/prefetch/Prefetcher.py') 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") -- cgit v1.2.3