forked from limbo018/DREAMPlace
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathextract_runtime.py
More file actions
66 lines (54 loc) · 1.83 KB
/
Copy pathextract_runtime.py
File metadata and controls
66 lines (54 loc) · 1.83 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
64
65
66
import sys
import os
import re
import glob
def extract_runtime(log_dir):
log_files = sorted(glob.glob(os.path.join(log_dir, "*.log")))
if not log_files:
print("No .log files found in %s" % log_dir)
sys.exit(1)
placement_re = re.compile(
r"\[INFO\s*\] DREAMPlace - placement takes ([\d.]+) seconds"
)
legality_re = re.compile(
r"\[INFO\s*\] Legality check takes ([\d.]+) ms"
)
rows = []
for log_file in log_files:
name = os.path.basename(log_file)
placement_sec = None
legality_ms = None
with open(log_file) as f:
for line in f:
m = placement_re.search(line)
if m:
placement_sec = float(m.group(1))
m = legality_re.search(line)
if m:
legality_ms = float(m.group(1))
rows.append((name, placement_sec, legality_ms))
# Print table
name_w = max(len(r[0]) for r in rows)
name_w = max(name_w, len("Benchmark"))
hdr = "| %-*s | %15s | %18s |" % (name_w, "Benchmark", "Placement (s)", "Legalization (ms)")
sep = "|" + "-" * (name_w + 2) + "|" + "-" * 17 + "|" + "-" * 20 + "|"
print(hdr)
print(sep)
total_placement = 0.0
total_legality = 0.0
for name, p, l in rows:
p_str = "%.3f" % p if p is not None else "N/A"
l_str = "%.6f" % l if l is not None else "N/A"
print("| %-*s | %15s | %18s |" % (name_w, name, p_str, l_str))
if p is not None:
total_placement += p
if l is not None:
total_legality += l
print(sep)
print(
"| %-*s | %15.3f | %18.6f |"
% (name_w, "TOTAL", total_placement, total_legality)
)
if __name__ == "__main__":
log_dir = sys.argv[1] if len(sys.argv) > 1 else "apollo/log"
extract_runtime(log_dir)