Files
gem5/configs/common/cpu2000.py
Bobby R. Bruce d11c40dcac misc: Run pre-commit run --all-files
This ensures `isort` is applied to all files in the repo.

Change-Id: Ib7ced1c924ef1639542bf0d1a01c5737f6ba43e9
2023-11-29 22:06:41 -08:00

1045 lines
23 KiB
Python

# Copyright (c) 2006-2008 The Regents of The University of Michigan
# 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.
import os
import sys
from os.path import (
basename,
exists,
isdir,
isfile,
islink,
)
from os.path import join as joinpath
from os.path import normpath
spec_dist = os.environ.get("M5_CPU2000", "/dist/m5/cpu2000")
def copyfiles(srcdir, dstdir):
from filecmp import cmp as filecmp
from shutil import copyfile
srcdir = normpath(srcdir)
dstdir = normpath(dstdir)
if not isdir(dstdir):
os.mkdir(dstdir)
for root, dirs, files in os.walk(srcdir):
root = normpath(root)
prefix = os.path.commonprefix([root, srcdir])
root = root[len(prefix) :]
if root.startswith("/"):
root = root[1:]
for entry in dirs:
newdir = joinpath(dstdir, root, entry)
if not isdir(newdir):
os.mkdir(newdir)
for entry in files:
dest = normpath(joinpath(dstdir, root, entry))
src = normpath(joinpath(srcdir, root, entry))
if not isfile(dest) or not filecmp(src, dest):
copyfile(src, dest)
# some of the spec benchmarks expect to be run from one directory up.
# just create some symlinks that solve the problem
inlink = joinpath(dstdir, "input")
outlink = joinpath(dstdir, "output")
if not exists(inlink):
os.symlink(".", inlink)
if not exists(outlink):
os.symlink(".", outlink)
class Benchmark:
def __init__(self, isa, os, input_set):
if not hasattr(self.__class__, "name"):
self.name = self.__class__.__name__
if not hasattr(self.__class__, "binary"):
self.binary = self.name
if not hasattr(self.__class__, "args"):
self.args = []
if not hasattr(self.__class__, "output"):
self.output = f"{self.name}.out"
if not hasattr(self.__class__, "simpoint"):
self.simpoint = None
try:
func = getattr(self.__class__, input_set)
except AttributeError:
raise AttributeError(
f"The benchmark {self.name} does not have the {input_set} input set"
)
executable = joinpath(spec_dist, "binaries", isa, os, self.binary)
if not isfile(executable):
raise AttributeError(f"{executable} not found")
self.executable = executable
# root of tree for input & output data files
data_dir = joinpath(spec_dist, "data", self.name)
# optional subtree with files shared across input sets
all_dir = joinpath(data_dir, "all")
# dirs for input & output files for this input set
inputs_dir = joinpath(data_dir, input_set, "input")
outputs_dir = joinpath(data_dir, input_set, "output")
# keep around which input set was specified
self.input_set = input_set
if not isdir(inputs_dir):
raise AttributeError(f"{inputs_dir} not found")
self.inputs_dir = [inputs_dir]
if isdir(all_dir):
self.inputs_dir += [joinpath(all_dir, "input")]
if isdir(outputs_dir):
self.outputs_dir = outputs_dir
if not hasattr(self.__class__, "stdin"):
self.stdin = joinpath(inputs_dir, f"{self.name}.in")
if not isfile(self.stdin):
self.stdin = None
if not hasattr(self.__class__, "stdout"):
self.stdout = joinpath(outputs_dir, f"{self.name}.out")
if not isfile(self.stdout):
self.stdout = None
func(self, isa, os)
def makeProcessArgs(self, **kwargs):
# set up default args for Process object
process_args = {}
process_args["cmd"] = [self.name] + self.args
process_args["executable"] = self.executable
if self.stdin:
process_args["input"] = self.stdin
if self.stdout:
process_args["output"] = self.stdout
if self.simpoint:
process_args["simpoint"] = self.simpoint
# explicit keywords override defaults
process_args.update(kwargs)
return process_args
def makeProcess(self, **kwargs):
process_args = self.makeProcessArgs(**kwargs)
# figure out working directory: use m5's outdir unless
# overridden by Process's cwd param
cwd = process_args.get("cwd")
if not cwd:
from m5 import options
cwd = options.outdir
process_args["cwd"] = cwd
if not isdir(cwd):
os.makedirs(cwd)
# copy input files to working directory
for d in self.inputs_dir:
copyfiles(d, cwd)
# generate Process object
from m5.objects import Process
return Process(**process_args)
def __str__(self):
return self.name
class DefaultBenchmark(Benchmark):
def ref(self, isa, os):
pass
def test(self, isa, os):
pass
def train(self, isa, os):
pass
class MinneDefaultBenchmark(DefaultBenchmark):
def smred(self, isa, os):
pass
def mdred(self, isa, os):
pass
def lgred(self, isa, os):
pass
class ammp(MinneDefaultBenchmark):
name = "ammp"
number = 188
lang = "C"
simpoint = 108 * 100e6
class applu(MinneDefaultBenchmark):
name = "applu"
number = 173
lang = "F77"
simpoint = 2179 * 100e6
class apsi(MinneDefaultBenchmark):
name = "apsi"
number = 301
lang = "F77"
simpoint = 3408 * 100e6
class art(DefaultBenchmark):
name = "art"
number = 179
lang = "C"
def test(self, isa, os):
self.args = [
"-scanfile",
"c756hel.in",
"-trainfile1",
"a10.img",
"-stride",
"2",
"-startx",
"134",
"-starty",
"220",
"-endx",
"139",
"-endy",
"225",
"-objects",
"1",
]
self.output = "test.out"
def train(self, isa, os):
self.args = [
"-scanfile",
"c756hel.in",
"-trainfile1",
"a10.img",
"-stride",
"2",
"-startx",
"134",
"-starty",
"220",
"-endx",
"184",
"-endy",
"240",
"-objects",
"3",
]
self.output = "train.out"
def lgred(self, isa, os):
self.args = [
"-scanfile",
"c756hel.in",
"-trainfile1",
"a10.img",
"-stride",
"5",
"-startx",
"134",
"-starty",
"220",
"-endx",
"184",
"-endy",
"240",
"-objects",
"1",
]
self.output = "lgred.out"
class art110(art):
def ref(self, isa, os):
self.args = [
"-scanfile",
"c756hel.in",
"-trainfile1",
"a10.img",
"-trainfile2",
"hc.img",
"-stride",
"2",
"-startx",
"110",
"-starty",
"200",
"-endx",
"160",
"-endy",
"240",
"-objects",
"10",
]
self.output = "ref.1.out"
self.simpoint = 340 * 100e6
class art470(art):
def ref(self, isa, os):
self.args = [
"-scanfile",
"c756hel.in",
"-trainfile1",
"a10.img",
"-trainfile2",
"hc.img",
"-stride",
"2",
"-startx",
"470",
"-starty",
"140",
"-endx",
"520",
"-endy",
"180",
"-objects",
"10",
]
self.output = "ref.2.out"
self.simpoint = 365 * 100e6
class equake(DefaultBenchmark):
name = "equake"
number = 183
lang = "C"
simpoint = 812 * 100e6
def lgred(self, isa, os):
pass
class facerec(MinneDefaultBenchmark):
name = "facerec"
number = 187
lang = "F"
simpoint = 375 * 100e6
class fma3d(MinneDefaultBenchmark):
name = "fma3d"
number = 191
lang = "F"
simpoint = 2541 * 100e6
class galgel(MinneDefaultBenchmark):
name = "galgel"
number = 178
lang = "F"
simpoint = 2491 * 100e6
class lucas(MinneDefaultBenchmark):
name = "lucas"
number = 189
lang = "F"
simpoint = 545 * 100e6
class mesa(Benchmark):
name = "mesa"
number = 177
lang = "C"
stdin = None
def __set_args(self, frames):
self.args = [
"-frames",
frames,
"-meshfile",
f"{self.name}.in",
"-ppmfile",
f"{self.name}.ppm",
]
def test(self, isa, os):
self.__set_args("10")
def train(self, isa, os):
self.__set_args("500")
def ref(self, isa, os):
self.__set_args("1000")
self.simpoint = 1135 * 100e6
def lgred(self, isa, os):
self.__set_args("1")
class mgrid(MinneDefaultBenchmark):
name = "mgrid"
number = 172
lang = "F77"
simpoint = 3292 * 100e6
class sixtrack(DefaultBenchmark):
name = "sixtrack"
number = 200
lang = "F77"
simpoint = 3043 * 100e6
def lgred(self, isa, os):
pass
class swim(MinneDefaultBenchmark):
name = "swim"
number = 171
lang = "F77"
simpoint = 2079 * 100e6
class wupwise(DefaultBenchmark):
name = "wupwise"
number = 168
lang = "F77"
simpoint = 3237 * 100e6
def lgred(self, isa, os):
pass
class bzip2(DefaultBenchmark):
name = "bzip2"
number = 256
lang = "C"
def test(self, isa, os):
self.args = ["input.random"]
def train(self, isa, os):
self.args = ["input.compressed"]
class bzip2_source(bzip2):
def ref(self, isa, os):
self.simpoint = 977 * 100e6
self.args = ["input.source", "58"]
def lgred(self, isa, os):
self.args = ["input.source", "1"]
class bzip2_graphic(bzip2):
def ref(self, isa, os):
self.simpoint = 718 * 100e6
self.args = ["input.graphic", "58"]
def lgred(self, isa, os):
self.args = ["input.graphic", "1"]
class bzip2_program(bzip2):
def ref(self, isa, os):
self.simpoint = 458 * 100e6
self.args = ["input.program", "58"]
def lgred(self, isa, os):
self.args = ["input.program", "1"]
class crafty(MinneDefaultBenchmark):
name = "crafty"
number = 186
lang = "C"
simpoint = 774 * 100e6
class eon(MinneDefaultBenchmark):
name = "eon"
number = 252
lang = "CXX"
stdin = None
class eon_kajiya(eon):
args = [
"chair.control.kajiya",
"chair.camera",
"chair.surfaces",
"chair.kajiya.ppm",
"ppm",
"pixels_out.kajiya",
]
output = "kajiya_log.out"
class eon_cook(eon):
args = [
"chair.control.cook",
"chair.camera",
"chair.surfaces",
"chair.cook.ppm",
"ppm",
"pixels_out.cook",
]
output = "cook_log.out"
class eon_rushmeier(eon):
args = [
"chair.control.rushmeier",
"chair.camera",
"chair.surfaces",
"chair.rushmeier.ppm",
"ppm",
"pixels_out.rushmeier",
]
output = "rushmeier_log.out"
simpoint = 403 * 100e6
class gap(DefaultBenchmark):
name = "gap"
number = 254
lang = "C"
def __set_args(self, size):
self.args = ["-l", "./", "-q", "-m", size]
def test(self, isa, os):
self.__set_args("64M")
def train(self, isa, os):
self.__set_args("128M")
def ref(self, isa, os):
self.__set_args("192M")
self.simpoint = 674 * 100e6
def lgred(self, isa, os):
self.__set_args("64M")
def mdred(self, isa, os):
self.__set_args("64M")
def smred(self, isa, os):
self.__set_args("64M")
class gcc(DefaultBenchmark):
name = "gcc"
number = 176
lang = "C"
def test(self, isa, os):
self.args = ["cccp.i", "-o", "cccp.s"]
def train(self, isa, os):
self.args = ["cp-decl.i", "-o", "cp-decl.s"]
def smred(self, isa, os):
self.args = ["c-iterate.i", "-o", "c-iterate.s"]
def mdred(self, isa, os):
self.args = ["rdlanal.i", "-o", "rdlanal.s"]
def lgred(self, isa, os):
self.args = ["cp-decl.i", "-o", "cp-decl.s"]
class gcc_166(gcc):
def ref(self, isa, os):
self.simpoint = 389 * 100e6
self.args = ["166.i", "-o", "166.s"]
class gcc_200(gcc):
def ref(self, isa, os):
self.simpoint = 736 * 100e6
self.args = ["200.i", "-o", "200.s"]
class gcc_expr(gcc):
def ref(self, isa, os):
self.simpoint = 36 * 100e6
self.args = ["expr.i", "-o", "expr.s"]
class gcc_integrate(gcc):
def ref(self, isa, os):
self.simpoint = 4 * 100e6
self.args = ["integrate.i", "-o", "integrate.s"]
class gcc_scilab(gcc):
def ref(self, isa, os):
self.simpoint = 207 * 100e6
self.args = ["scilab.i", "-o", "scilab.s"]
class gzip(DefaultBenchmark):
name = "gzip"
number = 164
lang = "C"
def test(self, isa, os):
self.args = ["input.compressed", "2"]
def train(self, isa, os):
self.args = ["input.combined", "32"]
class gzip_source(gzip):
def ref(self, isa, os):
self.simpoint = 334 * 100e6
self.args = ["input.source", "1"]
def smred(self, isa, os):
self.args = ["input.source", "1"]
def mdred(self, isa, os):
self.args = ["input.source", "1"]
def lgred(self, isa, os):
self.args = ["input.source", "1"]
class gzip_log(gzip):
def ref(self, isa, os):
self.simpoint = 265 * 100e6
self.args = ["input.log", "60"]
def smred(self, isa, os):
self.args = ["input.log", "1"]
def mdred(self, isa, os):
self.args = ["input.log", "1"]
def lgred(self, isa, os):
self.args = ["input.log", "1"]
class gzip_graphic(gzip):
def ref(self, isa, os):
self.simpoint = 653 * 100e6
self.args = ["input.graphic", "60"]
def smred(self, isa, os):
self.args = ["input.graphic", "1"]
def mdred(self, isa, os):
self.args = ["input.graphic", "1"]
def lgred(self, isa, os):
self.args = ["input.graphic", "1"]
class gzip_random(gzip):
def ref(self, isa, os):
self.simpoint = 623 * 100e6
self.args = ["input.random", "60"]
def smred(self, isa, os):
self.args = ["input.random", "1"]
def mdred(self, isa, os):
self.args = ["input.random", "1"]
def lgred(self, isa, os):
self.args = ["input.random", "1"]
class gzip_program(gzip):
def ref(self, isa, os):
self.simpoint = 1189 * 100e6
self.args = ["input.program", "60"]
def smred(self, isa, os):
self.args = ["input.program", "1"]
def mdred(self, isa, os):
self.args = ["input.program", "1"]
def lgred(self, isa, os):
self.args = ["input.program", "1"]
class mcf(MinneDefaultBenchmark):
name = "mcf"
number = 181
lang = "C"
args = ["mcf.in"]
simpoint = 553 * 100e6
class parser(MinneDefaultBenchmark):
name = "parser"
number = 197
lang = "C"
args = ["2.1.dict", "-batch"]
simpoint = 1146 * 100e6
class perlbmk(DefaultBenchmark):
name = "perlbmk"
number = 253
lang = "C"
def test(self, isa, os):
self.args = ["-I.", "-I", "lib", "test.pl"]
self.stdin = "test.in"
class perlbmk_diffmail(perlbmk):
def ref(self, isa, os):
self.simpoint = 141 * 100e6
self.args = [
"-I",
"lib",
"diffmail.pl",
"2",
"550",
"15",
"24",
"23",
"100",
]
def train(self, isa, os):
self.args = [
"-I",
"lib",
"diffmail.pl",
"2",
"350",
"15",
"24",
"23",
"150",
]
class perlbmk_scrabbl(perlbmk):
def train(self, isa, os):
self.args = ["-I.", "-I", "lib", "scrabbl.pl"]
self.stdin = "scrabbl.in"
class perlbmk_makerand(perlbmk):
def ref(self, isa, os):
self.simpoint = 11 * 100e6
self.args = ["-I", "lib", "makerand.pl"]
def lgred(self, isa, os):
self.args = ["-I.", "-I", "lib", "lgred.makerand.pl"]
def mdred(self, isa, os):
self.args = ["-I.", "-I", "lib", "mdred.makerand.pl"]
def smred(self, isa, os):
self.args = ["-I.", "-I", "lib", "smred.makerand.pl"]
class perlbmk_perfect(perlbmk):
def ref(self, isa, os):
self.simpoint = 5 * 100e6
self.args = ["-I", "lib", "perfect.pl", "b", "3", "m", "4"]
def train(self, isa, os):
self.args = ["-I", "lib", "perfect.pl", "b", "3"]
class perlbmk_splitmail1(perlbmk):
def ref(self, isa, os):
self.simpoint = 405 * 100e6
self.args = [
"-I",
"lib",
"splitmail.pl",
"850",
"5",
"19",
"18",
"1500",
]
class perlbmk_splitmail2(perlbmk):
def ref(self, isa, os):
self.args = [
"-I",
"lib",
"splitmail.pl",
"704",
"12",
"26",
"16",
"836",
]
class perlbmk_splitmail3(perlbmk):
def ref(self, isa, os):
self.args = [
"-I",
"lib",
"splitmail.pl",
"535",
"13",
"25",
"24",
"1091",
]
class perlbmk_splitmail4(perlbmk):
def ref(self, isa, os):
self.args = [
"-I",
"lib",
"splitmail.pl",
"957",
"12",
"23",
"26",
"1014",
]
class twolf(Benchmark):
name = "twolf"
number = 300
lang = "C"
stdin = None
def test(self, isa, os):
self.args = ["test"]
def train(self, isa, os):
self.args = ["train"]
def ref(self, isa, os):
self.simpoint = 1066 * 100e6
self.args = ["ref"]
def smred(self, isa, os):
self.args = ["smred"]
def mdred(self, isa, os):
self.args = ["mdred"]
def lgred(self, isa, os):
self.args = ["lgred"]
class vortex(Benchmark):
name = "vortex"
number = 255
lang = "C"
stdin = None
def __init__(self, isa, os, input_set):
if isa in ("arm", "thumb", "aarch64"):
self.endian = "lendian"
elif isa == "sparc" or isa == "sparc32":
self.endian = "bendian"
else:
raise AttributeError(f"unknown ISA {isa}")
super().__init__(isa, os, input_set)
def test(self, isa, os):
self.args = [f"{self.endian}.raw"]
self.output = "vortex.out"
def train(self, isa, os):
self.args = [f"{self.endian}.raw"]
self.output = "vortex.out"
def smred(self, isa, os):
self.args = [f"{self.endian}.raw"]
self.output = "vortex.out"
def mdred(self, isa, os):
self.args = [f"{self.endian}.raw"]
self.output = "vortex.out"
def lgred(self, isa, os):
self.args = [f"{self.endian}.raw"]
self.output = "vortex.out"
class vortex1(vortex):
def ref(self, isa, os):
self.args = [f"{self.endian}1.raw"]
self.output = "vortex1.out"
self.simpoint = 271 * 100e6
class vortex2(vortex):
def ref(self, isa, os):
self.simpoint = 1024 * 100e6
self.args = [f"{self.endian}2.raw"]
self.output = "vortex2.out"
class vortex3(vortex):
def ref(self, isa, os):
self.simpoint = 564 * 100e6
self.args = [f"{self.endian}3.raw"]
self.output = "vortex3.out"
class vpr(MinneDefaultBenchmark):
name = "vpr"
number = 175
lang = "C"
# not sure about vpr minnespec place.in
class vpr_place(vpr):
args = [
"net.in",
"arch.in",
"place.out",
"dum.out",
"-nodisp",
"-place_only",
"-init_t",
"5",
"-exit_t",
"0.005",
"-alpha_t",
"0.9412",
"-inner_num",
"2",
]
output = "place_log.out"
class vpr_route(vpr):
simpoint = 476 * 100e6
args = [
"net.in",
"arch.in",
"place.in",
"route.out",
"-nodisp",
"-route_only",
"-route_chan_width",
"15",
"-pres_fac_mult",
"2",
"-acc_fac",
"1",
"-first_iter_pres_fac",
"4",
"-initial_pres_fac",
"8",
]
output = "route_log.out"
all = [
ammp,
applu,
apsi,
art,
art110,
art470,
equake,
facerec,
fma3d,
galgel,
lucas,
mesa,
mgrid,
sixtrack,
swim,
wupwise,
bzip2_source,
bzip2_graphic,
bzip2_program,
crafty,
eon_kajiya,
eon_cook,
eon_rushmeier,
gap,
gcc_166,
gcc_200,
gcc_expr,
gcc_integrate,
gcc_scilab,
gzip_source,
gzip_log,
gzip_graphic,
gzip_random,
gzip_program,
mcf,
parser,
perlbmk_diffmail,
perlbmk_makerand,
perlbmk_perfect,
perlbmk_splitmail1,
perlbmk_splitmail2,
perlbmk_splitmail3,
perlbmk_splitmail4,
twolf,
vortex1,
vortex2,
vortex3,
vpr_place,
vpr_route,
]
__all__ = [x.__name__ for x in all]
if __name__ == "__main__":
from pprint import pprint
for bench in all:
for input_set in "ref", "test", "train":
print(f"class: {bench.__name__}")
x = bench("x86", "linux", input_set)
print(f"{x}: {input_set}")
pprint(x.makeProcessArgs())
print()