diff options
author | Nikos Nikoleris <nikos.nikoleris@arm.com> | 2016-12-05 16:48:31 -0500 |
---|---|---|
committer | Nikos Nikoleris <nikos.nikoleris@arm.com> | 2016-12-05 16:48:31 -0500 |
commit | 9e57e4e89d3c6b6d7e0f0f182bfd01c5585c16c5 (patch) | |
tree | 84152a4ab7e235932320d4a403dbfd0b62895ba5 /configs | |
parent | c1a40f9e44810baad129a7367480cd1a81f9f9ea (diff) | |
download | gem5-9e57e4e89d3c6b6d7e0f0f182bfd01c5585c16c5.tar.xz |
config: Add an option to generate a random topology in memcheck
This change adds the option to use the memcheck with random memory
hierarchies at the moment limited to a maximum depth of 3 allowing
testing with uncommon topologies.
Change-Id: Id2c2fe82a8175d9a67eb4cd7f3d2e2720a809b60
Reviewed-by: Andreas Hansson <andreas.hansson@arm.com>
Diffstat (limited to 'configs')
-rw-r--r-- | configs/example/memcheck.py | 57 |
1 files changed, 34 insertions, 23 deletions
diff --git a/configs/example/memcheck.py b/configs/example/memcheck.py index 25ac06254..7ef413389 100644 --- a/configs/example/memcheck.py +++ b/configs/example/memcheck.py @@ -40,6 +40,7 @@ # Andreas Hansson import optparse +import random import sys import m5 @@ -97,6 +98,8 @@ parser.add_option("-t", "--testers", type="string", default="1:0:2", help="Colon-separated tester hierarchy specification, " "see script comments for details " "[default: %default]") +parser.add_option("-r", "--random", action="store_true", + help="Generate a random tree topology") parser.add_option("--sys-clock", action="store", type="string", default='1GHz', help = """Top-level clock for blocks running at system @@ -110,35 +113,43 @@ if args: # Start by parsing the command line options and do some basic sanity # checking -try: - cachespec = [int(x) for x in options.caches.split(':')] - testerspec = [int(x) for x in options.testers.split(':')] -except: - print "Error: Unable to parse caches or testers option" - sys.exit(1) - -if len(cachespec) < 1: - print "Error: Must have at least one level of caches" - sys.exit(1) - -if len(cachespec) != len(testerspec) - 1: - print "Error: Testers must have one element more than caches" - sys.exit(1) +if options.random: + # Generate a tree with a valid number of testers + tree_depth = random.randint(1, 4) + cachespec = [random.randint(1, 3) for i in range(tree_depth)] + testerspec = [random.randint(1, 3) for i in range(tree_depth + 1)] + print "Generated random tree -c", ':'.join(map(str, cachespec)), \ + "-t", ':'.join(map(str, testerspec)) +else: + try: + cachespec = [int(x) for x in options.caches.split(':')] + testerspec = [int(x) for x in options.testers.split(':')] + except: + print "Error: Unable to parse caches or testers option" + sys.exit(1) -if testerspec[-1] == 0: - print "Error: Must have testers at the uppermost level" - sys.exit(1) + if len(cachespec) < 1: + print "Error: Must have at least one level of caches" + sys.exit(1) -for t in testerspec: - if t < 0: - print "Error: Cannot have a negative number of testers" + if len(cachespec) != len(testerspec) - 1: + print "Error: Testers must have one element more than caches" sys.exit(1) -for c in cachespec: - if c < 1: - print "Error: Must have 1 or more caches at each level" + if testerspec[-1] == 0: + print "Error: Must have testers at the uppermost level" sys.exit(1) + for t in testerspec: + if t < 0: + print "Error: Cannot have a negative number of testers" + sys.exit(1) + + for c in cachespec: + if c < 1: + print "Error: Must have 1 or more caches at each level" + sys.exit(1) + # Determine the tester multiplier for each level as the string # elements are per subsystem and it fans out multiplier = [1] |