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

Reply via email to