From 12daaed84a44920968adb6b16bd558561bd18801 Mon Sep 17 00:00:00 2001 From: Brad Beckmann Date: Fri, 29 Jan 2010 20:29:19 -0800 Subject: [PATCH] ruby: Added clock to ruby system As a first step to migrate ruby to the M5 eventqueue, added a clock variable to the ruby system. --- configs/example/memtest-ruby.py | 3 ++- src/mem/ruby/eventqueue/RubyEventQueue.cc | 5 ++--- src/mem/ruby/eventqueue/RubyEventQueue.hh | 5 +++-- src/mem/ruby/system/RubySystem.py | 2 +- src/mem/ruby/system/System.cc | 7 ++++--- src/mem/ruby/system/System.hh | 3 +-- 6 files changed, 13 insertions(+), 12 deletions(-) diff --git a/configs/example/memtest-ruby.py b/configs/example/memtest-ruby.py index 8c7923512..844acefb4 100644 --- a/configs/example/memtest-ruby.py +++ b/configs/example/memtest-ruby.py @@ -158,7 +158,8 @@ network = SimpleNetwork(topology = makeCrossbar(l1_cntrl_nodes + \ mem_size_mb = sum([int(dir_cntrl.directory.size_mb) \ for dir_cntrl in dir_cntrl_nodes]) -system.ruby = RubySystem(network = network, +system.ruby = RubySystem(clock = '1GHz', + network = network, profiler = RubyProfiler(), tracer = RubyTracer(), debug = RubyDebug(), diff --git a/src/mem/ruby/eventqueue/RubyEventQueue.cc b/src/mem/ruby/eventqueue/RubyEventQueue.cc index 271f8f137..8e9b7b18d 100644 --- a/src/mem/ruby/eventqueue/RubyEventQueue.cc +++ b/src/mem/ruby/eventqueue/RubyEventQueue.cc @@ -40,9 +40,8 @@ // Class public method definitions -RubyEventQueue theEventQueue; - -RubyEventQueue::RubyEventQueue() +RubyEventQueue::RubyEventQueue(Tick _clock) + : m_clock(_clock) { m_prio_heap_ptr = NULL; init(); diff --git a/src/mem/ruby/eventqueue/RubyEventQueue.hh b/src/mem/ruby/eventqueue/RubyEventQueue.hh index fe7bc2833..8bd74a36e 100644 --- a/src/mem/ruby/eventqueue/RubyEventQueue.hh +++ b/src/mem/ruby/eventqueue/RubyEventQueue.hh @@ -70,14 +70,14 @@ class RubyEventQueueNode; class RubyEventQueue { public: // Constructors - RubyEventQueue(); + RubyEventQueue(Tick clock); // Destructor ~RubyEventQueue(); // Public Methods - Time getTime() const { return m_globalTime; } + Time getTime() const { return curTick/m_clock; } void scheduleEvent(Consumer* consumer, Time timeDelta) { scheduleEventAbsolute(consumer, timeDelta + m_globalTime); } void scheduleEventAbsolute(Consumer* consumer, Time timeAbs); void triggerEvents(Time t); // called to handle all events <= time t @@ -96,6 +96,7 @@ private: RubyEventQueue& operator=(const RubyEventQueue& obj); // Data Members (m_ prefix) + Tick m_clock; PrioHeap* m_prio_heap_ptr; Time m_globalTime; Time m_timeOfLastRecovery; diff --git a/src/mem/ruby/system/RubySystem.py b/src/mem/ruby/system/RubySystem.py index 2e3b7f871..21443cbd8 100644 --- a/src/mem/ruby/system/RubySystem.py +++ b/src/mem/ruby/system/RubySystem.py @@ -8,7 +8,7 @@ class RubySystem(SimObject): "insert random delays on message enqueue times"); tech_nm = Param.Int(45, "device size used to calculate latency and area information"); - freq_mhz = Param.Int(3000, "default frequency for the system"); + clock = Param.Clock('1GHz', "") block_size_bytes = Param.Int(64, "default cache block size; must be a power of two"); mem_size_mb = Param.Int(""); diff --git a/src/mem/ruby/system/System.cc b/src/mem/ruby/system/System.cc index e27b03041..18404bd71 100644 --- a/src/mem/ruby/system/System.cc +++ b/src/mem/ruby/system/System.cc @@ -60,7 +60,7 @@ int RubySystem::m_random_seed; bool RubySystem::m_randomization; int RubySystem::m_tech_nm; -int RubySystem::m_freq_mhz; +Tick RubySystem::m_clock; int RubySystem::m_block_size_bytes; int RubySystem::m_block_size_bits; uint64 RubySystem::m_memory_size_bytes; @@ -93,7 +93,7 @@ RubySystem::RubySystem(const Params *p) srandom(m_random_seed); m_randomization = p->randomization; m_tech_nm = p->tech_nm; - m_freq_mhz = p->freq_mhz; + m_clock = p->clock; m_block_size_bytes = p->block_size_bytes; assert(is_power_of_2(m_block_size_bytes)); @@ -107,6 +107,7 @@ RubySystem::RubySystem(const Params *p) m_profiler_ptr = p->profiler; m_tracer_ptr = p->tracer; + g_eventQueue_ptr = new RubyEventQueue(m_clock); g_system_ptr = this; m_mem_vec_ptr = new MemoryVector; m_mem_vec_ptr->setSize(m_memory_size_bytes); @@ -129,7 +130,7 @@ void RubySystem::printSystemConfig(ostream & out) out << " random_seed: " << m_random_seed << endl; out << " randomization: " << m_randomization << endl; out << " tech_nm: " << m_tech_nm << endl; - out << " freq_mhz: " << m_freq_mhz << endl; + out << " cycle_period: " << m_clock << endl; out << " block_size_bytes: " << m_block_size_bytes << endl; out << " block_size_bits: " << m_block_size_bits << endl; out << " memory_size_bytes: " << m_memory_size_bytes << endl; diff --git a/src/mem/ruby/system/System.hh b/src/mem/ruby/system/System.hh index 6f0261888..3ef70df18 100644 --- a/src/mem/ruby/system/System.hh +++ b/src/mem/ruby/system/System.hh @@ -97,7 +97,6 @@ public: static int getRandomSeed() { return m_random_seed; } static int getRandomization() { return m_randomization; } static int getTechNm() { return m_tech_nm; } - static int getFreqMhz() { return m_freq_mhz; } static int getBlockSizeBytes() { return m_block_size_bytes; } static int getBlockSizeBits() { return m_block_size_bits; } static uint64 getMemorySizeBytes() { return m_memory_size_bytes; } @@ -164,7 +163,7 @@ private: static int m_random_seed; static bool m_randomization; static int m_tech_nm; - static int m_freq_mhz; + static Tick m_clock; static int m_block_size_bytes; static int m_block_size_bits; static uint64 m_memory_size_bytes; -- 2.30.2