Put regression tests back into m5. They are located in the "tests" directory. The directory output and reference outputs have changed slightly. Now the directory is ALPHA_SE/test/<test>/<cpu_model>/, and for the reference stats <test>/ref/<arch>/<cpu_model>

Right now only non-SMT SE regression tests have been added back in.  The rest are pending getting SMT working, and consolidating the FS configuration files.

Eventually support for different OSs can be added so you can specify which versions of the binary you want to run from one config file.

Note: mp-test1 doesn't have any reference stats because MP mode doesn't currently work.  The test itself should probably work once the code is fixed.

SConstruct:
    Updates to allow for regression tests to work via the command line "scons build/ALPHA_SE/test/debug/quick" and such once again.
src/cpu/SConscript:
    Keep a list of SMT supporting CPUs so that the regression tests can easily specify which CPUs to use if they are SMT only.

--HG--
extra : convert_revision : 34e6286150aae8f316ae694f6c00be8f510522f2
This commit is contained in:
Kevin Lim 2006-07-19 16:07:25 -04:00
parent 660ea2b176
commit 4bd025742d
19 changed files with 3483 additions and 4 deletions

View file

@ -494,10 +494,10 @@ for build_path in build_paths:
exports = 'env')
# Set up the regression tests for each build.
# for e in envList:
# SConscript('m5-test/SConscript',
# build_dir = os.path.join(build_dir, 'test', e.Label),
# exports = { 'env' : e }, duplicate = False)
for e in envList:
SConscript('tests/SConscript',
build_dir = os.path.join(build_path, 'test', e.Label),
exports = { 'env' : e }, duplicate = False)
Help(help_text)

View file

