misc: Merge branch v24.0 stable into v24.1 release staging
For reasons I do not fully understand the prefetch code was out-of-sync between develop and stable.
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
# Verion 24.1
|
# Version 24.1
|
||||||
|
|
||||||
## User facing changes
|
## User facing changes
|
||||||
|
|
||||||
@@ -32,6 +32,13 @@ The complete list of changes are:
|
|||||||
* You may no longer call `RubySystem::getBlockSizeBytes()`, `RubySystem::getBlockSizeBits()`, etc. You must have a pointer to the `RubySystem` you are a part of and call, for example, `ruby_system->getBlockSizeBytes()`.
|
* You may no longer call `RubySystem::getBlockSizeBytes()`, `RubySystem::getBlockSizeBits()`, etc. You must have a pointer to the `RubySystem` you are a part of and call, for example, `ruby_system->getBlockSizeBytes()`.
|
||||||
* `MessageBuffer::enqueue()` has two new parameters indicating if the `RubySystem` has randomization and warmup enabled. You must explicitly specify these values now.
|
* `MessageBuffer::enqueue()` has two new parameters indicating if the `RubySystem` has randomization and warmup enabled. You must explicitly specify these values now.
|
||||||
|
|
||||||
|
# Version 24.0.0.1
|
||||||
|
|
||||||
|
**[HOTFIX]** Fixes a bug affecting the use of the `IndirectMemoryPrefetcher`, `SignaturePathPrefetcher`, `SignaturePathPrefetcherV2`, `STeMSPrefetcher`, and `PIFPrefetcher` SimObjects.
|
||||||
|
Use of these resulted in gem5 crashing a gem5 crash with the error message "Need is_secure arg".
|
||||||
|
|
||||||
|
The fix to this introduced to the gem5 develop branch in the <https://github.com/gem5/gem5/pull/1374> Pull Request.
|
||||||
|
The commits in this PR were cherry-picked on the gem5 stable branch to create the v24.0.0.1 hotfix release.
|
||||||
|
|
||||||
# Version 24.0
|
# Version 24.0
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ PROJECT_NAME = gem5
|
|||||||
# This could be handy for archiving the generated documentation or
|
# This could be handy for archiving the generated documentation or
|
||||||
# if some version control system is used.
|
# if some version control system is used.
|
||||||
|
|
||||||
PROJECT_NUMBER = [DEVELOP-FOR-v24.1]
|
PROJECT_NUMBER = v24.0.0.1
|
||||||
|
|
||||||
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
|
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
|
||||||
# base path where the generated documentation will be put.
|
# base path where the generated documentation will be put.
|
||||||
|
|||||||
@@ -32,6 +32,6 @@ namespace gem5
|
|||||||
/**
|
/**
|
||||||
* @ingroup api_base_utils
|
* @ingroup api_base_utils
|
||||||
*/
|
*/
|
||||||
const char *gem5Version = "DEVELOP-FOR-24.1";
|
const char *gem5Version = "24.0.0.1";
|
||||||
|
|
||||||
} // namespace gem5
|
} // namespace gem5
|
||||||
|
|||||||
100
src/mem/cache/prefetch/associative_set.hh
vendored
Normal file
100
src/mem/cache/prefetch/associative_set.hh
vendored
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2018 Metempsy Technology Consulting
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are
|
||||||
|
* met: redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer;
|
||||||
|
* redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution;
|
||||||
|
* neither the name of the copyright holders nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived from
|
||||||
|
* this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __CACHE_PREFETCH_ASSOCIATIVE_SET_HH__
|
||||||
|
#define __CACHE_PREFETCH_ASSOCIATIVE_SET_HH__
|
||||||
|
|
||||||
|
#include <type_traits>
|
||||||
|
|
||||||
|
#include "base/cache/associative_cache.hh"
|
||||||
|
#include "mem/cache/replacement_policies/base.hh"
|
||||||
|
#include "mem/cache/tags/indexing_policies/base.hh"
|
||||||
|
#include "mem/cache/tags/tagged_entry.hh"
|
||||||
|
|
||||||
|
namespace gem5
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Associative container based on the previosuly defined Entry type
|
||||||
|
* Each element is indexed by a key of type Addr, an additional
|
||||||
|
* bool value is used as an additional tag data of the entry.
|
||||||
|
*/
|
||||||
|
template<class Entry>
|
||||||
|
class AssociativeSet : public AssociativeCache<Entry>
|
||||||
|
{
|
||||||
|
static_assert(std::is_base_of_v<TaggedEntry, Entry>,
|
||||||
|
"Entry must derive from TaggedEntry");
|
||||||
|
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Public constructor
|
||||||
|
* @param name Name of the cache
|
||||||
|
* @param num_entries total number of entries of the container, the number
|
||||||
|
* of sets can be calculated dividing this balue by the 'assoc'
|
||||||
|
* value
|
||||||
|
* @param assoc number of elements in each associative set
|
||||||
|
* @param rpl_policy replacement policy
|
||||||
|
* @param idx_policy indexing policy
|
||||||
|
* @param init_val initial value of the elements of the set
|
||||||
|
*/
|
||||||
|
AssociativeSet(const char *name, const size_t num_entries,
|
||||||
|
const size_t associativity_,
|
||||||
|
replacement_policy::Base *repl_policy,
|
||||||
|
BaseIndexingPolicy *indexing_policy,
|
||||||
|
Entry const &init_val = Entry());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find an entry within the set
|
||||||
|
* @param addr key element
|
||||||
|
* @param is_secure tag element
|
||||||
|
* @return returns a pointer to the wanted entry or nullptr if it does not
|
||||||
|
* exist.
|
||||||
|
*/
|
||||||
|
Entry* findEntry(Addr addr, bool is_secure) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicate that an entry has just been inserted
|
||||||
|
* @param addr key of the container
|
||||||
|
* @param is_secure tag component of the container
|
||||||
|
* @param entry pointer to the container entry to be inserted
|
||||||
|
*/
|
||||||
|
void insertEntry(Addr addr, bool is_secure, Entry* entry);
|
||||||
|
|
||||||
|
private:
|
||||||
|
// The following APIs are excluded since they lack the secure bit
|
||||||
|
using AssociativeCache<Entry>::getTag;
|
||||||
|
using AssociativeCache<Entry>::accessEntryByAddr;
|
||||||
|
using AssociativeCache<Entry>::findEntry;
|
||||||
|
using AssociativeCache<Entry>::insertEntry;
|
||||||
|
using AssociativeCache<Entry>::replPolicy;
|
||||||
|
using AssociativeCache<Entry>::indexingPolicy;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace gem5
|
||||||
|
|
||||||
|
#endif//__CACHE_PREFETCH_ASSOCIATIVE_SET_HH__
|
||||||
2
src/mem/cache/prefetch/indirect_memory.hh
vendored
2
src/mem/cache/prefetch/indirect_memory.hh
vendored
@@ -124,7 +124,7 @@ class IndirectMemory : public Queued
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
/** Prefetch table */
|
/** Prefetch table */
|
||||||
AssociativeCache<PrefetchTableEntry> prefetchTable;
|
AssociativeSet<PrefetchTableEntry> prefetchTable;
|
||||||
|
|
||||||
/** Indirect Pattern Detector entrt */
|
/** Indirect Pattern Detector entrt */
|
||||||
struct IndirectPatternDetectorEntry : public TaggedEntry
|
struct IndirectPatternDetectorEntry : public TaggedEntry
|
||||||
|
|||||||
2
src/mem/cache/prefetch/pif.hh
vendored
2
src/mem/cache/prefetch/pif.hh
vendored
@@ -150,7 +150,7 @@ class PIF : public Queued
|
|||||||
* The index table is a small cache-like structure that facilitates
|
* The index table is a small cache-like structure that facilitates
|
||||||
* fast search of the history buffer.
|
* fast search of the history buffer.
|
||||||
*/
|
*/
|
||||||
AssociativeCache<IndexEntry> index;
|
AssociativeSet<IndexEntry> index;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A Stream Address Buffer (SAB) tracks a window of consecutive
|
* A Stream Address Buffer (SAB) tracks a window of consecutive
|
||||||
|
|||||||
2
src/mem/cache/prefetch/signature_path.hh
vendored
2
src/mem/cache/prefetch/signature_path.hh
vendored
@@ -154,7 +154,7 @@ class SignaturePath : public Queued
|
|||||||
};
|
};
|
||||||
|
|
||||||
/** Pattern table */
|
/** Pattern table */
|
||||||
AssociativeCache<PatternEntry> patternTable;
|
AssociativeSet<PatternEntry> patternTable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generates a new signature from an existing one and a new stride
|
* Generates a new signature from an existing one and a new stride
|
||||||
|
|||||||
2
src/mem/cache/prefetch/signature_path_v2.hh
vendored
2
src/mem/cache/prefetch/signature_path_v2.hh
vendored
@@ -70,7 +70,7 @@ class SignaturePathV2 : public SignaturePath
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
/** Global History Register */
|
/** Global History Register */
|
||||||
AssociativeCache<GlobalHistoryEntry> globalHistoryRegister;
|
AssociativeSet<GlobalHistoryEntry> globalHistoryRegister;
|
||||||
|
|
||||||
double calculateLookaheadConfidence(PatternEntry const &sig,
|
double calculateLookaheadConfidence(PatternEntry const &sig,
|
||||||
PatternStrideEntry const &lookahead) const override;
|
PatternStrideEntry const &lookahead) const override;
|
||||||
|
|||||||
@@ -222,6 +222,7 @@ STeMS::reconstructSequence(
|
|||||||
|
|
||||||
// Now query the PST with the PC of each RMOB entry
|
// Now query the PST with the PC of each RMOB entry
|
||||||
idx = 0;
|
idx = 0;
|
||||||
|
constexpr bool is_secure = false;
|
||||||
for (auto it = rmob_it; it != rmob.end() && (idx < reconstructionEntries);
|
for (auto it = rmob_it; it != rmob.end() && (idx < reconstructionEntries);
|
||||||
it++) {
|
it++) {
|
||||||
auto pst_entry = patternSequenceTable.findEntry(
|
auto pst_entry = patternSequenceTable.findEntry(
|
||||||
|
|||||||
@@ -157,7 +157,7 @@ class STeMS : public Queued
|
|||||||
/** Active Generation Table (AGT) */
|
/** Active Generation Table (AGT) */
|
||||||
AssociativeCache<ActiveGenerationTableEntry> activeGenerationTable;
|
AssociativeCache<ActiveGenerationTableEntry> activeGenerationTable;
|
||||||
/** Pattern Sequence Table (PST) */
|
/** Pattern Sequence Table (PST) */
|
||||||
AssociativeCache<ActiveGenerationTableEntry> patternSequenceTable;
|
AssociativeSet<ActiveGenerationTableEntry> patternSequenceTable;
|
||||||
|
|
||||||
/** Data type of the Region Miss Order Buffer entry */
|
/** Data type of the Region Miss Order Buffer entry */
|
||||||
struct RegionMissOrderBufferEntry
|
struct RegionMissOrderBufferEntry
|
||||||
|
|||||||
Reference in New Issue
Block a user