diff options
author | Rekai Gonzalez-Alberquilla <rekai.gonzalezalberquilla@arm.com> | 2017-03-01 13:49:08 +0000 |
---|---|---|
committer | Giacomo Gabrielli <giacomo.gabrielli@arm.com> | 2018-12-03 14:23:56 +0000 |
commit | 9af1214ffe48178c0dadfb874fd62bd0ff2e0f31 (patch) | |
tree | 1b4dd7edf77791c81f40f6d919829495eb80db93 /src/cpu/o3/lsq_impl.hh | |
parent | b5cc34d767410e98f54f2955bb274f0f8c3708e4 (diff) | |
download | gem5-9af1214ffe48178c0dadfb874fd62bd0ff2e0f31.tar.xz |
cpu: Change raw pointers to STL Containers
This patch changes two members from being raw pointers to being STL
containers. The reason behind, other than cleanlyness and arguable OO
best practices is that containers have more intronspections capabilities
than naked pointers do, as the size is known.
Using STL containers adds little overhead and eases the automation of
process during debugging (gdb).
Change-Id: I4d9d3eedafa8b5e50ac512ea93b458a4200229f2
Signed-off-by: Giacomo Gabrielli <giacomo.gabrielli@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/13126
Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
Maintainer: Jason Lowe-Power <jason@lowepower.com>
Diffstat (limited to 'src/cpu/o3/lsq_impl.hh')
-rw-r--r-- | src/cpu/o3/lsq_impl.hh | 41 |
1 files changed, 11 insertions, 30 deletions
diff --git a/src/cpu/o3/lsq_impl.hh b/src/cpu/o3/lsq_impl.hh index 83de8ddff..36bc17bc8 100644 --- a/src/cpu/o3/lsq_impl.hh +++ b/src/cpu/o3/lsq_impl.hh @@ -61,8 +61,13 @@ using namespace std; template <class Impl> LSQ<Impl>::LSQ(O3CPU *cpu_ptr, IEW *iew_ptr, DerivO3CPUParams *params) : cpu(cpu_ptr), iewStage(iew_ptr), + lsqPolicy(readLSQPolicy(params->smtLSQPolicy)), LQEntries(params->LQEntries), SQEntries(params->SQEntries), + maxLQEntries(maxLSQAllocation(lsqPolicy, LQEntries, params->numThreads, + params->smtLSQThreshold)), + maxSQEntries(maxLSQAllocation(lsqPolicy, SQEntries, params->numThreads, + params->smtLSQThreshold)), numThreads(params->numThreads) { assert(numThreads > 0 && numThreads <= Impl::MaxThreads); @@ -70,42 +75,19 @@ LSQ<Impl>::LSQ(O3CPU *cpu_ptr, IEW *iew_ptr, DerivO3CPUParams *params) //**********************************************/ //************ Handle SMT Parameters ***********/ //**********************************************/ - std::string policy = params->smtLSQPolicy; - - //Convert string to lowercase - std::transform(policy.begin(), policy.end(), policy.begin(), - (int(*)(int)) tolower); //Figure out fetch policy - if (policy == "dynamic") { - lsqPolicy = Dynamic; - - maxLQEntries = LQEntries; - maxSQEntries = SQEntries; - + if (lsqPolicy == Dynamic) { DPRINTF(LSQ, "LSQ sharing policy set to Dynamic\n"); - } else if (policy == "partitioned") { - lsqPolicy = Partitioned; - - //@todo:make work if part_amt doesnt divide evenly. - maxLQEntries = LQEntries / numThreads; - maxSQEntries = SQEntries / numThreads; - + } else if (lsqPolicy == Partitioned) { DPRINTF(Fetch, "LSQ sharing policy set to Partitioned: " "%i entries per LQ | %i entries per SQ\n", maxLQEntries,maxSQEntries); - } else if (policy == "threshold") { - lsqPolicy = Threshold; + } else if (lsqPolicy == Threshold) { assert(params->smtLSQThreshold > LQEntries); assert(params->smtLSQThreshold > SQEntries); - //Divide up by threshold amount - //@todo: Should threads check the max and the total - //amount of the LSQ - maxLQEntries = params->smtLSQThreshold; - maxSQEntries = params->smtLSQThreshold; - DPRINTF(LSQ, "LSQ sharing policy set to Threshold: " "%i entries per LQ | %i entries per SQ\n", maxLQEntries,maxSQEntries); @@ -114,11 +96,10 @@ LSQ<Impl>::LSQ(O3CPU *cpu_ptr, IEW *iew_ptr, DerivO3CPUParams *params) "Partitioned, Threshold"); } - //Initialize LSQs - thread = new LSQUnit[numThreads]; + thread.reserve(numThreads); for (ThreadID tid = 0; tid < numThreads; tid++) { - thread[tid].init(cpu, iew_ptr, params, this, - maxLQEntries, maxSQEntries, tid); + thread.emplace_back(maxLQEntries, maxSQEntries); + thread[tid].init(cpu, iew_ptr, params, this, tid); thread[tid].setDcachePort(&cpu_ptr->getDataPort()); } } |