Sounds good. My todo list includes finishing up changes to tests. This includes unifying test scripts with the configs directory just as you suggest here (but I haven't started on that part). We should coordinate.
Nate > No, it is not absolutely necessary to duplicate these files. Both files use > many of the same parameters. However, they construct the memory systems in > different ways, so they are not complete duplicates. Actually it would be > great if we could remove the duplication not only between memtest.py and > memtest-ruby.py, but also remove the duplication between > configs/example/memtest-ruby.py and tests/configs/memtest-ruby.py. > > Once we unify the configuration systems, I'll try to do this as well. > > Brad > > > -----Original Message----- > From: [email protected] [mailto:[email protected]] On Behalf Of > nathan binkert > Sent: Wednesday, November 18, 2009 8:24 PM > To: M5 Developer List > Subject: Re: [m5-dev] changeset in m5: ruby: Ruby memtest python script. > > Is it necessary to duplicate this file? Can memtest.py not be > extended to do this? > > Nate > > On Wed, Nov 18, 2009 at 6:05 PM, Brad Beckmann <[email protected]> wrote: >> changeset 12da457d6e5c in /z/repo/m5 >> details: http://repo.m5sim.org/m5?cmd=changeset;node=12da457d6e5c >> description: >> ruby: Ruby memtest python script. >> >> diffstat: >> >> 1 file changed, 119 insertions(+) >> configs/example/memtest-ruby.py | 119 >> +++++++++++++++++++++++++++++++++++++++ >> >> diffs (123 lines): >> >> diff -r 98101a5f7ee4 -r 12da457d6e5c configs/example/memtest-ruby.py >> --- /dev/null Thu Jan 01 00:00:00 1970 +0000 >> +++ b/configs/example/memtest-ruby.py Wed Nov 18 13:55:57 2009 -0800 >> @@ -0,0 +1,119 @@ >> +# Copyright (c) 2006-2007 The Regents of The University of Michigan >> +# Copyright (c) 2009 Advanced Micro Devices, Inc. >> +# All rights reserved. >> +# >> +# Redistribution and use in source and binary forms, with or without >> +# modification, are permitted provided that the following conditions are >> +# met: redistributions of source code must retain the above copyright >> +# notice, this list of conditions and the following disclaimer; >> +# redistributions in binary form must reproduce the above copyright >> +# notice, this list of conditions and the following disclaimer in the >> +# documentation and/or other materials provided with the distribution; >> +# neither the name of the copyright holders nor the names of its >> +# contributors may be used to endorse or promote products derived from >> +# this software without specific prior written permission. >> +# >> +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS >> +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT >> +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR >> +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT >> +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, >> +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT >> +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, >> +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY >> +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >> +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE >> +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >> +# >> +# Authors: Ron Dreslinski >> +# Brad Beckmann >> + >> +import m5 >> +from m5.objects import * >> +from m5.defines import buildEnv >> +from m5.util import addToPath >> +import os, optparse, sys >> +addToPath('../common') >> +addToPath('../../tests/configs/') >> +import ruby_config >> + >> +parser = optparse.OptionParser() >> + >> +parser.add_option("-a", "--atomic", action="store_true", >> + help="Use atomic (non-timing) mode") >> +parser.add_option("-b", "--blocking", action="store_true", >> + help="Use blocking caches") >> +parser.add_option("-l", "--maxloads", metavar="N", default=0, >> + help="Stop after N loads") >> +parser.add_option("-m", "--maxtick", type="int", default=m5.MaxTick, >> + metavar="T", >> + help="Stop after T ticks") >> + >> +parser.add_option("-t", "--testers", type="int", metavar="N", default=1, >> + help="number of testers/cores") >> + >> +parser.add_option("-f", "--functional", type="int", default=0, >> + metavar="PCT", >> + help="Target percentage of functional accesses " >> + "[default: %default]") >> +parser.add_option("-u", "--uncacheable", type="int", default=0, >> + metavar="PCT", >> + help="Target percentage of uncacheable accesses " >> + "[default: %default]") >> + >> +parser.add_option("--progress", type="int", default=1000, >> + metavar="NLOADS", >> + help="Progress message interval " >> + "[default: %default]") >> + >> +(options, args) = parser.parse_args() >> + >> +if args: >> + print "Error: script doesn't take any positional arguments" >> + sys.exit(1) >> + >> +block_size = 64 >> + >> +if options.testers > block_size: >> + print "Error: Number of testers %d limited to %d because of false >> sharing" \ >> + % (options.testers, block_size) >> + sys.exit(1) >> + >> +cpus = [ MemTest(atomic=options.atomic, max_loads=options.maxloads, \ >> + percent_functional=options.functional, \ >> + percent_uncacheable=options.uncacheable, \ >> + progress_interval=options.progress) \ >> + for i in xrange(options.testers) ] >> + >> +# create the desired simulated system >> +# ruby memory >> +ruby_memory = ruby_config.generate("MI_example-homogeneous.rb", >> options.testers) >> + >> +system = System(cpu = cpus, funcmem = PhysicalMemory(), >> + physmem = ruby_memory) >> + >> +for cpu in cpus: >> + cpu.test = system.physmem.port >> + cpu.functional = system.funcmem.port >> + >> + >> +# ----------------------- >> +# run simulation >> +# ----------------------- >> + >> +root = Root( system = system ) >> +if options.atomic: >> + root.system.mem_mode = 'atomic' >> +else: >> + root.system.mem_mode = 'timing' >> + >> +# Not much point in this being higher than the L1 latency >> +m5.ticks.setGlobalFrequency('1ns') >> + >> +# instantiate configuration >> +m5.instantiate(root) >> + >> +# simulate until program terminates >> +exit_event = m5.simulate(options.maxtick) >> + >> +print 'Exiting @ tick', m5.curTick(), 'because', exit_event.getCause() >> _______________________________________________ >> 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 > > > _______________________________________________ > 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
