From 3a3ad05aca43fb4dae1a0a9785549dcfc385af0d Mon Sep 17 00:00:00 2001 From: Javier Bueno Date: Thu, 29 Nov 2018 16:59:16 +0100 Subject: mem-cache: Signature Path Prefetcher Related paper: Lookahead Prefetching with Signature Path J Kim, PV Gratz, ALN Reddy The 2nd Data Prefetching Championship (DPC2), 2015 Change-Id: I2319be2fa409f955f65e1bf1e1bb2d6d9a4fea11 Reviewed-on: https://gem5-review.googlesource.com/c/14737 Reviewed-by: Nikos Nikoleris Reviewed-by: Daniel Carvalho Maintainer: Nikos Nikoleris --- src/mem/cache/prefetch/Prefetcher.py | 40 ++++++++++++++++++++++++++++++++++++ 1 file changed, 40 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 df547ed42..a868a2583 100644 --- a/src/mem/cache/prefetch/Prefetcher.py +++ b/src/mem/cache/prefetch/Prefetcher.py @@ -40,6 +40,7 @@ # Mitch Hayenga from ClockedObject import ClockedObject +from IndexingPolicies import * from m5.SimObject import * from m5.params import * from m5.proxy import * @@ -139,3 +140,42 @@ class TaggedPrefetcher(QueuedPrefetcher): cxx_header = "mem/cache/prefetch/tagged.hh" degree = Param.Int(2, "Number of prefetches to generate") + +class SignaturePathPrefetcher(QueuedPrefetcher): + type = 'SignaturePathPrefetcher' + cxx_class = 'SignaturePathPrefetcher' + cxx_header = "mem/cache/prefetch/signature_path.hh" + + signature_shift = Param.UInt8(3, + "Number of bits to shift when calculating a new signature"); + signature_bits = Param.UInt16(12, + "Size of the signature, in bits"); + signature_table_entries = Param.MemorySize("1024", + "Number of entries of the signature table") + signature_table_assoc = Param.Unsigned(2, + "Associativity of the signature table") + signature_table_indexing_policy = Param.BaseIndexingPolicy( + SetAssociative(entry_size = 1, assoc = Parent.signature_table_assoc, + size = Parent.signature_table_entries), + "Indexing policy of the signature table") + signature_table_replacement_policy = Param.BaseReplacementPolicy(LRURP(), + "Replacement policy of the signature table") + + max_counter_value = Param.UInt8(7, "Maximum pattern counter value") + pattern_table_entries = Param.MemorySize("4096", + "Number of entries of the pattern table") + pattern_table_assoc = Param.Unsigned(1, + "Associativity of the pattern table") + strides_per_pattern_entry = Param.Unsigned(4, + "Number of strides stored in each pattern entry") + pattern_table_indexing_policy = Param.BaseIndexingPolicy( + SetAssociative(entry_size = 1, assoc = Parent.pattern_table_assoc, + size = Parent.pattern_table_entries), + "Indexing policy of the pattern table") + pattern_table_replacement_policy = Param.BaseReplacementPolicy(LRURP(), + "Replacement policy of the pattern table") + + prefetch_confidence_threshold = Param.Float(0.5, + "Minimum confidence to issue prefetches") + lookahead_confidence_threshold = Param.Float(0.75, + "Minimum confidence to continue exploring lookahead entries") -- cgit v1.2.3