cpu: Print progress messages in Trace CPU
This change adds the ability to print a message at intervals of committed instruction count to indicate progress in the trace replay. Change-Id: I8363502354c42bfc52936d2627986598b63a5797 Reviewed-by: Rekai Gonzalez Alberquilla <rekai.gonzalezalberquilla@arm.com> Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/2321 Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
This commit is contained in:
parent
e2805f825a
commit
48333e7e3f
3 changed files with 36 additions and 4 deletions
|
@ -80,3 +80,10 @@ class TraceCPU(BaseCPU):
|
|||
# false by default
|
||||
enableEarlyExit = Param.Bool(False, "Exit when any one Trace CPU "\
|
||||
"completes execution")
|
||||
|
||||
# If progress msg interval is set to a non-zero value, it is treated as
|
||||
# the interval of committed instructions at which an info message is
|
||||
# printed.
|
||||
progressMsgInterval = Param.Unsigned(0, "Interval of committed "\
|
||||
"instructions at which to print a"\
|
||||
" progress msg")
|
||||
|
|
|
@ -62,13 +62,15 @@ TraceCPU::TraceCPU(TraceCPUParams *params)
|
|||
oneTraceComplete(false),
|
||||
traceOffset(0),
|
||||
execCompleteEvent(nullptr),
|
||||
enableEarlyExit(params->enableEarlyExit)
|
||||
enableEarlyExit(params->enableEarlyExit),
|
||||
progressMsgInterval(params->progressMsgInterval),
|
||||
progressMsgThreshold(params->progressMsgInterval)
|
||||
{
|
||||
// Increment static counter for number of Trace CPUs.
|
||||
++TraceCPU::numTraceCPUs;
|
||||
|
||||
// Check that the python parameters for sizes of ROB, store buffer and load
|
||||
// buffer do not overflow the corresponding C++ variables.
|
||||
// Check that the python parameters for sizes of ROB, store buffer and
|
||||
// load buffer do not overflow the corresponding C++ variables.
|
||||
fatal_if(params->sizeROB > UINT16_MAX, "ROB size set to %d exceeds the "
|
||||
"max. value of %d.\n", params->sizeROB, UINT16_MAX);
|
||||
fatal_if(params->sizeStoreBuffer > UINT16_MAX, "ROB size set to %d "
|
||||
|
@ -90,6 +92,16 @@ TraceCPUParams::create()
|
|||
return new TraceCPU(this);
|
||||
}
|
||||
|
||||
void
|
||||
TraceCPU::updateNumOps(uint64_t rob_num)
|
||||
{
|
||||
numOps = rob_num;
|
||||
if (progressMsgInterval != 0 && numOps.value() >= progressMsgThreshold) {
|
||||
inform("%s: %i insts committed\n", name(), progressMsgThreshold);
|
||||
progressMsgThreshold += progressMsgInterval;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
TraceCPU::takeOverFrom(BaseCPU *oldCPU)
|
||||
{
|
||||
|
|
|
@ -177,7 +177,7 @@ class TraceCPU : public BaseCPU
|
|||
* Set the no. of ops when elastic data generator completes executing a
|
||||
* node.
|
||||
*/
|
||||
void updateNumOps(uint64_t rob_num) { numOps = rob_num; }
|
||||
void updateNumOps(uint64_t rob_num);
|
||||
|
||||
/* Pure virtual function in BaseCPU. Do nothing. */
|
||||
void wakeup(ThreadID tid = 0)
|
||||
|
@ -1122,6 +1122,19 @@ class TraceCPU : public BaseCPU
|
|||
*/
|
||||
const bool enableEarlyExit;
|
||||
|
||||
/**
|
||||
* Interval of committed instructions specified by the user at which a
|
||||
* progress info message is printed
|
||||
*/
|
||||
const uint64_t progressMsgInterval;
|
||||
|
||||
/*
|
||||
* The progress msg threshold is kept updated to the next multiple of the
|
||||
* progress msg interval. As soon as the threshold is reached, an info
|
||||
* message is printed.
|
||||
*/
|
||||
uint64_t progressMsgThreshold;
|
||||
|
||||
Stats::Scalar numSchedDcacheEvent;
|
||||
Stats::Scalar numSchedIcacheEvent;
|
||||
|
||||
|
|
Loading…
Reference in a new issue