ruby: reset timing after cache warm up

Ruby system was recently converted to a clocked object. Such objects maintain
state related to the time that has passed so far. During the cache warmup, Ruby
system changes its own time and the global time. Later on, the global time is
restored. So Ruby system also needs to reset its own time.
This commit is contained in:
Nilay Vaish
2012-10-15 17:27:15 -05:00
parent b6bd4f34b4
commit 6a65fafa52
2 changed files with 16 additions and 2 deletions

View File

@@ -354,8 +354,9 @@ RubySystem::startup()
Tick curtick_original = curTick();
// save the event queue head
Event* eventq_head = eventq->replaceHead(NULL);
// set curTick to 0
// set curTick to 0 and reset Ruby System's clock
curTick(0);
resetClock();
// Schedule an event to start cache warmup
enqueueRubyEvent(curTick());
@@ -369,8 +370,9 @@ RubySystem::startup()
m_memory_controller->reset();
// Restore eventq head
eventq_head = eventq->replaceHead(eventq_head);
// Restore curTick
// Restore curTick and Ruby System's clock
curTick(curtick_original);
resetClock();
}
}

View File

@@ -119,6 +119,18 @@ class ClockedObject : public SimObject
*/
virtual ~ClockedObject() { }
/**
* Reset the object's clock using the current global tick value. Likely
* to be used only when the global clock is reset. Currently, this done
* only when Ruby is done warming up the memory system.
*/
void resetClock() const
{
Cycles elapsedCycles(divCeil(curTick(), clock));
cycle = elapsedCycles;
tick = elapsedCycles * clock;
}
public:
/**