1# Copyright (c) 2006-2008 The Regents of The University of Michigan
2# All rights reserved.
3#
4# Redistribution and use in source and binary forms, with or without
5# modification, are permitted provided that the following conditions are
6# met: redistributions of source code must retain the above copyright
7# notice, this list of conditions and the following disclaimer;
8# redistributions in binary form must reproduce the above copyright
9# notice, this list of conditions and the following disclaimer in the
10# documentation and/or other materials provided with the distribution;
11# neither the name of the copyright holders nor the names of its
12# contributors may be used to endorse or promote products derived from
13# this software without specific prior written permission.
14#
15# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
18# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
19# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
21# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26#
27# Authors: Nathan Binkert
28
29from __future__ import print_function
30from __future__ import absolute_import
31
32import os
33import sys
34from os.path import basename, exists, join as joinpath, normpath
35from os.path import isdir, isfile, islink
36
37spec_dist = os.environ.get('M5_CPU2000', '/dist/m5/cpu2000')
38
39def copyfiles(srcdir, dstdir):
40    from filecmp import cmp as filecmp
41    from shutil import copyfile
42
43    srcdir = normpath(srcdir)
44    dstdir = normpath(dstdir)
45
46    if not isdir(dstdir):
47        os.mkdir(dstdir)
48
49    for root, dirs, files in os.walk(srcdir):
50        root = normpath(root)
51        prefix = os.path.commonprefix([root, srcdir])
52
53        root = root[len(prefix):]
54        if root.startswith('/'):
55            root = root[1:]
56
57        for entry in dirs:
58            newdir = joinpath(dstdir, root, entry)
59            if not isdir(newdir):
60                os.mkdir(newdir)
61
62        for entry in files:
63            dest = normpath(joinpath(dstdir, root, entry))
64            src = normpath(joinpath(srcdir, root, entry))
65            if not isfile(dest) or not filecmp(src, dest):
66                copyfile(src, dest)
67
68    # some of the spec benchmarks expect to be run from one directory up.
69    # just create some symlinks that solve the problem
70    inlink = joinpath(dstdir, 'input')
71    outlink = joinpath(dstdir, 'output')
72    if not exists(inlink):
73        os.symlink('.', inlink)
74    if not exists(outlink):
75        os.symlink('.', outlink)
76
77class Benchmark(object):
78    def __init__(self, isa, os, input_set):
79        if not hasattr(self.__class__, 'name'):
80            self.name = self.__class__.__name__
81
82        if not hasattr(self.__class__, 'binary'):
83            self.binary = self.name
84
85        if not hasattr(self.__class__, 'args'):
86            self.args = []
87
88        if not hasattr(self.__class__, 'output'):
89            self.output = '%s.out' % self.name
90
91        if not hasattr(self.__class__, 'simpoint'):
92            self.simpoint = None
93
94        try:
95            func = getattr(self.__class__, input_set)
96        except AttributeError:
97            raise AttributeError(
98                'The benchmark %s does not have the %s input set' % \
99                (self.name, input_set))
100
101        executable = joinpath(spec_dist, 'binaries', isa, os, self.binary)
102        if not isfile(executable):
103            raise AttributeError('%s not found' % executable)
104        self.executable = executable
105
106        # root of tree for input & output data files
107        data_dir = joinpath(spec_dist, 'data', self.name)
108        # optional subtree with files shared across input sets
109        all_dir = joinpath(data_dir, 'all')
110        # dirs for input & output files for this input set
111        inputs_dir = joinpath(data_dir, input_set, 'input')
112        outputs_dir = joinpath(data_dir, input_set, 'output')
113        # keep around which input set was specified
114        self.input_set = input_set
115
116        if not isdir(inputs_dir):
117            raise AttributeError('%s not found' % inputs_dir)
118
119        self.inputs_dir = [ inputs_dir ]
120        if isdir(all_dir):
121            self.inputs_dir += [ joinpath(all_dir, 'input') ]
122        if isdir(outputs_dir):
123            self.outputs_dir = outputs_dir
124
125        if not hasattr(self.__class__, 'stdin'):
126            self.stdin = joinpath(inputs_dir, '%s.in' % self.name)
127            if not isfile(self.stdin):
128                self.stdin = None
129
130        if not hasattr(self.__class__, 'stdout'):
131            self.stdout = joinpath(outputs_dir, '%s.out' % self.name)
132            if not isfile(self.stdout):
133                self.stdout = None
134
135        func(self, isa, os)
136
137    def makeProcessArgs(self, **kwargs):
138        # set up default args for Process object
139        process_args = {}
140        process_args['cmd'] = [ self.name ] + self.args
141        process_args['executable'] = self.executable
142        if self.stdin:
143            process_args['input'] = self.stdin
144        if self.stdout:
145            process_args['output'] = self.stdout
146        if self.simpoint:
147            process_args['simpoint'] = self.simpoint
148        # explicit keywords override defaults
149        process_args.update(kwargs)
150
151        return process_args
152
153    def makeProcess(self, **kwargs):
154        process_args = self.makeProcessArgs(**kwargs)
155
156        # figure out working directory: use m5's outdir unless
157        # overridden by Process's cwd param
158        cwd = process_args.get('cwd')
159
160        if not cwd:
161            from m5 import options
162            cwd = options.outdir
163            process_args['cwd'] = cwd
164        if not isdir(cwd):
165            os.makedirs(cwd)
166        # copy input files to working directory
167        for d in self.inputs_dir:
168            copyfiles(d, cwd)
169        # generate Process object
170        from m5.objects import Process
171        return Process(**process_args)
172
173    def __str__(self):
174        return self.name
175
176class DefaultBenchmark(Benchmark):
177    def ref(self, isa, os): pass
178    def test(self, isa, os): pass
179    def train(self, isa, os): pass
180
181class MinneDefaultBenchmark(DefaultBenchmark):
182    def smred(self, isa, os): pass
183    def mdred(self, isa, os): pass
184    def lgred(self, isa, os): pass
185
186class ammp(MinneDefaultBenchmark):
187    name = 'ammp'
188    number = 188
189    lang = 'C'
190    simpoint = 108*100E6
191
192class applu(MinneDefaultBenchmark):
193    name = 'applu'
194    number = 173
195    lang = 'F77'
196    simpoint = 2179*100E6
197
198class apsi(MinneDefaultBenchmark):
199    name = 'apsi'
200    number = 301
201    lang = 'F77'
202    simpoint = 3408*100E6
203
204class art(DefaultBenchmark):
205    name = 'art'
206    number = 179
207    lang = 'C'
208
209    def test(self, isa, os):
210        self.args = [ '-scanfile', 'c756hel.in',
211                      '-trainfile1', 'a10.img',
212                      '-stride', '2',
213                      '-startx', '134',
214                      '-starty', '220',
215                      '-endx', '139',
216                      '-endy', '225',
217                      '-objects', '1' ]
218        self.output = 'test.out'
219
220    def train(self, isa, os):
221        self.args = [ '-scanfile', 'c756hel.in',
222                      '-trainfile1', 'a10.img',
223                      '-stride', '2',
224                      '-startx', '134',
225                      '-starty', '220',
226                      '-endx', '184',
227                      '-endy', '240',
228                      '-objects', '3' ]
229        self.output = 'train.out'
230
231    def lgred(self, isa, os):
232        self.args = ['-scanfile', 'c756hel.in',
233                     '-trainfile1', 'a10.img',
234                     '-stride', '5',
235                     '-startx', '134',
236                     '-starty', '220',
237                     '-endx', '184',
238                     '-endy', '240',
239                     '-objects', '1' ]
240        self.output = 'lgred.out'
241
242
243class art110(art):
244    def ref(self, isa, os):
245        self.args = [ '-scanfile', 'c756hel.in',
246                      '-trainfile1', 'a10.img',
247                      '-trainfile2', 'hc.img',
248                      '-stride', '2',
249                      '-startx', '110',
250                      '-starty', '200',
251                      '-endx', '160',
252                      '-endy', '240',
253                      '-objects', '10' ]
254        self.output = 'ref.1.out'
255        self.simpoint = 340*100E6
256
257class art470(art):
258    def ref(self, isa, os):
259        self.args = [ '-scanfile', 'c756hel.in',
260                      '-trainfile1', 'a10.img',
261                      '-trainfile2', 'hc.img',
262                      '-stride', '2',
263                      '-startx', '470',
264                      '-starty', '140',
265                      '-endx', '520',
266                      '-endy', '180',
267                      '-objects', '10' ]
268        self.output = 'ref.2.out'
269        self.simpoint = 365*100E6
270
271class equake(DefaultBenchmark):
272    name = 'equake'
273    number = 183
274    lang = 'C'
275    simpoint = 812*100E6
276
277    def lgred(self, isa, os): pass
278
279class facerec(MinneDefaultBenchmark):
280    name = 'facerec'
281    number = 187
282    lang = 'F'
283    simpoint = 375*100E6
284
285class fma3d(MinneDefaultBenchmark):
286    name = 'fma3d'
287    number = 191
288    lang = 'F'
289    simpoint = 2541*100E6
290
291class galgel(MinneDefaultBenchmark):
292    name = 'galgel'
293    number = 178
294    lang = 'F'
295    simpoint = 2491*100E6
296
297class lucas(MinneDefaultBenchmark):
298    name = 'lucas'
299    number = 189
300    lang = 'F'
301    simpoint = 545*100E6
302
303class mesa(Benchmark):
304    name = 'mesa'
305    number = 177
306    lang = 'C'
307    stdin = None
308
309    def __set_args(self, frames):
310        self.args = [ '-frames', frames, '-meshfile', '%s.in' % self.name,
311                      '-ppmfile', '%s.ppm' % self.name ]
312
313    def test(self, isa, os):
314        self.__set_args('10')
315
316    def train(self, isa, os):
317        self.__set_args('500')
318
319    def ref(self, isa, os):
320        self.__set_args('1000')
321        self.simpoint = 1135*100E6
322
323    def lgred(self, isa, os):
324        self.__set_args('1')
325
326class mgrid(MinneDefaultBenchmark):
327    name = 'mgrid'
328    number = 172
329    lang = 'F77'
330    simpoint = 3292*100E6
331
332class sixtrack(DefaultBenchmark):
333    name = 'sixtrack'
334    number = 200
335    lang = 'F77'
336    simpoint = 3043*100E6
337
338    def lgred(self, isa, os): pass
339
340class swim(MinneDefaultBenchmark):
341    name = 'swim'
342    number = 171
343    lang = 'F77'
344    simpoint = 2079*100E6
345
346class wupwise(DefaultBenchmark):
347    name = 'wupwise'
348    number = 168
349    lang = 'F77'
350    simpoint = 3237*100E6
351
352    def lgred(self, isa, os): pass
353
354class bzip2(DefaultBenchmark):
355    name = 'bzip2'
356    number = 256
357    lang = 'C'
358
359    def test(self, isa, os):
360        self.args = [ 'input.random' ]
361
362    def train(self, isa, os):
363        self.args = [ 'input.compressed' ]
364
365class bzip2_source(bzip2):
366    def ref(self, isa, os):
367        self.simpoint = 977*100E6
368        self.args = [ 'input.source', '58' ]
369
370    def lgred(self, isa, os):
371        self.args = [ 'input.source', '1' ]
372
373class bzip2_graphic(bzip2):
374    def ref(self, isa, os):
375        self.simpoint = 718*100E6
376        self.args = [ 'input.graphic', '58' ]
377
378    def lgred(self, isa, os):
379        self.args = [ 'input.graphic', '1' ]
380
381class bzip2_program(bzip2):
382    def ref(self, isa, os):
383        self.simpoint = 458*100E6
384        self.args = [ 'input.program', '58' ]
385
386    def lgred(self, isa, os):
387        self.args = [ 'input.program', '1' ]
388
389class crafty(MinneDefaultBenchmark):
390    name = 'crafty'
391    number = 186
392    lang = 'C'
393    simpoint = 774*100E6
394
395class eon(MinneDefaultBenchmark):
396    name = 'eon'
397    number = 252
398    lang = 'CXX'
399    stdin = None
400
401class eon_kajiya(eon):
402    args = [ 'chair.control.kajiya', 'chair.camera', 'chair.surfaces',
403             'chair.kajiya.ppm', 'ppm', 'pixels_out.kajiya']
404    output = 'kajiya_log.out'
405
406
407class eon_cook(eon):
408    args = [ 'chair.control.cook', 'chair.camera', 'chair.surfaces',
409             'chair.cook.ppm', 'ppm', 'pixels_out.cook' ]
410    output = 'cook_log.out'
411
412class eon_rushmeier(eon):
413    args = [ 'chair.control.rushmeier', 'chair.camera', 'chair.surfaces',
414             'chair.rushmeier.ppm', 'ppm', 'pixels_out.rushmeier' ]
415    output = 'rushmeier_log.out'
416    simpoint = 403*100E6
417
418class gap(DefaultBenchmark):
419    name = 'gap'
420    number = 254
421    lang = 'C'
422
423    def __set_args(self, size):
424        self.args = [ '-l', './', '-q', '-m', size ]
425
426    def test(self, isa, os):
427        self.__set_args('64M')
428
429    def train(self, isa, os):
430        self.__set_args('128M')
431
432    def ref(self, isa, os):
433        self.__set_args('192M')
434        self.simpoint = 674*100E6
435
436    def lgred(self, isa, os):
437        self.__set_args('64M')
438
439    def mdred(self, isa, os):
440        self.__set_args('64M')
441
442    def smred(self, isa, os):
443        self.__set_args('64M')
444
445class gcc(DefaultBenchmark):
446    name = 'gcc'
447    number = 176
448    lang = 'C'
449
450    def test(self, isa, os):
451        self.args = [ 'cccp.i', '-o', 'cccp.s' ]
452
453    def train(self, isa, os):
454        self.args = [ 'cp-decl.i', '-o', 'cp-decl.s' ]
455
456    def smred(self, isa, os):
457        self.args = [ 'c-iterate.i', '-o', 'c-iterate.s' ]
458
459    def mdred(self, isa, os):
460        self.args = [ 'rdlanal.i', '-o', 'rdlanal.s' ]
461
462    def lgred(self, isa, os):
463        self.args = [ 'cp-decl.i', '-o', 'cp-decl.s' ]
464
465class gcc_166(gcc):
466    def ref(self, isa, os):
467        self.simpoint = 389*100E6
468        self.args = [ '166.i', '-o', '166.s' ]
469
470class gcc_200(gcc):
471    def ref(self, isa, os):
472        self.simpoint = 736*100E6
473        self.args = [ '200.i', '-o', '200.s' ]
474
475class gcc_expr(gcc):
476    def ref(self, isa, os):
477        self.simpoint = 36*100E6
478        self.args = [ 'expr.i', '-o', 'expr.s' ]
479
480class gcc_integrate(gcc):
481    def ref(self, isa, os):
482        self.simpoint = 4*100E6
483        self.args = [ 'integrate.i', '-o', 'integrate.s' ]
484
485class gcc_scilab(gcc):
486    def ref(self, isa, os):
487        self.simpoint = 207*100E6
488        self.args = [ 'scilab.i', '-o', 'scilab.s' ]
489
490class gzip(DefaultBenchmark):
491    name = 'gzip'
492    number = 164
493    lang = 'C'
494
495    def test(self, isa, os):
496        self.args = [ 'input.compressed', '2' ]
497
498    def train(self, isa, os):
499        self.args = [ 'input.combined', '32' ]
500
501class gzip_source(gzip):
502    def ref(self, isa, os):
503        self.simpoint = 334*100E6
504        self.args = [ 'input.source', '1' ]
505    def smred(self, isa, os):
506        self.args = [ 'input.source', '1' ]
507    def mdred(self, isa, os):
508        self.args = [ 'input.source', '1' ]
509    def lgred(self, isa, os):
510        self.args = [ 'input.source', '1' ]
511
512class gzip_log(gzip):
513    def ref(self, isa, os):
514        self.simpoint = 265*100E6
515        self.args = [ 'input.log', '60' ]
516    def smred(self, isa, os):
517        self.args = [ 'input.log', '1' ]
518    def mdred(self, isa, os):
519        self.args = [ 'input.log', '1' ]
520    def lgred(self, isa, os):
521        self.args = [ 'input.log', '1' ]
522
523class gzip_graphic(gzip):
524    def ref(self, isa, os):
525        self.simpoint = 653*100E6
526        self.args = [ 'input.graphic', '60' ]
527    def smred(self, isa, os):
528        self.args = [ 'input.graphic', '1' ]
529    def mdred(self, isa, os):
530        self.args = [ 'input.graphic', '1' ]
531    def lgred(self, isa, os):
532        self.args = [ 'input.graphic', '1' ]
533
534class gzip_random(gzip):
535    def ref(self, isa, os):
536        self.simpoint = 623*100E6
537        self.args = [ 'input.random', '60' ]
538    def smred(self, isa, os):
539        self.args = [ 'input.random', '1' ]
540    def mdred(self, isa, os):
541        self.args = [ 'input.random', '1' ]
542    def lgred(self, isa, os):
543        self.args = [ 'input.random', '1' ]
544
545class gzip_program(gzip):
546    def ref(self, isa, os):
547        self.simpoint = 1189*100E6
548        self.args = [ 'input.program', '60' ]
549    def smred(self, isa, os):
550        self.args = [ 'input.program', '1' ]
551    def mdred(self, isa, os):
552        self.args = [ 'input.program', '1' ]
553    def lgred(self, isa, os):
554        self.args = [ 'input.program', '1' ]
555
556class mcf(MinneDefaultBenchmark):
557    name = 'mcf'
558    number = 181
559    lang = 'C'
560    args = [ 'mcf.in' ]
561    simpoint = 553*100E6
562
563class parser(MinneDefaultBenchmark):
564    name = 'parser'
565    number = 197
566    lang = 'C'
567    args = [ '2.1.dict', '-batch' ]
568    simpoint = 1146*100E6
569
570class perlbmk(DefaultBenchmark):
571    name = 'perlbmk'
572    number = 253
573    lang = 'C'
574
575    def test(self, isa, os):
576        self.args = [ '-I.', '-I', 'lib', 'test.pl' ]
577        self.stdin = 'test.in'
578
579class perlbmk_diffmail(perlbmk):
580    def ref(self, isa, os):
581        self.simpoint = 141*100E6
582        self.args = [ '-I', 'lib', 'diffmail.pl', '2', '550', '15', '24',
583                      '23', '100' ]
584
585    def train(self, isa, os):
586        self.args = [ '-I', 'lib', 'diffmail.pl', '2', '350', '15', '24',
587                      '23', '150' ]
588
589class perlbmk_scrabbl(perlbmk):
590    def train(self, isa, os):
591        self.args = [ '-I.', '-I', 'lib', 'scrabbl.pl' ]
592        self.stdin = 'scrabbl.in'
593
594class perlbmk_makerand(perlbmk):
595    def ref(self, isa, os):
596        self.simpoint = 11*100E6
597        self.args = [ '-I', 'lib',  'makerand.pl' ]
598
599    def lgred(self, isa, os):
600        self.args = [ '-I.', '-I', 'lib', 'lgred.makerand.pl' ]
601
602    def mdred(self, isa, os):
603        self.args = [ '-I.', '-I', 'lib', 'mdred.makerand.pl' ]
604
605    def smred(self, isa, os):
606        self.args = [ '-I.', '-I', 'lib', 'smred.makerand.pl' ]
607
608class perlbmk_perfect(perlbmk):
609    def ref(self, isa, os):
610        self.simpoint = 5*100E6
611        self.args = [ '-I', 'lib',  'perfect.pl', 'b', '3', 'm', '4' ]
612
613    def train(self, isa, os):
614        self.args = [ '-I', 'lib', 'perfect.pl', 'b',  '3' ]
615
616class perlbmk_splitmail1(perlbmk):
617    def ref(self, isa, os):
618        self.simpoint = 405*100E6
619        self.args = [ '-I', 'lib', 'splitmail.pl', '850', '5', '19',
620                      '18', '1500' ]
621
622class perlbmk_splitmail2(perlbmk):
623    def ref(self, isa, os):
624        self.args = [ '-I', 'lib', 'splitmail.pl', '704', '12', '26',
625                      '16', '836' ]
626
627class perlbmk_splitmail3(perlbmk):
628    def ref(self, isa, os):
629        self.args = [ '-I', 'lib', 'splitmail.pl', '535', '13', '25',
630                      '24', '1091' ]
631
632class perlbmk_splitmail4(perlbmk):
633    def ref(self, isa, os):
634        self.args = [ '-I', 'lib', 'splitmail.pl', '957', '12', '23',
635                      '26', '1014' ]
636
637class twolf(Benchmark):
638    name = 'twolf'
639    number = 300
640    lang = 'C'
641    stdin = None
642
643    def test(self, isa, os):
644        self.args = [ 'test' ]
645
646    def train(self, isa, os):
647        self.args = [ 'train' ]
648
649    def ref(self, isa, os):
650        self.simpoint = 1066*100E6
651        self.args = [ 'ref' ]
652
653    def smred(self, isa, os):
654        self.args = [ 'smred' ]
655
656    def mdred(self, isa, os):
657        self.args = [ 'mdred' ]
658
659    def lgred(self, isa, os):
660        self.args = [ 'lgred' ]
661
662class vortex(Benchmark):
663    name = 'vortex'
664    number = 255
665    lang = 'C'
666    stdin = None
667
668    def __init__(self, isa, os, input_set):
669        if (isa in ('alpha', 'arm', 'thumb', 'aarch64')):
670            self.endian = 'lendian'
671        elif (isa == 'sparc' or isa == 'sparc32'):
672            self.endian = 'bendian'
673        else:
674            raise AttributeError("unknown ISA %s" % isa)
675
676        super(vortex, self).__init__(isa, os, input_set)
677
678    def test(self, isa, os):
679        self.args = [ '%s.raw' % self.endian ]
680        self.output = 'vortex.out'
681
682    def train(self, isa, os):
683        self.args = [ '%s.raw' % self.endian ]
684        self.output = 'vortex.out'
685
686    def smred(self, isa, os):
687        self.args = [ '%s.raw' % self.endian ]
688        self.output = 'vortex.out'
689
690    def mdred(self, isa, os):
691        self.args = [ '%s.raw' % self.endian ]
692        self.output = 'vortex.out'
693
694    def lgred(self, isa, os):
695        self.args = [ '%s.raw' % self.endian ]
696        self.output = 'vortex.out'
697
698class vortex1(vortex):
699    def ref(self, isa, os):
700        self.args = [ '%s1.raw' % self.endian ]
701        self.output = 'vortex1.out'
702        self.simpoint = 271*100E6
703
704
705class vortex2(vortex):
706    def ref(self, isa, os):
707        self.simpoint = 1024*100E6
708        self.args = [ '%s2.raw' % self.endian ]
709        self.output = 'vortex2.out'
710
711class vortex3(vortex):
712    def ref(self, isa, os):
713        self.simpoint = 564*100E6
714        self.args = [ '%s3.raw' % self.endian ]
715        self.output = 'vortex3.out'
716
717class vpr(MinneDefaultBenchmark):
718    name = 'vpr'
719    number = 175
720    lang = 'C'
721
722# not sure about vpr minnespec place.in
723class vpr_place(vpr):
724    args = [ 'net.in', 'arch.in', 'place.out', 'dum.out', '-nodisp',
725             '-place_only', '-init_t', '5', '-exit_t', '0.005',
726             '-alpha_t', '0.9412', '-inner_num', '2' ]
727    output = 'place_log.out'
728
729class vpr_route(vpr):
730    simpoint = 476*100E6
731    args = [ 'net.in', 'arch.in', 'place.in', 'route.out', '-nodisp',
732             '-route_only', '-route_chan_width', '15',
733             '-pres_fac_mult', '2', '-acc_fac', '1',
734             '-first_iter_pres_fac', '4', '-initial_pres_fac', '8' ]
735    output = 'route_log.out'
736
737all = [ ammp, applu, apsi, art, art110, art470, equake, facerec, fma3d, galgel,
738        lucas, mesa, mgrid, sixtrack, swim, wupwise, bzip2_source,
739        bzip2_graphic, bzip2_program, crafty, eon_kajiya, eon_cook,
740        eon_rushmeier, gap, gcc_166, gcc_200, gcc_expr, gcc_integrate,
741        gcc_scilab, gzip_source, gzip_log, gzip_graphic, gzip_random,
742        gzip_program, mcf, parser, perlbmk_diffmail, perlbmk_makerand,
743        perlbmk_perfect, perlbmk_splitmail1, perlbmk_splitmail2,
744        perlbmk_splitmail3, perlbmk_splitmail4, twolf, vortex1, vortex2,
745        vortex3, vpr_place, vpr_route ]
746
747__all__ = [ x.__name__ for x in all ]
748
749if __name__ == '__main__':
750    from pprint import pprint
751    for bench in all:
752        for input_set in 'ref', 'test', 'train':
753            print('class: %s' % bench.__name__)
754            x = bench('alpha', 'tru64', input_set)
755            print('%s: %s' % (x, input_set))
756            pprint(x.makeProcessArgs())
757            print()
758