summaryrefslogtreecommitdiff
path: root/configs/common/HWPConfig.py
diff options
context:
space:
mode:
authorJavier Bueno <javier.bueno@metempsy.com>2019-03-27 14:19:52 +0100
committerJavier Bueno Hedo <javier.bueno@metempsy.com>2019-04-24 20:20:59 +0000
commit8f010ce138a9b09b0a30e3d53df88662045fcc29 (patch)
tree22f16fd9a5201124be36af5882fe9cb0c49892c1 /configs/common/HWPConfig.py
parent57667bad9f6e6920dfbe69b2afc9caaace58bcbe (diff)
downloadgem5-8f010ce138a9b09b0a30e3d53df88662045fcc29.tar.xz
config: Add flag options to set the hardware prefetchers to use
This patch adds three flag options to set the prefetcher class of the L1i cache, L1d cache and L2 cache. Change-Id: I310fcd9c49f9554d98cd565a32bdb96a3e165486 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/17709 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Tested-by: kokoro <noreply+kokoro@google.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
Diffstat (limited to 'configs/common/HWPConfig.py')
-rw-r--r--configs/common/HWPConfig.py88
1 files changed, 88 insertions, 0 deletions
diff --git a/configs/common/HWPConfig.py b/configs/common/HWPConfig.py
new file mode 100644
index 000000000..dd8cafa2e
--- /dev/null
+++ b/configs/common/HWPConfig.py
@@ -0,0 +1,88 @@
+# 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 __future__ import absolute_import
+
+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.
+_hwp_classes = {}
+
+
+def is_hwp_class(cls):
+ """Determine if a class is a prefetcher 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.BasePrefetcher) and \
+ not cls.abstract
+ except (TypeError, AttributeError):
+ return False
+
+def get(name):
+ """Get a HWP class from a user provided class name or alias."""
+
+ try:
+ hwp_class = _hwp_classes[name]
+ return hwp_class
+ except KeyError:
+ print("%s is not a valid HWP model." % (name,))
+ sys.exit(1)
+
+def print_hwp_list():
+ """Print a list of available HWP classes."""
+
+ print("Available Hardware Prefetcher classes:")
+ doc_wrapper = TextWrapper(initial_indent="\t\t", subsequent_indent="\t\t")
+ for name, cls in _hwp_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 hwp_names():
+ """Return a list of valid Hardware Prefetcher names."""
+ return list(_hwp_classes.keys())
+
+# Add all HWPs in the object hierarchy.
+for name, cls in inspect.getmembers(m5.objects, is_hwp_class):
+ _hwp_classes[name] = cls
+