summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Shannon <mark@hotpy.org>2022-02-08 11:50:02 (GMT)
committerGitHub <noreply@github.com>2022-02-08 11:50:02 (GMT)
commit328fe3fd2034a91a15b77a24a307e218d02d7bf1 (patch)
treef0bc8bd2d855aaa7a3dc08fa43ed1e671e5fbfe1
parentc8b62bbe46e20d4b6dd556f2fa85960d1269aa45 (diff)
downloadcpython-328fe3fd2034a91a15b77a24a307e218d02d7bf1.zip
cpython-328fe3fd2034a91a15b77a24a307e218d02d7bf1.tar.gz
cpython-328fe3fd2034a91a15b77a24a307e218d02d7bf1.tar.bz2
Print summary stats for overall success of specialization. (GH-31211)
-rw-r--r--Tools/scripts/summarize_stats.py32
1 files changed, 32 insertions, 0 deletions
diff --git a/Tools/scripts/summarize_stats.py b/Tools/scripts/summarize_stats.py
index 6d00207..1271c19 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():