Skip to content

Commit b3d4fe0

Browse files
authored
Merge pull request #156 from faster-cpython/color-results
Highlight interpreter heavy benchmarks
2 parents f62aecd + ae8c781 commit b3d4fe0

File tree

2 files changed

+42
-6
lines changed

2 files changed

+42
-6
lines changed

Diff for: bench_runner/plot.py

+30
Original file line numberDiff line numberDiff line change
@@ -21,21 +21,49 @@
2121
from . import result
2222

2323

24+
INTERPRETER_HEAVY = {
25+
"chaos",
26+
"coroutines",
27+
"deepcopy",
28+
"deltablue",
29+
"generators",
30+
"go",
31+
"hexiom",
32+
"logging",
33+
"nbody",
34+
"pickle_pure_python",
35+
"pprint",
36+
"raytrace",
37+
"richards",
38+
"richards_super",
39+
"sqlglot_parse",
40+
"tomli_loads",
41+
"unpack_sequence",
42+
"unpickle_pure_python",
43+
}
44+
45+
2446
def plot_diff_pair(ax, data):
2547
if not len(data):
2648
return []
2749

2850
all_data = []
2951
violins = []
52+
colors = []
3053

3154
for i, (name, values, mean) in enumerate(data):
3255
if values is not None:
3356
idx = np.round(np.linspace(0, len(values) - 1, 100)).astype(int)
3457
violins.append(values[idx])
3558
all_data.extend(values)
59+
if name in INTERPRETER_HEAVY:
60+
colors.append("red")
61+
else:
62+
colors.append("C0")
3663
else:
3764
violins.append([1.0])
3865
all_data.extend([1.0])
66+
colors.append("C0")
3967
ax.text(1.01, i + 1, "insignificant")
4068

4169
violins.append(all_data)
@@ -50,6 +78,8 @@ def plot_diff_pair(ax, data):
5078
)
5179

5280
violin["cquantiles"].set_linestyle(":")
81+
for body, color in zip(violin["bodies"], colors):
82+
body.set_facecolor(color)
5383

5484
for i, values in enumerate(violins):
5585
if not np.all(values == [1.0]):

Diff for: bench_runner/scripts/generate_results.py

+12-6
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from collections import defaultdict
66
import datetime
77
import io
8+
import multiprocessing
89
from pathlib import Path
910
import sys
1011
from typing import Iterable, Optional, TextIO
@@ -133,27 +134,32 @@ def write_pystats_diff(filename: Path, compare: Comparison) -> None:
133134
}
134135

135136

137+
def _worker(args):
138+
func, output_filename, compare = args
139+
func(output_filename, compare)
140+
141+
136142
def save_generated_results(results: Iterable[Result], force: bool = False) -> None:
137143
"""
138144
Write out the comparison tables and plots for every result.
139145
140146
By default, files are only written out if they don't already exist. To force
141147
regeneration, pass ``force=True``.
142148
"""
149+
work = []
143150
for result in results:
144151
for compare in result.bases.values():
145152
if compare.filename is not None:
146153
for suffix, func in RESULT_TYPES[result.result_info[0]].items():
147154
filename = compare.filename.parent / (
148155
compare.filename.stem + suffix
149156
)
150-
if not filename.exists() or force:
151-
util.status(".")
152-
func(filename, compare)
153-
else:
154-
util.status("/")
157+
if not filename.exists() or force: # or suffix == ".png":
158+
work.append((func, filename, compare))
155159

156-
print()
160+
pool = multiprocessing.Pool()
161+
for i, _ in enumerate(pool.imap_unordered(_worker, work)):
162+
print(f"{i:04d}/{len(work):04d}", end="\r")
157163

158164

159165
def output_results_index(

0 commit comments

Comments
 (0)