indirect_memory.hh (13772:31b71dadc472) | indirect_memory.hh (13963:94555f0223ba) |
---|---|
1/** 2 * Copyright (c) 2018 Metempsy Technology Consulting 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer; --- 29 unchanged lines hidden (view full) --- 38 * (pp. 178-190). ACM. 39 */ 40 41#ifndef __MEM_CACHE_PREFETCH_INDIRECT_MEMORY_HH__ 42#define __MEM_CACHE_PREFETCH_INDIRECT_MEMORY_HH__ 43 44#include <vector> 45 | 1/** 2 * Copyright (c) 2018 Metempsy Technology Consulting 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer; --- 29 unchanged lines hidden (view full) --- 38 * (pp. 178-190). ACM. 39 */ 40 41#ifndef __MEM_CACHE_PREFETCH_INDIRECT_MEMORY_HH__ 42#define __MEM_CACHE_PREFETCH_INDIRECT_MEMORY_HH__ 43 44#include <vector> 45 |
46#include "base/sat_counter.hh" |
|
46#include "mem/cache/prefetch/associative_set.hh" 47#include "mem/cache/prefetch/queued.hh" 48 49struct IndirectMemoryPrefetcherParams; 50 51class IndirectMemoryPrefetcher : public QueuedPrefetcher 52{ 53 /** Maximum number of prefetches generated per event */ 54 const unsigned int maxPrefetchDistance; 55 /** Shift values considered */ 56 const std::vector<int> shiftValues; 57 /** Counter threshold to start prefetching */ 58 const unsigned int prefetchThreshold; | 47#include "mem/cache/prefetch/associative_set.hh" 48#include "mem/cache/prefetch/queued.hh" 49 50struct IndirectMemoryPrefetcherParams; 51 52class IndirectMemoryPrefetcher : public QueuedPrefetcher 53{ 54 /** Maximum number of prefetches generated per event */ 55 const unsigned int maxPrefetchDistance; 56 /** Shift values considered */ 57 const std::vector<int> shiftValues; 58 /** Counter threshold to start prefetching */ 59 const unsigned int prefetchThreshold; |
59 /** Maximum value of the confidence indirectCounter */ 60 const unsigned int maxIndirectCounterValue; | |
61 /** streamCounter value to trigger the streaming prefetcher */ 62 const int streamCounterThreshold; 63 /** Number of prefetches generated when using the streaming prefetcher */ 64 const int streamingDistance; 65 66 /** Prefetch Table Entry */ 67 struct PrefetchTableEntry : public TaggedEntry 68 { --- 12 unchanged lines hidden (view full) --- 81 bool enabled; 82 /** Current index value */ 83 int64_t index; 84 /** BaseAddr detected */ 85 Addr baseAddr; 86 /** Shift detected */ 87 int shift; 88 /** Confidence counter of the indirect fields */ | 60 /** streamCounter value to trigger the streaming prefetcher */ 61 const int streamCounterThreshold; 62 /** Number of prefetches generated when using the streaming prefetcher */ 63 const int streamingDistance; 64 65 /** Prefetch Table Entry */ 66 struct PrefetchTableEntry : public TaggedEntry 67 { --- 12 unchanged lines hidden (view full) --- 80 bool enabled; 81 /** Current index value */ 82 int64_t index; 83 /** BaseAddr detected */ 84 Addr baseAddr; 85 /** Shift detected */ 86 int shift; 87 /** Confidence counter of the indirect fields */ |
89 int indirectCounter; | 88 SatCounter indirectCounter; |
90 /** 91 * This variable is set to indicate that there has been at least one 92 * match with the current index value. This information is later used 93 * when a new index is updated. If there were no increases in the 94 * indirectCounter, the counter is decremented. 95 */ 96 bool increasedIndirectCounter; 97 | 89 /** 90 * This variable is set to indicate that there has been at least one 91 * match with the current index value. This information is later used 92 * when a new index is updated. If there were no increases in the 93 * indirectCounter, the counter is decremented. 94 */ 95 bool increasedIndirectCounter; 96 |
98 PrefetchTableEntry() : TaggedEntry(), address(0), secure(false), 99 streamCounter(0), enabled(false), index(0), baseAddr(0), shift(0), 100 indirectCounter(0), increasedIndirectCounter(false) | 97 PrefetchTableEntry(unsigned indirect_counter_bits) 98 : TaggedEntry(), address(0), secure(false), streamCounter(0), 99 enabled(false), index(0), baseAddr(0), shift(0), 100 indirectCounter(indirect_counter_bits), 101 increasedIndirectCounter(false) |
101 {} 102 103 void reset() override { 104 address = 0; 105 secure = false; 106 streamCounter = 0; 107 enabled = false; 108 index = 0; 109 baseAddr = 0; 110 shift = 0; | 102 {} 103 104 void reset() override { 105 address = 0; 106 secure = false; 107 streamCounter = 0; 108 enabled = false; 109 index = 0; 110 baseAddr = 0; 111 shift = 0; |
111 indirectCounter = 0; | 112 indirectCounter.reset(); |
112 increasedIndirectCounter = false; 113 } 114 }; 115 /** Prefetch table */ 116 AssociativeSet<PrefetchTableEntry> prefetchTable; 117 118 /** Indirect Pattern Detector entrt */ 119 struct IndirectPatternDetectorEntry : public TaggedEntry --- 75 unchanged lines hidden --- | 113 increasedIndirectCounter = false; 114 } 115 }; 116 /** Prefetch table */ 117 AssociativeSet<PrefetchTableEntry> prefetchTable; 118 119 /** Indirect Pattern Detector entrt */ 120 struct IndirectPatternDetectorEntry : public TaggedEntry --- 75 unchanged lines hidden --- |