Skip to content

Commit 2b54222

Browse files
committed
bench_harness - add warmup iterations (to skip)
- remove unused verbose flag from harness
1 parent 669357f commit 2b54222

File tree

1 file changed

+28
-22
lines changed

1 file changed

+28
-22
lines changed

mx.graalpython/bench_harness.py

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -43,23 +43,29 @@
4343
import sys
4444
from time import time
4545

46-
_HRULE = '-'.join(['' for i in range(120)])
47-
ATTR_WARMUP = '__warmup__'
46+
_HRULE = '-'.join(['' for i in range(80)])
4847
ATTR_BENCHMARK = '__benchmark__'
4948

5049

50+
def _as_int(value):
51+
if isinstance(value, (list, tuple)):
52+
value = value[0]
53+
54+
if not isinstance(value, int):
55+
return int(value)
56+
return value
57+
58+
5159
class BenchRunner(object):
52-
def __init__(self, bench_file, bench_args=None, iterations=1, verbose=False):
60+
def __init__(self, bench_file, bench_args=None, iterations=1, warmup=0):
5361
if bench_args is None:
5462
bench_args = []
5563
self.bench_module = BenchRunner.get_bench_module(bench_file)
5664
self.bench_args = bench_args
57-
self.verbose = verbose
58-
if isinstance(iterations, (list, tuple)):
59-
iterations = iterations[0]
60-
if isinstance(iterations, str):
61-
iterations = int(iterations)
62-
self.iterations = iterations
65+
self.iterations = _as_int(iterations)
66+
assert isinstance(self.iterations, int)
67+
self.warmup = _as_int(warmup)
68+
assert isinstance(self.warmup, int)
6369

6470
@staticmethod
6571
def get_bench_module(bench_file):
@@ -95,33 +101,33 @@ def _call_attr(self, attr_name):
95101
attr()
96102

97103
def run(self):
98-
if self.verbose:
99-
print(_HRULE)
100-
print(self.bench_module.__name__)
101-
print(_HRULE)
102-
103-
print("### warming up ... ")
104-
self._call_attr(ATTR_WARMUP)
105-
print("### running benchmark ... ")
104+
print(_HRULE)
105+
print("### %s, %s warmup iterations, %s bench iterations " % (self.bench_module.__name__, self.warmup, self.iterations))
106+
print(_HRULE)
106107

107108
bench_func = self._get_attr(ATTR_BENCHMARK)
108109
if bench_func and hasattr(bench_func, '__call__'):
109-
for i in range(self.iterations):
110+
if self.warmup:
111+
print("### warming up for %s iterations ... " % self.warmup)
112+
for _ in range(self.warmup):
113+
bench_func(*self.bench_args)
114+
115+
for iteration in range(self.iterations):
110116
start = time()
111117
bench_func(*self.bench_args)
112-
duration = "%.3f\n" % (time() - start)
113-
print("### iteration={}, name={}, duration={}".format(i, self.bench_module.__name__, duration))
118+
duration = "%.3f" % (time() - start)
119+
print("### iteration=%s, name=%s, duration=%s" % (iteration, self.bench_module.__name__, duration))
114120

115121

116122
def run_benchmark(prog, args):
117123
parser = argparse.ArgumentParser(prog=prog, description="Run specified benchmark.")
118-
parser.add_argument("-v", "--verbose", help="Verbose output.", action="store_true")
124+
parser.add_argument("-w", "--warmup", help="The number of iterations to skip as warmup.", default=0)
119125
parser.add_argument("-i", "--iterations", help="The number of iterations top run each benchmark.", default=1)
120126
parser.add_argument("bench_file", metavar='BENCH', help="Path to the benchmark to execute.", nargs=1)
121127
parser.add_argument("bench_args", metavar='ARGS', help="Path to the benchmarks to execute.", nargs='*', default=None)
122128

123129
args = parser.parse_args(args)
124-
BenchRunner(args.bench_file[0], bench_args=args.bench_args, iterations=args.iterations, verbose=args.verbose).run()
130+
BenchRunner(args.bench_file[0], bench_args=args.bench_args, iterations=args.iterations, warmup=args.warmup).run()
125131

126132

127133
if __name__ == '__main__':

0 commit comments

Comments
 (0)