diff options
author | Mark Shannon <mark@hotpy.org> | 2022-06-22 07:50:02 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-22 07:50:02 (GMT) |
commit | f805d37641bd982fd7f252e51e2fdae836fce61c (patch) | |
tree | 2c8d106250d614ea6aa54a8b8c707e5431426a08 /Tools | |
parent | 9a479c3c1063f434629a1f7553f5a4715d738f30 (diff) | |
download | cpython-f805d37641bd982fd7f252e51e2fdae836fce61c.zip cpython-f805d37641bd982fd7f252e51e2fdae836fce61c.tar.gz cpython-f805d37641bd982fd7f252e51e2fdae836fce61c.tar.bz2 |
Stats: Add summary of top instructions for misses and deferred specialization. (GH-94072)
Diffstat (limited to 'Tools')
-rw-r--r-- | Tools/scripts/summarize_stats.py | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/Tools/scripts/summarize_stats.py b/Tools/scripts/summarize_stats.py index a856bbb..93a9b6b 100644 --- a/Tools/scripts/summarize_stats.py +++ b/Tools/scripts/summarize_stats.py @@ -188,6 +188,12 @@ class Section: print("</details>") print() +def to_str(x): + if isinstance(x, int): + return format(x, ",d") + else: + return str(x) + def emit_table(header, rows): width = len(header) header_line = "|" @@ -203,8 +209,8 @@ def emit_table(header, rows): print(under_line) for row in rows: if width is not None and len(row) != width: - raise ValueError("Wrong number of elements in row '" + str(rows) + "'") - print("|", " | ".join(str(i) for i in row), "|") + raise ValueError("Wrong number of elements in row '" + str(row) + "'") + print("|", " | ".join(to_str(i) for i in row), "|") print() def emit_execution_counts(opcode_stats, total): @@ -251,6 +257,18 @@ def emit_specialization_overview(opcode_stats, total): ("Not specialized", not_specialized, f"{not_specialized*100/total:0.1f}%"), ("Specialized", specialized, f"{specialized*100/total:0.1f}%"), )) + for title, field in (("Deferred", "specialization.deferred"), ("Misses", "specialization.miss")): + total = 0 + counts = [] + for i, opcode_stat in enumerate(opcode_stats): + value = opcode_stat.get(field, 0) + counts.append((value, opname[i])) + total += value + counts.sort(reverse=True) + if total: + with Section(f"{title} by instruction", 3): + rows = [ (name, count, f"{100*count/total:0.1f}%") for (count, name) in counts[:10] ] + emit_table(("Name", "Count:", "Ratio:"), rows) def emit_call_stats(stats): stats_path = os.path.join(os.path.dirname(__file__), "../../Include/pystats.h") |