From a8ea70dac6592b63cf957acd33a938189f1712af Mon Sep 17 00:00:00 2001 From: Steve Reinhardt Date: Fri, 29 Jan 2010 20:29:18 -0800 Subject: ruby: Calculate system total memory capacity in Python rather than in RubySystem object. --- configs/example/memtest-ruby.py | 6 +++++- src/mem/ruby/system/RubySystem.py | 1 + src/mem/ruby/system/System.cc | 18 ++++++------------ 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/configs/example/memtest-ruby.py b/configs/example/memtest-ruby.py index a520754fb..c2045ff2d 100644 --- a/configs/example/memtest-ruby.py +++ b/configs/example/memtest-ruby.py @@ -127,10 +127,14 @@ for cpu in cpus: network = SimpleNetwork(topology = makeCrossbar(l1_cntrl_nodes + \ dir_cntrl_nodes)) +mem_size_mb = sum([int(dir_cntrl.directory.size_mb) \ + for dir_cntrl in dir_cntrl_nodes]) + system.ruby = RubySystem(network = network, profiler = RubyProfiler(), tracer = RubyTracer(), - debug = RubyDebug()) + debug = RubyDebug(), + mem_size_mb = mem_size_mb) # ----------------------- diff --git a/src/mem/ruby/system/RubySystem.py b/src/mem/ruby/system/RubySystem.py index 2c1d3d789..2e3b7f871 100644 --- a/src/mem/ruby/system/RubySystem.py +++ b/src/mem/ruby/system/RubySystem.py @@ -11,6 +11,7 @@ class RubySystem(SimObject): freq_mhz = Param.Int(3000, "default frequency for the system"); block_size_bytes = Param.Int(64, "default cache block size; must be a power of two"); + mem_size_mb = Param.Int(""); network = Param.RubyNetwork("") debug = Param.RubyDebug("the default debug object") profiler = Param.RubyProfiler(""); diff --git a/src/mem/ruby/system/System.cc b/src/mem/ruby/system/System.cc index 0f5cae026..e27b03041 100644 --- a/src/mem/ruby/system/System.cc +++ b/src/mem/ruby/system/System.cc @@ -94,9 +94,14 @@ RubySystem::RubySystem(const Params *p) m_randomization = p->randomization; m_tech_nm = p->tech_nm; m_freq_mhz = p->freq_mhz; + m_block_size_bytes = p->block_size_bytes; assert(is_power_of_2(m_block_size_bytes)); m_block_size_bits = log_int(m_block_size_bytes); + + m_memory_size_bytes = (uint64_t)p->mem_size_mb * 1024 * 1024; + m_memory_size_bits = log_int(m_memory_size_bytes); + m_network_ptr = p->network; g_debug_ptr = p->debug; m_profiler_ptr = p->profiler; @@ -104,23 +109,12 @@ RubySystem::RubySystem(const Params *p) g_system_ptr = this; m_mem_vec_ptr = new MemoryVector; + m_mem_vec_ptr->setSize(m_memory_size_bytes); } void RubySystem::init() { - // calculate system-wide parameters - m_memory_size_bytes = 0; - DirectoryMemory* prev = NULL; - for (map< string, DirectoryMemory*>::const_iterator it = m_directories.begin(); - it != m_directories.end(); it++) { - if (prev != NULL) - assert((*it).second->getSize() == prev->getSize()); // must be equal for proper address mapping - m_memory_size_bytes += (*it).second->getSize(); - prev = (*it).second; - } - m_mem_vec_ptr->setSize(m_memory_size_bytes); - m_memory_size_bits = log_int(m_memory_size_bytes); } -- cgit v1.2.3