diff options
author | Pau Cabre <pau.cabre@metempsy.com> | 2018-11-07 23:22:05 +0100 |
---|---|---|
committer | Pau Cabre <pau.cabre@metempsy.com> | 2018-11-17 16:57:58 +0000 |
commit | 439b68a21e5122df2e6d1b9aad7ac46af619cc75 (patch) | |
tree | 75e58c5261518891b4435912545ce3bdd33b9ddb /configs/common/BPConfig.py | |
parent | cb9fa244036772fc1d2c73fa2f4b10e98cd6e17a (diff) | |
download | gem5-439b68a21e5122df2e6d1b9aad7ac46af619cc75.tar.xz |
configs: Added an option for choosing branch predictor type
Added the parameter "--bp-type" to set the branch predictor type
Added the parameter "--list-bp-types" to list all the available branch
predictor types
Change-Id: Ia6aae90c784aef359b6d8233c8383cd7a871aca1
Signed-off-by: Pau Cabre <pau.cabre@metempsy.com>
Reviewed-on: https://gem5-review.googlesource.com/c/14015
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
Diffstat (limited to 'configs/common/BPConfig.py')
-rw-r--r-- | configs/common/BPConfig.py | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/configs/common/BPConfig.py b/configs/common/BPConfig.py new file mode 100644 index 000000000..5e5b92f8a --- /dev/null +++ b/configs/common/BPConfig.py @@ -0,0 +1,87 @@ +# Copyright (c) 2018 Metempsy Technology Consulting +# 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: Pau Cabre + +# This file is a copy of MemConfig.py / CpuConfig.py, but modified to +# hanle branch predictors instead of memory controllers / CPUs + +from __future__ import print_function + +from m5 import fatal +import m5.objects +import inspect +import sys +from textwrap import TextWrapper + +# Dictionary of mapping names of real branch predictor models to classes. +_bp_classes = {} + + +def is_bp_class(cls): + """Determine if a class is a branch predictor that can be instantiated""" + + # We can't use the normal inspect.isclass because the ParamFactory + # and ProxyFactory classes have a tendency to confuse it. + try: + return issubclass(cls, m5.objects.BranchPredictor) and \ + not cls.abstract + except (TypeError, AttributeError): + return False + +def get(name): + """Get a BP class from a user provided class name or alias.""" + + try: + bp_class = _bp_classes[name] + return bp_class + except KeyError: + print("%s is not a valid BP model." % (name,)) + sys.exit(1) + +def print_bp_list(): + """Print a list of available BP classes.""" + + print("Available BranchPredictor classes:") + doc_wrapper = TextWrapper(initial_indent="\t\t", subsequent_indent="\t\t") + for name, cls in _bp_classes.items(): + print("\t%s" % name) + + # Try to extract the class documentation from the class help + # string. + doc = inspect.getdoc(cls) + if doc: + for line in doc_wrapper.wrap(doc): + print(line) + +def bp_names(): + """Return a list of valid Branch Predictor names.""" + return _bp_classes.keys() + +# Add all BPs in the object hierarchy. +for name, cls in inspect.getmembers(m5.objects, is_bp_class): + _bp_classes[name] = cls + |