It would be nice if you made this parameter a MemorySize type instead of Int.
On Sat, Dec 12, 2009 at 2:37 PM, Brad Beckmann <[email protected]> wrote: > # HG changeset patch > # User Brad Beckmann <[email protected]> > # Date 1260657435 28800 > # Node ID d5c731012d722a9b54373ed45600e9e978001ea9 > # Parent e657fd802abe54b28a19e2c851e8b3f700b10293 > ruby: Calculate system total memory capacity in Python > rather than in RubySystem object. > > diff -r e657fd802abe -r d5c731012d72 configs/example/memtest-ruby.py > --- a/configs/example/memtest-ruby.py Sat Dec 12 14:37:15 2009 -0800 > +++ b/configs/example/memtest-ruby.py Sat Dec 12 14:37:15 2009 -0800 > @@ -134,10 +134,13 @@ > network = SimpleNetwork(topology = makeCrossbar(l1_cntrl_nodes + \ > dir_cntrl_nodes)) > > +mem_size_mb = sum([int(dc.directory.size_mb) for dc in dc_nodes]) > + > system.ruby = RubySystem(network = network, > profiler = RubyProfiler(), > tracer = RubyTracer(), > - debug = RubyDebug()) > + debug = RubyDebug(), > + mem_size_mb = mem_size_mb) > > > # ----------------------- > diff -r e657fd802abe -r d5c731012d72 src/mem/ruby/system/RubySystem.py > --- a/src/mem/ruby/system/RubySystem.py Sat Dec 12 14:37:15 2009 -0800 > +++ b/src/mem/ruby/system/RubySystem.py Sat Dec 12 14:37:15 2009 -0800 > @@ -8,6 +8,7 @@ > tech_nm = Param.Int(45, ""); > freq_mhz = Param.Int(3000, ""); > block_size_bytes = Param.Int(64, ""); > + mem_size_mb = Param.Int(""); > network = Param.RubyNetwork("") > debug = Param.RubyDebug("") > profiler = Param.RubyProfiler(""); > diff -r e657fd802abe -r d5c731012d72 src/mem/ruby/system/System.cc > --- a/src/mem/ruby/system/System.cc Sat Dec 12 14:37:15 2009 -0800 > +++ b/src/mem/ruby/system/System.cc Sat Dec 12 14:37:15 2009 -0800 > @@ -94,9 +94,14 @@ > 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; > @@ -105,6 +110,7 @@ > //assert( g_debug_ptr != NULL); > g_system_ptr = this; > m_mem_vec_ptr = new MemoryVector; > + m_mem_vec_ptr->setSize(m_memory_size_bytes); > > /* object contruction is broken into two steps (Constructor and init) to > avoid cyclic dependencies > * e.g. a sequencer needs a pointer to a controller and a controller needs > a pointer to a sequencer > @@ -226,18 +232,6 @@ > > 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); > } > > > > _______________________________________________ > m5-dev mailing list > [email protected] > http://m5sim.org/mailman/listinfo/m5-dev > > _______________________________________________ m5-dev mailing list [email protected] http://m5sim.org/mailman/listinfo/m5-dev
