[Python-checkins] Print summary stats for overall success of specialization. (GH-31211)
markshannon
webhook-mailer at python.org
Tue Feb 8 06:50:09 EST 2022
https://github.com/python/cpython/commit/328fe3fd2034a91a15b77a24a307e218d02d7bf1
commit: 328fe3fd2034a91a15b77a24a307e218d02d7bf1
branch: main
author: Mark Shannon <mark at hotpy.org>
committer: markshannon <mark at hotpy.org>
date: 2022-02-08T11:50:02Z
summary:
Print summary stats for overall success of specialization. (GH-31211)
files:
M Tools/scripts/summarize_stats.py
diff --git a/Tools/scripts/summarize_stats.py b/Tools/scripts/summarize_stats.py
index 6d0020739a31f..1271c194e96a1 100644
--- a/Tools/scripts/summarize_stats.py
+++ b/Tools/scripts/summarize_stats.py
@@ -77,6 +77,33 @@ def extract_opcode_stats(stats):
return opcode_stats
+def categorized_counts(opcode_stats):
+ basic = 0
+ specialized = 0
+ not_specialized = 0
+ specialized_instructions = {
+ op for op in opcode._specialized_instructions
+ if "__" not in op and "ADAPTIVE" not in op}
+ adaptive_instructions = {
+ op for op in opcode._specialized_instructions
+ if "ADAPTIVE" in op}
+ for i, opcode_stat in enumerate(opcode_stats):
+ if "execution_count" not in opcode_stat:
+ continue
+ count = opcode_stat['execution_count']
+ name = opname[i]
+ if "specializable" in opcode_stat:
+ not_specialized += count
+ elif name in adaptive_instructions:
+ not_specialized += count
+ elif name in specialized_instructions:
+ miss = opcode_stat.get("specialization.miss", 0)
+ not_specialized += miss
+ specialized += count - miss
+ else:
+ basic += count
+ return basic, not_specialized, specialized
+
def main():
stats = gather_stats()
opcode_stats = extract_opcode_stats(stats)
@@ -102,6 +129,11 @@ def main():
for i, opcode_stat in enumerate(opcode_stats):
name = opname[i]
print_specialization_stats(name, opcode_stat)
+ basic, not_specialized, specialized = categorized_counts(opcode_stats)
+ print("Specialization effectiveness:")
+ print(f" Base instructions {basic} {basic*100/total:0.1f}%")
+ print(f" Not specialized {not_specialized} {not_specialized*100/total:0.1f}%")
+ print(f" Specialized {specialized} {specialized*100/total:0.1f}%")
print("Call stats:")
total = 0
for key, value in stats.items():
More information about the Python-checkins
mailing list