Repository navigation
Expand file tree
/
Copy pathtrace_perf.py
More file actions
executable file
·63 lines (49 loc) · 2.18 KB
/
Copy pathtrace_perf.py
File metadata and controls
executable file
·63 lines (49 loc) · 2.18 KB
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
#!python3
import os
import shutil
import subprocess
import re
# In the report, each mention of either 'branch-misses' or 'L1-dcache-load-misses' means 10k more branch/l1-dcache misses at that timestamp
INTERVAL = 20000
RECORD_CMD = f'perf record -e branch-misses,L1-dcache-load-misses -c {INTERVAL} -- ./simulation '
EXPORT_CMD = 'perf script -F time,event > perf.export'
def create_csv_header(csv):
print("category,count,columns,distribution,time,event,counter", file=csv)
csv.flush()
def trace(args):
subprocess.run(RECORD_CMD + args, shell=True, capture_output=False)
def append_run(category, count, columns, distribution, csv):
subprocess.run(EXPORT_CMD, shell=True, capture_output=True)
prefix = f'{category},{count},{columns},{distribution}'
with open('perf.export', 'r') as f:
for line in f.readlines():
split_line = line.split(':')
print(
f'{prefix},{split_line[0]},{split_line[1].strip()},{INTERVAL}', file=csv)
os.remove('perf.data')
os.remove('perf.export')
def main():
rows = 1 << 24
key_cols = 4
payload_cols = 1 << 5
configurations = [
('comparator', rows, key_cols, [
'col_all', 'col_ss', 'row_all', 'row_iter']), # 'col_branchless', 'row_all_branchless', 'row_norm'
('sort', rows, key_cols, ['pdq_static', 'pdq_dynamic', 'radix']),
# ('merge_key', rows, key_cols, ['row_all', 'row_all_branchless', 'row_norm', 'col_branch', 'col_branchless']),
# ('reorder', rows, payload_cols, ['row', 'col']),
# ('merge_payload', rows, payload_cols, ['row', 'col'])
]
distributions = ['random', 'correlated0.1',
'correlated0.5', 'correlated0.9']
for sim, count, columns, categories in configurations:
for dist in distributions:
fname = f'results/perf_output/trace_{sim}_{dist}.csv'
with open(fname, 'w+') as f:
create_csv_header(f)
for category in categories:
args = f' {sim} {category} {count} {columns} {dist}'
trace(args)
append_run(category, count, columns, dist, f)
if __name__ == '__main__':
main()