Note: links to SPEC CPU2000 documents on this web page
assume that you are reading the page from a directory that
also contains the other SPEC CPU2000 documents. If by
some chance you are reading this web page from a location
where the links do not work, try accessing the referenced
documents at one of the following locations:
For example, starting with a freshly-installed SPEC CPU2000 directory tree:
% runspec --config=Tru64_Unix --size=test --iterations=1 \ --tuning=peak --output_format=ps swim > /dev/null % cd result % ls CFP2000.001.ps CFP2000.001.raw log.001 log.lockNote that we have just the single result. Let's make a temporary directory and copy the rawfile there:
% mkdir tmp % cd tmp % cp ../CFP2000.001.raw . % ls CFP2000.001.rawNow, attempt to extract the config file:
% extract_config CFP2000.001.raw > tmp.cfgDoes the extracted file match the original?
% diff ../../config/Tru64_Unix.cfg ./tmp.cfg 0a1,3 > # Invocation command line: > # /cpu2000/kit96/bin/runspec --config=Tru64_Unix --size=test --iterations=1 --tuning=peak --output_format=ps swim > ############################################################################ 96,102d98 < < __MD5__ < 171.swim=peak=oct6a=default: < # Last updated Wed Dec 15 10:05:06 1999 < optmd5=764e8d466d967f5dacae93415dbfbe71 < exemd5=d7cccb73a236bbe7a548385ee4eff137 < %Yes. The only differences are:
NT Notes: on NT systems, you can invoke extract_config as:
specperl %spec%\bin\extract_config rawfile
% ls CFP2000.001.ps CFP2000.001.raw log.001 log.lock % mkdir tmp % cd tmp % cp ../*ps . % ls CFP2000.001.psNote that at this point we have just the postscript output in the current directory. Now, attempt to extract the raw file:
% extract_raw *ps % ls CFP2000.001.ps CFP2000.001.rawDoes the extracted file match the original?
% diff ../CFP2000.001.raw ./CFP2000.001.raw %Yes.
NT Notes: on NT systems, you can invoke extract_raw as:
specperl %spec%\bin\extract_raw file-to-extract-fromNote that the file you extract from can be pdf, ps, or html, just as on Unix systems, with one important exception: if you are using a browser that attempts to add value to the html when you save it, that browser may break the embedded rawfile. For example, with Internet Explorer Version 5.00.3103.1000, if you are viewing a SPEC CPU2000 html file and you select File -> Save As, the default for "Save as type" is shown as
"Web Page, complete (*.htm,*.html)"Do not accept that default if you want to be able to retrieve the rawfile later on. If you take the default, your saved file will be incomplete. To save the web page INCLUDING the embedded rawfile, you must change "Save as type" to
"Web Page, HTML only (*.htm,*.html)"
For those of you who will have it, here are the various things it understands, as well as the places they'll take you. They're awfully handy.
|If you say||You'll end up in|
|go bin||$SPEC/bin (where the tools live)|
|go src foo||foo's src directory, if it can be found. For example:|
|go src 197||$SPEC/benchspec/CINT2000/197.parser/src|
|go src eon||$SPEC/benchspec/CINT2000/252.eon/src|
|go src nada||. (There's no benchmark named *nada*)|
|go work foo||foo's run directory, if it can be found. For example:|
|go work 197||$SPEC/benchspec/CINT2000/197.parser/run|
|go work eon||$SPEC/benchspec/CINT2000/252.eon/run|
|go work nada||. (There's no benchmark named *nada*)|
|go data foo||foo's data directory, if it can be found. For example:|
|go data 197||$SPEC/benchspec/CINT2000/197.parser/data|
|go data eon||$SPEC/benchspec/CINT2000/252.eon/data|
|go data nada||. (There's no benchmark named *nada*)|
|go foo||foo's top level directory, if it can be found. For example:|
|go nada||. (There's no benchmark named *nada*)|
$ go work gcc $ cat list | fold -s 00000001 dir=/cpu2000/kit92/benchspec/CINT2000/176.gcc/run/00000001 ext=nov11c_ns lock=0 mach=default size=ref tune=base type=run username=john __END__ $ cd *01 $ $ cat speccmds.out | fold -s running commands in speccmds.cmd 1 times runs started at 943371319, 399184000, Tue Nov 23 10:35:19 1999 run 1 started at 943371319, 399184000, Tue Nov 23 10:35:19 1999 child started: 0, 943371319, 400160000, 11128, '../00000001/cc1_base.nov11c_ns 166.i -o 166.s' child finished: 0, 943371519, 814960000, 200, 414800000, 11128, 0 child started: 0, 943371519, 815936000, 11135, '../00000001/cc1_base.nov11c_ns 200.i -o 200.s' child finished: 0, 943371854, 339648000, 334, 523712000, 11135, 0 child started: 0, 943371854, 339648000, 11154, '../00000001/cc1_base.nov11c_ns expr.i -o expr.s' child finished: 0, 943371892, 803248000, 38, 463600000, 11154, 0 child started: 0, 943371892, 803248000, 11126, '../00000001/cc1_base.nov11c_ns integrate.i -o integrate.s' child finished: 0, 943371939, 571936000, 46, 768688000, 11126, 0 child started: 0, 943371939, 571936000, 11146, '../00000001/cc1_base.nov11c_ns scilab.i -o scilab.s' child finished: 0, 943372136, 993568000, 197, 421632000, 11146, 0 run 1 finished at: 943372136, 993568000, Tue Nov 23 10:48:56 1999 run 1 elapsed time: 817, 594384000, 817.594384000 runs finished at 943372136, 993568000, Tue Nov 23 10:48:56 1999 runs elapsed time: 817, 594384000, 817.594384000Fortunately, SPEC has provided a tool to interpret the above for you:
$ printkids.pl Seconds Command 200.41 cc1_base.nov11c_ns 166.i -o 166.s 334.52 cc1_base.nov11c_ns 200.i -o 200.s 38.46 cc1_base.nov11c_ns expr.i -o expr.s 46.77 cc1_base.nov11c_ns integrate.i -o integrate.s 197.42 cc1_base.nov11c_ns scilab.i -o scilab.s ========= 817.59 Total by adding children 817.59 Total according to speccmds.out $
$ cd /cpu2000 $ mv kit96 larry $ cd larry $ . ./shrc $ runspec -h ksh: runspec: cannot executeThe problem is that the first line of runspec points to a path that no longer exists:
$ head -1 bin/runspec #!/cpu2000/kit96/bin/specperl $Fortunately, SPEC has provided a tool to relocate the tools in the new tree:
$ bin/relocate Top of SPEC tree is '/cpu2000/larry' $ runspec -h | head -3 runspec v2.00 - Copyright (C) 1999 Standard Performance Evaluation Corporation Usage: bin/runspec [options]LIMITATIONS: there are some limitations to this tool. Most notably, it uses perl, so if the tree has been re-arranged in such a way that perl has an identity crisis and can't find itself, you'll be in trouble. Make sure that you have sourced shrc, as in the next example; if it still fails, you may need to reinstall the CPU2000 kit.
$ mv larry carol $ cd carol $ bin/relocate Top of SPEC tree is '/cpu2000/carol' 1062:/cpu2000/carol/bin/specperl: /sbin/loader: Fatal Error: cannot map libperl.so $ . ./shrc $ bin/relocate Top of SPEC tree is '/cpu2000/carol' $ runspec -h | head -2 runspec v2.00 - Copyright (C) 1999 Standard Performance Evaluation Corporation Usage: bin/runspec [options] $
runspec --rawformatso please see runspec.html for basic information on using this command. But a couple of additional points are worth mentioning:
SPEC does allow you to edit the rawfile to make corrections. Just make sure that you only edit the fields located before the "fence":
# =============== do not edit below this point ===================WARNING: Make a backup copy of the rawfile first!
copy CFP2000.001.raw new.raw (edit new.raw to make your changes) rawformat -o ps new.raw runspec v2.00 - Copyright (C) 1999 Standard Performance Evaluation Corporation Loading standard modules.............. Loading runspec modules............. Identifying output formats...asc...config...html...pdf...ps...raw... Formatting new.raw format: PostScript -> new.ps
Notice when editting fields that have more than one line that you need to construct the numbers with correct syntax. The syntax in the rawfile is a bit more picky than in config files (compare the following vs. the config.html section on "Field scoping and continuation". You cannot say something like this:
WRONG: spec.cpu2000.sw_compiler: Intel C Compiler 4.5 for Windows 2000 spec.cpu2000.sw_compiler1: Visual C++ 6.0 C (for libraries)because the tools are not prepared at this point for a mixture of numbered and un-numbered fields. If you need to have continued fields, say instead:
RIGHT: spec.cpu2000.sw_compiler0: Intel C Compiler 4.5 for Windows 2000 spec.cpu2000.sw_compiler1: Visual C++ 6.0 C (for libraries)
To generate a 1-cpu rate result from a speed run, copy the original rawfile to another location, and use rawformat to both generate the new rawfile and whatever other reports you want. For example:
$ grep SPECf CFP2000.015.asc SPECfp_base2000 176 SPECfp2000 -- $ cp CFP2000.015.raw convertme $ rawformat --output_format asc,raw,ps --rate convertme runspec v2.00 - Copyright (C) 1999 Standard Performance Evaluation Corporation Loading standard modules.............. Loading runspec modules............. Identifying output formats...asc...config...html...pdf...ps...raw... Formatting convertme format: ASCII -> convertme.asc format: raw -> convertme.raw format: PostScript -> convertme.ps $ grep SPECf convertme.asc SPECfp_rate_base2000 2.05 SPECfp_rate2000 --
NT Notes: on NT systems, you may find that --output_format will only accept one argument at a time. So, first create the rawfile, by using --output_format raw, then use the new rawfile to create the other reports.
Suppose that your results are flagged as incorrect, but you'd like to have more detail. You could ask for more than 10 lines of detail by changing the config file's default for difflines from 10 to something else, and re-running the experiment. But, you might save a lot of time and avoid the re-run of the experiment, by calling specdiff directly, with a different number of lines for its switch -l.
For example, a file chock-full of wrong answers for ammp has been created by hand. First, let's see how specdiff would normally be run (line wraps added for readability):
$ specinvoke -c 1 -f compare.cmd -n /cpu2000/kit96/bin/specdiff -m -l 10 -a 0.0001 -r 0.003 /cpu2000/kit96/benchspec/CFP2000/188.ammp/data/test/output/ammp.out ammp.out > ammp.out.cmpThe above says that normally we test for correct answers by comparing data/test/output/ammp.out to ammp.out in the current directory. Normally, 10 lines of detail are printed. Let's change that to 15 lines, and compare versus our intentionally wrong file instead:
$ /cpu2000/kit96/bin/specdiff -m -l 15 -a 0.0001 -r 0.003 \ /cpu2000/kit96/benchspec/CFP2000/188.ammp/data/test/output/ammp.out \ ammp.wrong_output 0002: setf mxdq 0.75; setf mxdq 01.75; ^ 0003: setf mmbox 10.; setf mmbox 101.; ^ 0006: setf bbox 35.; setf bbox 351.; ^ 0009: 0.000000 unknown potential type 01.000000 unknown potential type ^ 0010: 1181.693079 bond energy 11811.693079 bond energy ^ 0011: 2056.767980 angle energy 20561.767980 angle energy ^ 0012: 61.501074 hybrid energy 611.501074 hybrid energy ^ 0013: 533.960821 torsion energy 5331.960821 torsion energy ^ 0014: -15410.005122 non-bonded energy -154101.005122 non-bonded energy ^ 0015: -11576.082168 total potential energy -115761.082168 total potential energy ^ 0016: 8584.512662 total kinetic energy 85841.512662 total kinetic energy ^ 0017: -2991.569506 total energy -29911.569506 total energy ^ 0018: 20160.594829 total action 201601.594829 total action ^ 0020: tpac numstp .00001 temp; tpac numstp 1.00001 temp; ^ 0022: 0.000000 unknown potential type 01.000000 unknown potential type ^ 0023: 1184.181101 bond energy 11841.181101 bond energy ^ $Here are the switches supported by specdiff:
$ specdiff -h Usage: /cpu2000/kit96/bin/specdiff [-l #] [-q] file1 [file2] -l # of lines of differences to print -q don't print lines just set return code -a absolute tolerance (for floating point compares) -r relative tolerance (for floating point compares) -t set calctol -s set skiptol -o allow off-by-one errors -O *don't* allow off-by-one errors -m write file2.mis with miscompares -c collapse whitespace (doesn't do what you think it does) -C *don't* collapse whitespace -d Compare against file(s) in data directory --os Set the operating system type (you don't need to do this) -v Set the level of noisiness for the output -h Print this message $
$ go work swim $ cd 00000002 $ ls SWIM7 compare.out swim.err swim_peak.oct6a SWIM7.cmp speccmds.cmd swim.in compare.cmd speccmds.err swim.out compare.err speccmds.out swim.out.cmp $ specinvoke -n ../00000002/swim_peak.oct6a < swim.in > swim.out 2> swim.err $In the above example, we see how swim is invoked. If you wanted to enter your own variations on the above command by hand, you could do so. Here are the switches supported by specinvoke:
$ specinvoke -h Usage: specinvoke [options] [instructionfile] -i # iterations -c # concurrent processes (overrides -u in command file) -E return non-zero exit code if child does -s shell shell to invoke -f file instruction file -o file output file -e file error file -d dir change to dir first -n[n] print a 'dry_run' of commands -A return 0 error code -r don't do command I/O redirection ($command already has it) -h this message
$ cat >tmp.cfg ext = silly FC = f66 $and try it out:
$ runspec --config=tmp --tuning=base --action=build swim runspec v2.00 - Copyright (C) 1999 Standard Performance Evaluation Corporation Loading standard modules.............. Loading runspec modules............. Identifying output formats...asc...config...html...pdf...ps...raw... We will use: 171.swim Compiling Binaries Building 171.swim ref base silly default Error with make 'specmake build > make.out 2> make.err': check file '/cpu2000/kit96/benchspec/CFP2000/171.swim/run/00000004/make.err' Error with make! *** Error building 171.swim If you wish to ignore this error, please use '-I' or ignore errors. $Sure enough, it failed. Let's find the appropriate run directory where our silly build was attempted:
$ go run swim $ grep build list | grep silly | cut -b 1-9 00000004 $ cd 00000004And ask specmake just exactly what it generated:
$ specmake -n f66 -c -o swim.o swim.f f66 swim.o -o swimOK, let's enter the command by hand:
$ f66 -c -o swim.o swim.f ksh: f66: not found $A great convenience of the CPU2000 suite is the fact that you can now proceed to play with all the files in this run directory, to prototype different changes and try out ideas, without fear that you will break anything. As long as you confine your edits to (in this example) $SPEC/benchspec/CFP2000/171.swim/run/00000004/, you are in a private sandbox and will not harm the original sources.
Here are the switches supported by specmake:
$ specmake -h Usage: specmake [options] [target] ... Options: -b, -m Ignored for compatibility. -C DIRECTORY, --directory=DIRECTORY Change to DIRECTORY before doing anything. -d, --debug Print lots of debugging information. -e, --environment-overrides Environment variables override makefiles. -f FILE, --file=FILE, --makefile=FILE Read FILE as a makefile. -h, --help Print this message and exit. -i, --ignore-errors Ignore errors from commands. -I DIRECTORY, --include-dir=DIRECTORY Search DIRECTORY for included makefiles. -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg. -k, --keep-going Keep going when some targets can't be made. -l [N], --load-average[=N], --max-load[=N] Don't start multiple jobs unless load is below N. -n, --just-print, --dry-run, --recon Don't actually run any commands; just print them. -o FILE, --old-file=FILE, --assume-old=FILE Consider FILE to be very old and don't remake it. -p, --print-data-base Print make's internal database. -q, --question Run no commands; exit status says if up to date. -r, --no-builtin-rules Disable the built-in implicit rules. -s, --silent, --quiet Don't echo commands. -S, --no-keep-going, --stop Turns off -k. -t, --touch Touch targets instead of remaking them. -v, --version Print the version number of make and exit. -w, --print-directory Print the current directory. --no-print-directory Turn off -w, even if it was turned on implicitly. -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE Consider FILE to be infinitely new. --warn-undefined-variables Warn when an undefined variable is referenced.