1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
"Run all benchmarks"
# Copyright (C) 2010 Anders Logg
#
# This file is part of DOLFIN.
#
# DOLFIN is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# DOLFIN is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with DOLFIN. If not, see <http://www.gnu.org/licenses/>.
#
# Modified by Johannes Ring, 2011, 2012
#
# First added: 2010-03-26
# Last changed: 2012-03-15
import os, sys, time
failed = []
def run_bench(arg, directory, files):
# Skip directories not containing a benchmark
bench_exec = "bench_" + "_".join(directory.split(os.path.sep)[1:])
if not bench_exec in files:
return
# Get name of benchmark
name = directory.replace("./", "").replace("/", "-")
print "Running benchmark %s..." % name
# Remove old logfile
cwd = os.getcwd()
logfile = os.path.join(cwd, "logs", name + ".log")
try:
os.remove(logfile)
except:
pass
# Run benchmark
os.chdir(directory)
t0 = time.time()
status = os.system(os.path.join(os.curdir, bench_exec) + " > %s" % logfile)
elapsed_time = time.time() - t0
# Change to toplevel directory
os.chdir(cwd)
# Report timing
if status == 0:
print "Completed in %g seconds\n" % elapsed_time
else:
global failed
failed.append(name)
print "*** Failed\n"
return
# Get description of benchmark
f = open(logfile)
description = f.read().split("\n")[0]
f.close()
# Get timings (if any)
f = open(logfile)
run_timings = [("", elapsed_time)]
for line in [line for line in f.read().split("\n") if "BENCH" in line]:
words = [word.strip() for word in line.split(" ")]
# Override total time
if len(words) == 2:
run_timings[0] = ("", float(words[1]))
# Add sub timing
elif len(words) == 3:
run_timings.append((words[1].lower(), float(words[2])))
f.close()
# Append to log file
d = time.gmtime()
date = str((d.tm_year, d.tm_mon, d.tm_mday, d.tm_hour, d.tm_min, d.tm_sec))
f = open(os.path.join("logs", "bench.log"), "a")
for (postfix, timing) in run_timings:
if postfix == "":
n = name
d = description
else:
n = "%s-%s" % (name, postfix)
d = "%s (%s)" % (description, postfix)
f.write('%s %s %g "%s"\n' % (date, n, timing, d))
return status == 0
# Iterate over benchmarks
os.path.walk(".", run_bench, None)
# Print summary
if len(failed) == 0:
print "All benchmarks OK"
else:
print "%d benchmark(s) failed:" % len(failed)
for name in failed:
print " " + name
sys.exit(len(failed))
|