-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathipc_bar_cmp.py
executable file
·70 lines (54 loc) · 1.75 KB
/
ipc_bar_cmp.py
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
#!/usr/bin/env python3
from utils import common as c, target_stats as t
import numpy as np
import pandas as pd
import argparse
parser = argparse.ArgumentParser(usage='experiment_dir baseline_dir -f filter')
parser.add_argument('-f', '--filter', action='store', default=None,
help='benchmark filter file')
parser.add_argument('dirs', action='store', nargs=2,
help='experiment_dir baseline_dir')
args = parser.parse_args()
experiment = args.dirs[0]
baseline = args.dirs[1]
selected_benchmarks = []
if args.filter is not None:
with open(args.filter) as f:
for line in f:
if not line.startswith("#"):
selected_benchmarks.append(line.strip())
else:
selected_benchmarks = None
experiment = c.get_stats_from_parent_dir(experiment, selected_benchmarks,
t.ipc_target, re_targets=True)
baseline = c.get_stats_from_parent_dir(baseline, selected_benchmarks,
t.ipc_target, re_targets=True)
def extract(d: dict):
ret = {}
for k, v in d.items():
ret[k] = v.get('ipc', 1)
return ret
experiment = extract(experiment)
baseline = extract(baseline)
df = pd.DataFrame([experiment, baseline])
relative = df.iloc[0]/df.iloc[1]
relative = relative.fillna(1)
ideal = []
for n in relative:
if n > 1.0:
ideal.append(n)
else:
ideal.append(1.0)
# relative = ideal
print(relative)
mean = [np.mean(relative), 1]
geomean = [np.array(relative).prod() ** (1/len(relative)), 1]
df['mean'] = mean
df['geomean'] = geomean
df['inv_mean'] = np.mean(1/relative)
print(df)
# plt.bar(np.arange(len(df.columns)) - 0.3, df.iloc[0].values, width=0.3 )
# plt.bar(np.arange(len(df.columns)), df.iloc[1].values, width=0.3)
# plt.xticks(np.arange(len(df.columns)), df.columns, rotation=90)
#
# plt.show()