@ -114,6 +114,9 @@ CheckerSupportedCPUList = ['O3CPU', 'OzoneCPU']
#
#################################################################
# Keep a list of CPU models that support SMT
env['SMT_CPU_MODELS'] = []
sources = []
need_simple_base = False
@ -157,6 +160,7 @@ if 'O3CPU' in env['CPU_MODELS']:
''')
if env['USE_CHECKER']:
sources += Split('o3/checker_builder.cc')
env['SMT_CPU_MODELS'].append('O3CPU')
if 'OzoneCPU' in env['CPU_MODELS']:
need_bp_unit = True

244
tests/SConscript Normal file
View file

@ -0,0 +1,244 @@
# -*- mode:python -*-
# Copyright (c) 2004-2005 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
import glob
from SCons.Script.SConscript import SConsEnvironment
Import('env')
env['DIFFOUT'] = File('diff-out')
# Dict that accumulates lists of tests by category (quick, medium, long)
env.Tests = {}
def contents(node):
return file(str(node)).read()
def check_test(target, source, env):
"""Check output from running test.
Targets are as follows:
target[0] : outdiff
target[1] : statsdiff
target[2] : status
"""
# make sure target files are all gone
for t in target:
if os.path.exists(t.abspath):
Execute(Delete(t.abspath))
# Run diff on output & ref directories to find differences.
# Exclude m5stats.txt since we will use diff-out on that.
Execute(env.subst('diff -ubr ${SOURCES[0].dir} ${SOURCES[1].dir} ' +
'-I "^command line:" ' + # for stdout file
'-I "^M5 compiled on" ' + # for stderr file
'-I "^M5 simulation started" ' + # for stderr file
'-I "^Simulation complete at" ' + # for stderr file
'-I "^Listening for" ' + # for stderr file
'--exclude=m5stats.txt --exclude=SCCS ' +
'--exclude=${TARGETS[0].file} ' +
'> ${TARGETS[0]}', target=target, source=source), None)
print "===== Output differences ====="
print contents(target[0])
# Run diff-out on m5stats.txt file
status = Execute(env.subst('$DIFFOUT $SOURCES > ${TARGETS[1]}',
target=target, source=source),
strfunction=None)
print "===== Statistics differences ====="
print contents(target[1])
# Generate status file contents based on exit status of diff-out
if status == 0:
status_str = "passed."
else:
status_str = "FAILED!"
f = file(str(target[2]), 'w')
print >>f, env.subst('${TARGETS[2].dir}', target=target, source=source), \
status_str
f.close()
# done
return 0
def check_test_string(target, source, env):
return env.subst("Comparing outputs in ${TARGETS[0].dir}.",
target=target, source=source)
testAction = env.Action(check_test, check_test_string)
def print_test(target, source, env):
print '***** ' + contents(source[0])
return 0
printAction = env.Action(print_test, strfunction = None)
def update_test(target, source, env):
"""Update reference test outputs.
Target is phony. First two sources are the ref & new m5stats.txt
files, respectively. We actually copy everything in the
respective directories except the status & diff output files.
"""
dest_dir = str(source[0].get_dir())
src_dir = str(source[1].get_dir())
dest_files = os.listdir(dest_dir)
src_files = os.listdir(src_dir)
# Exclude status & diff outputs
for f in ('outdiff', 'statsdiff', 'status'):
if f in src_files:
src_files.remove(f)
for f in src_files:
if f in dest_files:
print " Replacing file", f
dest_files.remove(f)
else:
print " Creating new file", f
copyAction = Copy(os.path.join(dest_dir, f), os.path.join(src_dir, f))
copyAction.strfunction = None
Execute(copyAction)
# warn about any files in dest not overwritten (other than SCCS dir)
if 'SCCS' in dest_files:
dest_files.remove('SCCS')
if dest_files:
print "Warning: file(s) in", dest_dir, "not updated:",
print ', '.join(dest_files)
return 0
def update_test_string(target, source, env):
return env.subst("Updating ${SOURCES[0].dir} from ${SOURCES[1].dir}",
target=target, source=source)
updateAction = env.Action(update_test, update_test_string)
def test_builder(env, category, cpu_list=[], os_list=[], refdir='ref', timeout=15):
"""Define a test.
Args:
category -- string describing test category (e.g., 'quick')
cpu_list -- list of CPUs to runs this test on (blank means all compiled CPUs)
os_list -- list of OSs to run this test on
refdir -- subdirectory containing reference output (default 'ref')
timeout -- test timeout in minutes (only enforced on pool)
"""
default_refdir = False
if refdir == 'ref':
default_refdir = True
if len(cpu_list) == 0:
cpu_list = env['CPU_MODELS']
# if len(os_list) == 0:
# raise RuntimeError, "No OS specified"
# else:
# for test_os in os_list:
# build_cpu_test(env, category, test_os, cpu_list, refdir, timeout)
# Loop through CPU models and generate proper options, ref directories for each
for cpu in cpu_list:
test_os = ''
if cpu == "AtomicSimpleCPU":
cpu_option = ('','atomic/')
elif cpu == "TimingSimpleCPU":
cpu_option = ('--timing','timing/')
elif cpu == "O3CPU":
cpu_option = ('--detailed','detailed/')
else:
raise TypeError, "Unknown CPU model specified"
if default_refdir:
# Reference stats located in ref/arch/os/cpu or ref/arch/cpu if no OS specified
test_refdir = os.path.join(refdir, env['TARGET_ISA'])
if test_os != '':
test_refdir = os.path.join(test_refdir, test_os)
cpu_refdir = os.path.join(test_refdir, cpu_option[1])
ref_stats = os.path.join(cpu_refdir, 'm5stats.txt')
# base command for running test
base_cmd = '${SOURCES[0]} -d $TARGET.dir ${SOURCES[1]}'
base_cmd = base_cmd + ' ' + cpu_option[0]
# stdout and stderr files
cmd_stdout = '${TARGETS[0]}'
cmd_stderr = '${TARGETS[1]}'
stdout_string = cpu_option[1] + 'stdout'
stderr_string = cpu_option[1] + 'stderr'
m5stats_string = cpu_option[1] + 'm5stats.txt'
outdiff_string = cpu_option[1] + 'outdiff'
statsdiff_string = cpu_option[1] + 'statsdiff'
status_string = cpu_option[1] + 'status'
# Prefix test run with batch job submission command if appropriate.
# Output redirection is also different for batch runs.
# Batch command also supports timeout arg (in seconds, not minutes).
if env['BATCH']:
cmd = [env['BATCH_CMD'], '-t', str(timeout * 60),
'-o', cmd_stdout, '-e', cmd_stderr, base_cmd]
else:
cmd = [base_cmd, '>', cmd_stdout, '2>', cmd_stderr]
env.Command([stdout_string, stderr_string, m5stats_string], [env.M5Binary, 'run.py'],
' '.join(cmd))
# order of targets is important... see check_test
env.Command([outdiff_string, statsdiff_string, status_string],
[ref_stats, m5stats_string],
testAction)
# phony target to echo status
if env['update_ref']:
p = env.Command(cpu_option[1] + '_update', [ref_stats, m5stats_string, status_string],
updateAction)
else:
p = env.Command(cpu_option[1] + '_print', [status_string], printAction)
env.AlwaysBuild(p)
env.Tests.setdefault(category, [])
env.Tests[category] += p
# Make test_builder a "wrapper" function. See SCons wiki page at
# http://www.scons.org/cgi-bin/wiki/WrapperFunctions.
SConsEnvironment.Test = test_builder
cwd = os.getcwd()
os.chdir(str(Dir('.').srcdir))
scripts = glob.glob('*/SConscript')
os.chdir(cwd)
for s in scripts:
SConscript(s, exports = 'env', duplicate = False)
# Set up phony commands for various test categories
allTests = []
for (key, val) in env.Tests.iteritems():
env.Command(key, val, env.NoAction)
allTests += val
# The 'all' target is redundant since just specifying the test
# directory name (e.g., ALPHA_SE/test/opt) has the same effect.
env.Command('all', allTests, env.NoAction)

409
tests/diff-out Executable file
View file

@ -0,0 +1,409 @@
#!/usr/bin/perl
# Copyright (c) 2001-2005 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.
#
# Authors: Steve Reinhardt
#
# This script diffs two SimpleScalar statistics output files.
#
use Getopt::Std;
#
# -t thresh sets threshold for ignoring differences (in %)
# -p sorts differences by % chg (default is alphabetic)
# -f ignores fetch-loss statistics
# -d ignores all distributions
#
getopts('dfn:pt:h');
if ($#ARGV < 1)
{
print "\nError: need two file arguments (<reference> <new>).\n";
print " Options: -d = Ignore distributions\n";
print " -f = Ignore fetch-loss stats\n";
print " -p = Sort errors by percentage\n";
print " -h = Diff header info separately from stats\n";
print " -n <num> = Print top <num> errors (default 20)\n";
print " -t <num> = Error threshold in percent (default 1)\n\n";
die -1;
}
open(REF, "<$ARGV[0]") or die "Error: can't open $ARGV[0].\n";
open(NEW, "<$ARGV[1]") or die "Error: can't open $ARGV[1].\n";
#
# Things that really should be adjustable via the command line
#
# Ignorable error (in percent)
$err_thresh = ($opt_t) ? $opt_t : 0;
# Number of stats to print before omitting
$omit_count = ($opt_n) ? $opt_n : 20;
#
# First copy everything up to the simulation statistics to a pair of
# temporary files, stripping out date-related items, and do a plain
# diff. Any differences in the arguments are not necessarily an issue;
# any differences in the program output should be caught by the EIO
# mechanism if an EIO file is used.
#
# copy_header takes input filehandle and output filename
sub copy_header
{
my ($inhandle, $outname) = @_;
open(OUTPUT, ">$outname") or die "Error: can't open $outname.\n";
while (<$inhandle>)
{
# strip out lines that can vary
next if /^(command line:|M5 compiled on |M5 simulation started |M5 executing on )/;
last if /Begin Simulation Statistics/;
print OUTPUT;
}
close OUTPUT;
}
if ($opt_h) {
# Diff header separately from stats
$refheader = "/tmp/smt-test.refheader.$$";
$newheader = "/tmp/smt-test.newheader.$$";
copy_header(\*REF, $refheader);
copy_header(\*NEW, $newheader);
print "\n===== Header and program output differences =====\n\n";
print `diff $refheader $newheader`;
print "\n===== Statistics differences =====\n\n";
}
#
# Now parse statistics
#
#
# This function takes an open filehandle and returns a reference to
# a hash containing all the statistics variables and their values.
#
sub parse_file
{
$stathandle = shift;
$in_dist = undef;
$hashref = { }; # initialize hash for values
while (<$stathandle>)
{
next if /^\s*$/; # skip blank lines
next if /^\*\*Ignore/; # temporary, to make totaling scripts easy for ISCA 03
last if /End Simulation Statistics/;
s/ *#.*//; # strip comments
if (/^Memory usage: (\d+) KBytes/) {
$stat = 'memory usage';
$value = $1;
}
elsif ($in_dist) {
if ($in_dist =~ /^fetch_loss_counters/) {
if (/^fetch_loss_counters_\d+\.end/) {
# end line of distribution: clear $in_dist flag
$in_dist = undef;
next;
}
else {
next if $opt_f;
($stat, $value) = /^(\S+)\s+(.*)/;
}
}
else {
if (/(.*)\.end_dist/) {
# end line of distribution: clear $in_dist flag
$in_dist = undef;
next;
}
if ($opt_d) {
next; # bail out if we are ignoring dists...
}
elsif (/(.*)\.(min|max)_value/) {
# treat these like normal stats
($stat, $value) = /^(\S+)\s+(.*)/;
}
else {
# this is ugly because labels in the distribution
# buckets don't start in column 0 and may include
# embedded spaces
($stat, $value) =
/^\s*(\S+(?:.*\S)?)\s+(\d+)\s+\d+\.\d+%/;
$stat = $in_dist . '::' . $stat;
}
}
}
else {
if (/(.*)\.start_dist/) {
# start line of distribution: set $in_dist flag
# and save distribution name for future reference
$in_dist = $1;
$stat = $1;
$value = 0;
}
elsif (/^(fetch_loss_counters_\d+)\.start/) {
# treat fetch loss counters like distribution, sort of
$in_dist = $1;
$stat = $1;
$value = 0;
}
else {
($stat, $value) = /^(\S+)\s+(.*)/;
}
}
$$hashref{$stat} = $value;
}
close($stathandle);
return $hashref;
}
#
# pct_diff($old, $new) returns percent difference from $old to $new.
#
sub pct_diff
{
my ($old, $new) = @_;
return ($old == 0) ? (($new == 0) ? 0 : 9999) : 100 * ($new - $old) / $old;
}
#
# Statistics to ignore: these relate to simulator performance, not
# correctness, so don't fail on changes here.
#
%ignore = (
'host_seconds' => 1,
'host_tick_rate' => 1,
'host_inst_rate' => 1,
'host_mem_usage' => 1
);
#
# List of key statistics (always displayed)
# ==> list stats here WITHOUT trailing thread ID
#
@key_stat_list = (
'COM:IPC',
'ISSUE:MSIPC',
'COM:count',
'host_inst_rate',
'sim_insts',
'sim_ticks',
'host_mem_usage'
);
$key_stat_pattern = join('|', @key_stat_list);
# initialize first statistics from each file
$max_err_mag = 0;
$refhash = parse_file(\*REF);
$newhash = parse_file(\*NEW);
# The string sim-smt prints on a divide by zero
$divbyzero = '<err: divide by zero>';
foreach $stat (sort keys %$refhash)
{
$refvalue = $$refhash{$stat};
$newvalue = $$newhash{$stat};
if (!defined($newvalue)) {
# stat missing from new file
push @missing_stats, $stat;
next;
}
if ($stat =~ /($key_stat_pattern)/o) {
# key statistics: always record & display changes in these
push @key_stats, [$stat, $refvalue, $newvalue];
}
if ($ignore{$stat} or $refvalue eq $newvalue) {
# stat is in "ignore" list, or hasn't changed
}
else {
if ($refvalue eq $divbyzero || $newvalue eq $divbyzero) {
# one or the other was a divide by zero:
# no point in trying to quantify error
print "$stat: $refvalue --> $newvalue\n";
}
else {
$reldiff = pct_diff($refvalue, $newvalue);
$diffmag = abs($reldiff);
if ($diffmag > $err_thresh) {
push @errs,
[$stat, $refvalue, $newvalue, $reldiff];
}
if ($diffmag > $max_err_mag) {
$max_err_mag = $diffmag;
}
}
}
# remove from new hash so we can detect added stats
delete $$newhash{$stat};
}
#
# All done. Print comparison summary.
#
printf("Maximum error magnitude: %+f%%\n\n", $max_err_mag);
printf(" %-30s %10s %10s %10s %7s\n", ' ', 'Reference', 'New Value', 'Abs Diff', 'Pct Chg');
printf("Key statistics:\n\n");
foreach $key_stat (@key_stats)
{
($statname, $refvalue, $newvalue, $reldiff) = @$key_stat;
# deduce format from reference value
$pointpos = rindex($refvalue, '.');
$digits = ($pointpos < 0) ? 0 :(length($refvalue) - $pointpos - 1);
$fmt = "%10.${digits}f";
# print differing values with absolute and relative error
printf(" %-30s $fmt $fmt $fmt %+7.2f%%\n",
$statname, $refvalue, $newvalue,
$newvalue - $refvalue, pct_diff($refvalue, $newvalue));
}
printf("\nLargest $omit_count relative errors (> %d%%):\n\n", $err_thresh);
$num_errs = 0;
if ($opt_p)
{
# sort differences by percent change
@errs = sort { abs($$b[3]) <=> abs($$a[3]) } @errs;
}
foreach $err (@errs)
{
($statname, $refvalue, $newvalue, $reldiff) = @$err;
# deduce format from reference value
$pointpos1 = rindex($refvalue, '.');
$digits1 = ($pointpos1 < 0) ? 0 :(length($refvalue) - $pointpos1 - 1);
$pointpos2 = rindex($newvalue, '.');
$digits2 = ($pointpos2 < 0) ? 0 :(length($newvalue) - $pointpos2 - 1);
$digits = ($digits1 > $digits2) ? $digits1 : $digits2;
$fmt = "%10.${digits}f";
# print differing values with absolute and relative error
printf(" %-30s $fmt $fmt $fmt %+7.2f%%\n",
$statname, $refvalue, $newvalue, $newvalue - $refvalue, $reldiff);
# only print top N errors
if (++$num_errs >= $omit_count)
{
print "[... additional errors omitted ...]\n";
last;
}
}
#
# Report missing stats, but first filter out distribution buckets:
# these are mostly noise
@missing_stats = grep { !/::(\d+|overflows)?$/ } @missing_stats;
# get count
$missing_stats = scalar(@missing_stats);
if ($missing_stats)
{
print "\nMissing $missing_stats reference statistics:\n\n";
foreach $stat (@missing_stats)
{
# print "\t$stat\n";
printf " %-50s ", $stat;
print "$$refhash{$stat}\n";
}
}
#
# Any stats left in newhash are added since the reference file
#
@added_stats = keys %$newhash;
# first filter out distribution buckets: mostly noise
@added_stats = grep { !/::(\d+|overflows)?$/ } @added_stats;
# get count
$added_stats = scalar(@added_stats);
if ($added_stats)
{
print "\nFound $added_stats new statistics:\n\n";
foreach $stat (sort @added_stats)
{
# print "\t$stat\n";
printf " %-50s ", $stat;
print "$$newhash{$stat}\n";
}
}
cleanup();
# Exit code is 0 if no stats error, 1 otherwise
$status = ($max_err_mag == 0.0) ? 0 : 1;
exit $status;
sub cleanup
{
unlink($refheader) if ($refheader);
unlink($newheader) if ($newheader);
}

View file

@ -0,0 +1,95 @@
[root]
type=Root
children=system
checkpoint=
clock=1000000000000
max_tick=0
output_file=cout
progress_interval=0
[debug]
break_cycles=
[exetrace]
intel_format=false
pc_symbol=true
print_cpseq=false
print_cycle=true
print_data=true
print_effaddr=true
print_fetchseq=false
print_iregs=false
print_opclass=true
print_thread=true
speculative=true
trace_system=client
[serialize]
count=10
cycle=0
dir=cpt.%012d
period=0
[stats]
descriptions=true
dump_cycle=0
dump_period=0
dump_reset=false
ignore_events=
mysql_db=
mysql_host=
mysql_password=
mysql_user=
project_name=test
simulation_name=test
simulation_sample=0
text_compat=true
text_file=m5stats.txt
[system]
type=System
children=cpu0 physmem workload
mem_mode=atomic
physmem=system.physmem
[system.cpu0]
type=AtomicSimpleCPU
children=mem
clock=1
defer_registration=false
function_trace=false
function_trace_start=0
max_insts_all_threads=0
max_insts_any_thread=500000
max_loads_all_threads=0
max_loads_any_thread=0
mem=system.cpu0.mem
simulate_stalls=false
system=system
width=1
workload=system.workload
[system.cpu0.mem]
type=Bus
bus_id=0
[system.physmem]
type=PhysicalMemory
file=
latency=1
[system.workload]
type=EioProcess
chkpt=
file=/z/ktlim2/clean/newmem-merge/tests/test-progs/anagram/bin/anagram-vshort.eio.gz
output=cout
system=system
[trace]
bufsize=0
dump_on_exit=false
file=cout
flags=
ignore=
start=0

View file

@ -0,0 +1,90 @@
[root]
type=Root
clock=1000000000000
max_tick=0
progress_interval=0
output_file=cout
[system.physmem]
type=PhysicalMemory
file=
// range not specified
latency=1
[system]
type=System
physmem=system.physmem
mem_mode=atomic
[system.workload]
type=EioProcess
file=/z/ktlim2/clean/newmem-merge/tests/test-progs/anagram/bin/anagram-vshort.eio.gz
chkpt=
output=cout
system=system
[system.cpu0.mem]
type=Bus
bus_id=0
[system.cpu0]
type=AtomicSimpleCPU
max_insts_any_thread=500000
max_insts_all_threads=0
max_loads_any_thread=0
max_loads_all_threads=0
mem=system.cpu0.mem
system=system
workload=system.workload
clock=1
defer_registration=false
width=1
function_trace=false
function_trace_start=0
simulate_stalls=false
[trace]
flags=
start=0
bufsize=0
file=cout
dump_on_exit=false
ignore=
[stats]
descriptions=true
project_name=test
simulation_name=test
simulation_sample=0
text_file=m5stats.txt
text_compat=true
mysql_db=
mysql_user=
mysql_password=
mysql_host=
events_start=-1
dump_reset=false
dump_cycle=0
dump_period=0
ignore_events=
[random]
seed=1
[exetrace]
speculative=true
print_cycle=true
print_opclass=true
print_thread=true
print_effaddr=true
print_data=true
print_iregs=false
print_fetchseq=false
print_cpseq=false
pc_symbol=true
intel_format=false
trace_system=client
[debug]
break_cycles=

View file

@ -0,0 +1,18 @@
---------- Begin Simulation Statistics ----------
host_inst_rate 1301768 # Simulator instruction rate (inst/s)
host_mem_usage 147756 # Number of bytes of host memory used
host_seconds 0.38 # Real time elapsed on the host
host_tick_rate 1300060 # Simulator tick rate (ticks/s)
sim_freq 1000000000000 # Frequency of simulated ticks
sim_insts 500000 # Number of instructions simulated
sim_seconds 0.000000 # Number of seconds simulated
sim_ticks 499999 # Number of ticks simulated
system.cpu0.idle_fraction 0 # Percentage of idle cycles
system.cpu0.not_idle_fraction 1 # Percentage of non-idle cycles
system.cpu0.numCycles 500000 # number of cpu cycles simulated
system.cpu0.num_insts 500000 # Number of instructions executed
system.cpu0.num_refs 182204 # Number of memory references
system.workload.PROG:num_syscalls 18 # Number of system calls
---------- End Simulation Statistics ----------

View file

@ -0,0 +1,3 @@
warn: Entering event queue @ 0. Starting simulation...
gzip: stdout: Broken pipe

View file

@ -0,0 +1,14 @@
main dictionary has 1245 entries
49508 bytes wasted
>M5 Simulator System
Copyright (c) 2001-2006
The Regents of The University of Michigan
All Rights Reserved
M5 compiled Jul 19 2006 15:49:01
M5 started Wed Jul 19 15:49:10 2006
M5 executing on zamp.eecs.umich.edu
Creating SE system
Exiting @ tick 499999 because a thread reached the max instruction count

View file

@ -0,0 +1,298 @@
[root]
type=Root
children=system
checkpoint=
clock=1000000000000
max_tick=0
output_file=cout
progress_interval=0
[debug]
break_cycles=
[exetrace]
intel_format=false
pc_symbol=true
print_cpseq=false
print_cycle=true
print_data=true
print_effaddr=true
print_fetchseq=false
print_iregs=false
print_opclass=true
print_thread=true
speculative=true
trace_system=client
[serialize]
count=10
cycle=0
dir=cpt.%012d
period=0
[stats]
descriptions=true
dump_cycle=0
dump_period=0
dump_reset=false
ignore_events=
mysql_db=
mysql_host=
mysql_password=
mysql_user=
project_name=test
simulation_name=test
simulation_sample=0
text_compat=true
text_file=m5stats.txt
[system]
type=System
children=cpu0 physmem workload
mem_mode=atomic
physmem=system.physmem
[system.cpu0]
type=DerivO3CPU
children=checker fuPool mem
BTBEntries=4096
BTBTagSize=16
LFSTSize=1024
LQEntries=32
RASSize=16
SQEntries=32
SSITSize=1024
activity=0
backComSize=5
checker=system.cpu0.checker
choiceCtrBits=2
choicePredictorSize=8192
clock=1
commitToDecodeDelay=1
commitToFetchDelay=1
commitToIEWDelay=1
commitToRenameDelay=1
commitWidth=8
decodeToFetchDelay=1
decodeToRenameDelay=1
decodeWidth=8
defer_registration=false
dispatchWidth=8
fetchToDecodeDelay=1
fetchWidth=8
forwardComSize=5
fuPool=system.cpu0.fuPool
function_trace=false
function_trace_start=0
globalCtrBits=2
globalHistoryBits=13
globalPredictorSize=8192
iewToCommitDelay=1
iewToDecodeDelay=1
iewToFetchDelay=1
iewToRenameDelay=1
instShiftAmt=2
issueToExecuteDelay=1
issueWidth=8
localCtrBits=2
localHistoryBits=11
localHistoryTableSize=2048
localPredictorSize=2048
max_insts_all_threads=0
max_insts_any_thread=500000
max_loads_all_threads=0
max_loads_any_thread=0
mem=system.cpu0.mem
numIQEntries=64
numPhysFloatRegs=256
numPhysIntRegs=256
numROBEntries=192
numThreads=1
predType=tournament
renameToDecodeDelay=1
renameToFetchDelay=1
renameToIEWDelay=2
renameToROBDelay=1
renameWidth=8
squashWidth=8
system=system
wbDepth=1
wbWidth=8
workload=system.workload
[system.cpu0.checker]
type=O3Checker
clock=1
defer_registration=false
exitOnError=true
function_trace=false
function_trace_start=0
max_insts_all_threads=0
max_insts_any_thread=0
max_loads_all_threads=0
max_loads_any_thread=0
system=system
warnOnlyOnLoadError=false
workload=system.workload
[system.cpu0.fuPool]
type=FUPool
children=FUList0 FUList1 FUList2 FUList3 FUList4 FUList5 FUList6 FUList7
FUList=system.cpu0.fuPool.FUList0 system.cpu0.fuPool.FUList1 system.cpu0.fuPool.FUList2 system.cpu0.fuPool.FUList3 system.cpu0.fuPool.FUList4 system.cpu0.fuPool.FUList5 system.cpu0.fuPool.FUList6 system.cpu0.fuPool.FUList7
[system.cpu0.fuPool.FUList0]
type=FUDesc
children=opList0
count=6
opList=system.cpu0.fuPool.FUList0.opList0
[system.cpu0.fuPool.FUList0.opList0]
type=OpDesc
issueLat=1
opClass=IntAlu
opLat=1
[system.cpu0.fuPool.FUList1]
type=FUDesc
children=opList0 opList1
count=2
opList=system.cpu0.fuPool.FUList1.opList0 system.cpu0.fuPool.FUList1.opList1
[system.cpu0.fuPool.FUList1.opList0]
type=OpDesc
issueLat=1
opClass=IntMult
opLat=3
[system.cpu0.fuPool.FUList1.opList1]
type=OpDesc
issueLat=19
opClass=IntDiv
opLat=20
[system.cpu0.fuPool.FUList2]
type=FUDesc
children=opList0 opList1 opList2
count=4
opList=system.cpu0.fuPool.FUList2.opList0 system.cpu0.fuPool.FUList2.opList1 system.cpu0.fuPool.FUList2.opList2
[system.cpu0.fuPool.FUList2.opList0]
type=OpDesc
issueLat=1
opClass=FloatAdd
opLat=2
[system.cpu0.fuPool.FUList2.opList1]
type=OpDesc
issueLat=1
opClass=FloatCmp
opLat=2
[system.cpu0.fuPool.FUList2.opList2]
type=OpDesc
issueLat=1
opClass=FloatCvt
opLat=2
[system.cpu0.fuPool.FUList3]
type=FUDesc
children=opList0 opList1 opList2
count=2
opList=system.cpu0.fuPool.FUList3.opList0 system.cpu0.fuPool.FUList3.opList1 system.cpu0.fuPool.FUList3.opList2
[system.cpu0.fuPool.FUList3.opList0]
type=OpDesc
issueLat=1
opClass=FloatMult
opLat=4
[system.cpu0.fuPool.FUList3.opList1]
type=OpDesc
issueLat=12
opClass=FloatDiv
opLat=12
[system.cpu0.fuPool.FUList3.opList2]
type=OpDesc
issueLat=24
opClass=FloatSqrt
opLat=24
[system.cpu0.fuPool.FUList4]
type=FUDesc
children=opList0
count=0
opList=system.cpu0.fuPool.FUList4.opList0
[system.cpu0.fuPool.FUList4.opList0]
type=OpDesc
issueLat=1
opClass=MemRead
opLat=1
[system.cpu0.fuPool.FUList5]
type=FUDesc
children=opList0
count=0
opList=system.cpu0.fuPool.FUList5.opList0
[system.cpu0.fuPool.FUList5.opList0]
type=OpDesc
issueLat=1
opClass=MemWrite
opLat=1
[system.cpu0.fuPool.FUList6]
type=FUDesc
children=opList0 opList1
count=4
opList=system.cpu0.fuPool.FUList6.opList0 system.cpu0.fuPool.FUList6.opList1
[system.cpu0.fuPool.FUList6.opList0]
type=OpDesc
issueLat=1
opClass=MemRead
opLat=1
[system.cpu0.fuPool.FUList6.opList1]
type=OpDesc
issueLat=1
opClass=MemWrite
opLat=1
[system.cpu0.fuPool.FUList7]
type=FUDesc
children=opList0
count=1
opList=system.cpu0.fuPool.FUList7.opList0
[system.cpu0.fuPool.FUList7.opList0]
type=OpDesc
issueLat=3
opClass=IprAccess
opLat=3
[system.cpu0.mem]
type=Bus
bus_id=0
[system.physmem]
type=PhysicalMemory
file=
latency=1
[system.workload]
type=EioProcess
chkpt=
file=/z/ktlim2/clean/newmem-merge/tests/test-progs/anagram/bin/anagram-vshort.eio.gz
output=cout
system=system
[trace]
bufsize=0
dump_on_exit=false
file=cout
flags=
ignore=
start=0

View file

@ -0,0 +1,293 @@
[root]
type=Root
clock=1000000000000
max_tick=0
progress_interval=0
output_file=cout
[system.physmem]
type=PhysicalMemory
file=
// range not specified
latency=1
[system]
type=System
physmem=system.physmem
mem_mode=atomic
[system.workload]
type=EioProcess
file=/z/ktlim2/clean/newmem-merge/tests/test-progs/anagram/bin/anagram-vshort.eio.gz
chkpt=
output=cout
system=system
[system.cpu0.mem]
type=Bus
bus_id=0
[system.cpu0.checker]
type=O3Checker
max_insts_any_thread=0
max_insts_all_threads=0
max_loads_any_thread=0
max_loads_all_threads=0
workload=system.workload
clock=1
defer_registration=false
exitOnError=true
warnOnlyOnLoadError=false
function_trace=false
function_trace_start=0
[system.cpu0.fuPool.FUList0.opList0]
type=OpDesc
opClass=IntAlu
opLat=1
issueLat=1
[system.cpu0.fuPool.FUList0]
type=FUDesc
opList=system.cpu0.fuPool.FUList0.opList0
count=6
[system.cpu0.fuPool.FUList1.opList0]
type=OpDesc
opClass=IntMult
opLat=3
issueLat=1
[system.cpu0.fuPool.FUList1.opList1]
type=OpDesc
opClass=IntDiv
opLat=20
issueLat=19
[system.cpu0.fuPool.FUList1]
type=FUDesc
opList=system.cpu0.fuPool.FUList1.opList0 system.cpu0.fuPool.FUList1.opList1
count=2
[system.cpu0.fuPool.FUList2.opList0]
type=OpDesc
opClass=FloatAdd
opLat=2
issueLat=1
[system.cpu0.fuPool.FUList2.opList1]
type=OpDesc
opClass=FloatCmp
opLat=2
issueLat=1
[system.cpu0.fuPool.FUList2.opList2]
type=OpDesc
opClass=FloatCvt
opLat=2
issueLat=1
[system.cpu0.fuPool.FUList2]
type=FUDesc
opList=system.cpu0.fuPool.FUList2.opList0 system.cpu0.fuPool.FUList2.opList1 system.cpu0.fuPool.FUList2.opList2
count=4
[system.cpu0.fuPool.FUList3.opList0]
type=OpDesc
opClass=FloatMult
opLat=4
issueLat=1
[system.cpu0.fuPool.FUList3.opList1]
type=OpDesc
opClass=FloatDiv
opLat=12
issueLat=12
[system.cpu0.fuPool.FUList3.opList2]
type=OpDesc
opClass=FloatSqrt
opLat=24
issueLat=24
[system.cpu0.fuPool.FUList3]
type=FUDesc
opList=system.cpu0.fuPool.FUList3.opList0 system.cpu0.fuPool.FUList3.opList1 system.cpu0.fuPool.FUList3.opList2
count=2
[system.cpu0.fuPool.FUList4.opList0]
type=OpDesc
opClass=MemRead
opLat=1
issueLat=1
[system.cpu0.fuPool.FUList4]
type=FUDesc
opList=system.cpu0.fuPool.FUList4.opList0
count=0
[system.cpu0.fuPool.FUList5.opList0]
type=OpDesc
opClass=MemWrite
opLat=1
issueLat=1
[system.cpu0.fuPool.FUList5]
type=FUDesc
opList=system.cpu0.fuPool.FUList5.opList0
count=0
[system.cpu0.fuPool.FUList6.opList0]
type=OpDesc
opClass=MemRead
opLat=1
issueLat=1
[system.cpu0.fuPool.FUList6.opList1]
type=OpDesc
opClass=MemWrite
opLat=1
issueLat=1
[system.cpu0.fuPool.FUList6]
type=FUDesc
opList=system.cpu0.fuPool.FUList6.opList0 system.cpu0.fuPool.FUList6.opList1
count=4
[system.cpu0.fuPool.FUList7.opList0]
type=OpDesc
opClass=IprAccess
opLat=3
issueLat=3
[system.cpu0.fuPool.FUList7]
type=FUDesc
opList=system.cpu0.fuPool.FUList7.opList0
count=1
[system.cpu0.fuPool]
type=FUPool
FUList=system.cpu0.fuPool.FUList0 system.cpu0.fuPool.FUList1 system.cpu0.fuPool.FUList2 system.cpu0.fuPool.FUList3 system.cpu0.fuPool.FUList4 system.cpu0.fuPool.FUList5 system.cpu0.fuPool.FUList6 system.cpu0.fuPool.FUList7
[system.cpu0]
type=DerivO3CPU
clock=1
numThreads=1
activity=0
workload=system.workload
mem=system.cpu0.mem
checker=system.cpu0.checker
max_insts_any_thread=500000
max_insts_all_threads=0
max_loads_any_thread=0
max_loads_all_threads=0
cachePorts=200
decodeToFetchDelay=1
renameToFetchDelay=1
iewToFetchDelay=1
commitToFetchDelay=1
fetchWidth=8
renameToDecodeDelay=1
iewToDecodeDelay=1
commitToDecodeDelay=1
fetchToDecodeDelay=1
decodeWidth=8
iewToRenameDelay=1
commitToRenameDelay=1
decodeToRenameDelay=1
renameWidth=8
commitToIEWDelay=1
renameToIEWDelay=2
issueToExecuteDelay=1
dispatchWidth=8
issueWidth=8
wbWidth=8
wbDepth=1
fuPool=system.cpu0.fuPool
iewToCommitDelay=1
renameToROBDelay=1
commitWidth=8
squashWidth=8
trapLatency=6
backComSize=5
forwardComSize=5
predType=tournament
localPredictorSize=2048
localCtrBits=2
localHistoryTableSize=2048
localHistoryBits=11
globalPredictorSize=8192
globalCtrBits=2
globalHistoryBits=13
choicePredictorSize=8192
choiceCtrBits=2
BTBEntries=4096
BTBTagSize=16
RASSize=16
LQEntries=32
SQEntries=32
LFSTSize=1024
SSITSize=1024
numPhysIntRegs=256
numPhysFloatRegs=256
numIQEntries=64
numROBEntries=192
smtNumFetchingThreads=1
smtFetchPolicy=SingleThread
smtLSQPolicy=Partitioned
smtLSQThreshold=100
smtIQPolicy=Partitioned
smtIQThreshold=100
smtROBPolicy=Partitioned
smtROBThreshold=100
smtCommitPolicy=RoundRobin
instShiftAmt=2
defer_registration=false
function_trace=false
function_trace_start=0
[trace]
flags=
start=0
bufsize=0
file=cout
dump_on_exit=false
ignore=
[stats]
descriptions=true
project_name=test
simulation_name=test
simulation_sample=0
text_file=m5stats.txt
text_compat=true
mysql_db=
mysql_user=
mysql_password=
mysql_host=
events_start=-1
dump_reset=false
dump_cycle=0
dump_period=0
ignore_events=
[random]
seed=1
[exetrace]
speculative=true
print_cycle=true
print_opclass=true
print_thread=true
print_effaddr=true
print_data=true
print_iregs=false
print_fetchseq=false
print_cpseq=false
pc_symbol=true
intel_format=false
trace_system=client
[debug]
break_cycles=

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,4 @@
warn: Entering event queue @ 0. Starting simulation...
warn: cycle 0: fault (1) detected @ PC 0x000000
gzip: stdout: Broken pipe

View file

@ -0,0 +1,14 @@
main dictionary has 1245 entries
49508 bytes wasted
>M5 Simulator System
Copyright (c) 2001-2006
The Regents of The University of Michigan
All Rights Reserved
M5 compiled Jul 19 2006 15:49:01
M5 started Wed Jul 19 15:49:12 2006
M5 executing on zamp.eecs.umich.edu
Creating SE system
Exiting @ tick 259259 because a thread reached the max instruction count

View file

@ -0,0 +1,93 @@
[root]
type=Root
children=system
checkpoint=
clock=1000000000000
max_tick=0
output_file=cout
progress_interval=0
[debug]
break_cycles=
[exetrace]
intel_format=false
pc_symbol=true
print_cpseq=false
print_cycle=true
print_data=true
print_effaddr=true
print_fetchseq=false
print_iregs=false
print_opclass=true
print_thread=true
speculative=true
trace_system=client
[serialize]
count=10
cycle=0
dir=cpt.%012d
period=0
[stats]
descriptions=true
dump_cycle=0
dump_period=0
dump_reset=false
ignore_events=
mysql_db=
mysql_host=
mysql_password=
mysql_user=
project_name=test
simulation_name=test
simulation_sample=0
text_compat=true
text_file=m5stats.txt
[system]
type=System
children=cpu0 physmem workload
mem_mode=atomic
physmem=system.physmem
[system.cpu0]
type=TimingSimpleCPU
children=mem
clock=1
defer_registration=false
function_trace=false
function_trace_start=0
max_insts_all_threads=0
max_insts_any_thread=500000
max_loads_all_threads=0
max_loads_any_thread=0
mem=system.cpu0.mem
system=system
workload=system.workload
[system.cpu0.mem]
type=Bus
bus_id=0
[system.physmem]
type=PhysicalMemory
file=
latency=1
[system.workload]
type=EioProcess
chkpt=
file=/z/ktlim2/clean/newmem-merge/tests/test-progs/anagram/bin/anagram-vshort.eio.gz
output=cout
system=system
[trace]
bufsize=0
dump_on_exit=false
file=cout
flags=
ignore=
start=0

View file

@ -0,0 +1,90 @@
[root]
type=Root
clock=1000000000000
max_tick=0
progress_interval=0
output_file=cout
[system.physmem]
type=PhysicalMemory
file=
// range not specified
latency=1
[system]
type=System
physmem=system.physmem
mem_mode=atomic
[system.workload]
type=EioProcess
file=/z/ktlim2/clean/newmem-merge/tests/test-progs/anagram/bin/anagram-vshort.eio.gz
chkpt=
output=cout
system=system
[system.cpu0.mem]
type=Bus
bus_id=0
[system.cpu0]
type=TimingSimpleCPU
max_insts_any_thread=500000
max_insts_all_threads=0
max_loads_any_thread=0
max_loads_all_threads=0
mem=system.cpu0.mem
system=system
workload=system.workload
clock=1
defer_registration=false
// width not specified
function_trace=false
function_trace_start=0
// simulate_stalls not specified
[trace]
flags=
start=0
bufsize=0
file=cout
dump_on_exit=false
ignore=
[stats]
descriptions=true
project_name=test
simulation_name=test
simulation_sample=0
text_file=m5stats.txt
text_compat=true
mysql_db=
mysql_user=
mysql_password=
mysql_host=
events_start=-1
dump_reset=false
dump_cycle=0
dump_period=0
ignore_events=
[random]
seed=1
[exetrace]
speculative=true
print_cycle=true
print_opclass=true
print_thread=true
print_effaddr=true
print_data=true
print_iregs=false
print_fetchseq=false
print_cpseq=false
pc_symbol=true
intel_format=false
trace_system=client
[debug]
break_cycles=

View file

@ -0,0 +1,18 @@
---------- Begin Simulation Statistics ----------
host_inst_rate 739858 # Simulator instruction rate (inst/s)
host_mem_usage 147760 # Number of bytes of host memory used
host_seconds 0.68 # Real time elapsed on the host
host_tick_rate 1006609 # Simulator tick rate (ticks/s)
sim_freq 1000000000000 # Frequency of simulated ticks
sim_insts 500000 # Number of instructions simulated
sim_seconds 0.000001 # Number of seconds simulated
sim_ticks 680774 # Number of ticks simulated
system.cpu0.idle_fraction 0 # Percentage of idle cycles
system.cpu0.not_idle_fraction 1 # Percentage of non-idle cycles
system.cpu0.numCycles 0 # number of cpu cycles simulated
system.cpu0.num_insts 500000 # Number of instructions executed
system.cpu0.num_refs 182203 # Number of memory references
system.workload.PROG:num_syscalls 18 # Number of system calls
---------- End Simulation Statistics ----------

View file

@ -0,0 +1,3 @@
warn: Entering event queue @ 0. Starting simulation...
gzip: stdout: Broken pipe

View file

@ -0,0 +1,14 @@
main dictionary has 1245 entries
49508 bytes wasted
>M5 Simulator System
Copyright (c) 2001-2006
The Regents of The University of Michigan
All Rights Reserved
M5 compiled Jul 19 2006 15:49:01
M5 started Wed Jul 19 15:49:19 2006
M5 executing on zamp.eecs.umich.edu
Creating SE system
Exiting @ tick 680774 because a thread reached the max instruction count