Skip to content

Latest commit

 

History

History
3795 lines (3536 loc) · 78 KB

bm-20250205-azure-x86_64-brandtbucher-justin_compact_exits-3.14.0a4+-31b1d53-pystats-hexiom-vs-base.md

File metadata and controls

3795 lines (3536 loc) · 78 KB

Execution counts

Execution counts for Tier 1 instructions.

The "miss ratio" column shows the percentage of times the instruction executed that it deoptimized. When this happens, the base unspecialized instruction is not counted.

Name Base Count Head Count Change
JUMP_BACKWARD_JIT 1,005,880 1,676,380 66.7%
CALL_BUILTIN_FAST_WITH_KEYWORDS 223,760 344,880 54.1%
RETURN_GENERATOR 223,820 344,940 54.1%
COPY_FREE_VARS 223,820 344,940 54.1%
SET_FUNCTION_ATTRIBUTE 223,820 344,940 54.1%
MAKE_FUNCTION 223,880 345,000 54.1%
FOR_ITER_RANGE 1,308,360 1,976,240 51.0%
LOAD_GLOBAL_BUILTIN 1,789,740 2,365,200 32.2%
CALL_BUILTIN_CLASS 981,520 1,236,160 25.9%
BUILD_TUPLE 548,580 671,100 22.3%
EXTENDED_ARG 357,980 424,060 18.5%
POP_JUMP_IF_NOT_NONE 376,780 443,500 17.7%
LOAD_CONST_MORTAL 698,180 819,300 17.3%
NOT_TAKEN 471,680 535,860 13.6%
CALL_PY_EXACT_ARGS 7,838,040 8,754,420 11.7%
LOAD_ATTR_METHOD_WITH_VALUES 7,300,200 8,095,460 10.9%
BUILD_LIST 618,220 684,300 10.7%
LOAD_ATTR_INSTANCE_VALUE 7,588,560 8,359,120 10.2%
POP_ITER 1,340,160 1,472,500 9.9%
GET_ITER 4,548,820 4,990,660 9.7%
FOR_ITER_LIST 3,854,240 4,172,700 8.3%
LOAD_FAST 43,308,960 46,111,980 6.5%
STORE_FAST 22,116,620 23,408,100 5.8%
BINARY_SUBSCR_LIST_INT 9,937,680 10,285,900 3.5%
BINARY_SUBSCR_GETITEM 5,689,880 5,887,440 3.5%
LOAD_FAST_LOAD_FAST 11,573,220 11,941,700 3.2%
POP_JUMP_IF_TRUE 10,568,060 10,801,720 2.2%
LOAD_DEREF 8,505,860 8,653,280 1.7%
COMPARE_OP_INT 9,759,340 9,927,920 1.7%
ENTER_EXECUTOR 68,939,360 69,779,220 1.2%
LOAD_GLOBAL_MODULE 6,908,120 6,957,720 0.7%
LOAD_SMALL_INT 22,303,440 22,336,220 0.1%
CALL_LEN 1,789,300 1,791,440 0.1%
RESUME_CHECK 31,825,240 31,853,020 0.1%
CALL_METHOD_DESCRIPTOR_O 58,700 58,740 0.1%
BINARY_OP_ADD_INT 7,892,960 7,895,760 0.0%
STORE_DEREF 114,440 114,460 0.0%
LOAD_CONST_IMMORTAL 2,495,800 2,496,060 0.0%
LOAD_ATTR_METHOD_NO_DICT 514,280 514,320 0.0%
CONTAINS_OP 7,916,260 7,916,520 0.0%
POP_JUMP_IF_FALSE 39,941,560 39,941,860 0.0%
POP_TOP 29,278,760 29,278,800 0.0%
RETURN_VALUE 43,827,360 43,827,360 0.0%
TO_BOOL_BOOL 32,763,900 32,763,900 0.0%
INTERPRETER_EXIT 28,723,560 28,723,560 0.0%
YIELD_VALUE 27,287,340 27,287,340 0.0%
SWAP 2,737,040 2,737,040 0.0%
COPY 2,203,800 2,203,800 0.0%
STORE_SUBSCR_LIST_INT 1,281,420 1,281,420 0.0%
BINARY_OP_SUBTRACT_INT 1,117,260 1,117,260 0.0%
STORE_ATTR_INSTANCE_VALUE 651,320 651,320 0.0%
CALL_LIST_APPEND 448,320 448,320 0.0%
BINARY_SUBSCR 421,600 421,600 0.0%
EXIT_INIT_CHECK 236,160 236,160 0.0%
CALL_ALLOC_AND_ENTER_INIT 236,160 236,160 0.0%
MAKE_CELL 207,420 207,420 0.0%
LIST_APPEND 203,520 203,520 0.0%
STORE_FAST_LOAD_FAST 201,260 201,260 0.0%
LOAD_ATTR_CLASS 188,220 188,220 0.0%
JUMP_FORWARD 165,180 165,180 0.0%
LOAD_FAST_AND_CLEAR 156,480 156,480 0.0%
BINARY_SUBSCR_TUPLE_INT 155,560 155,560 0.0%
CALL_PY_GENERAL 154,620 154,620 0.0%
STORE_FAST_STORE_FAST 124,920 124,920 0.0%
UNPACK_SEQUENCE_TWO_TUPLE 124,920 124,920 0.0%
CONTAINS_OP_DICT 109,440 109,440 0.0%
BINARY_SUBSCR_DICT 98,940 98,940 0.0%
COMPARE_OP_STR 36,540 36,540 0.0%
BINARY_SUBSCR_STR_INT 36,480 36,480 0.0%
CALL_KW_NON_PY 27,840 27,840 0.0%
BINARY_OP 25,220 25,220 0.0%
BINARY_SLICE 23,040 23,040 0.0%
STORE_SUBSCR_DICT 18,240 18,240 0.0%
CALL_STR_1 11,520 11,520 0.0%
BINARY_OP_MULTIPLY_INT 7,680 7,680 0.0%
CALL_METHOD_DESCRIPTOR_FAST 6,180 6,180 0.0%
PUSH_NULL 1,560 1,560 0.0%
CALL_NON_PY_GENERAL 1,320 1,320 0.0%
LOAD_ATTR_MODULE 1,260 1,260 0.0%
CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS 1,020 1,020 0.0%
CALL_METHOD_DESCRIPTOR_NOARGS 1,020 1,020 0.0%
BUILD_MAP 960 960 0.0%
CALL_KW_PY 960 960 0.0%
LOAD_ATTR_METHOD_LAZY_DICT 960 960 0.0%
LOAD_ATTR 420 420 0.0%
CALL 380 380 0.0%
LOAD_GLOBAL 200 200 0.0%
CALL_FUNCTION_EX 120 120 0.0%
TO_BOOL 100 100 0.0%
NOP 60 60 0.0%
CALL_INTRINSIC_1 60 60 0.0%
FOR_ITER 60 60 0.0%
IS_OP 60 60 0.0%
LIST_EXTEND 60 60 0.0%
LOAD_FAST_CHECK 60 60 0.0%
BINARY_OP_SUBTRACT_FLOAT 60 60 0.0%
UNPACK_SEQUENCE 40 40 0.0%
COMPARE_OP 20 20 0.0%

Pair counts

Pair counts for top 100 opcode pairs

Pairs of specialized operations that deoptimize and are then followed by the corresponding unspecialized instruction are not counted as pairs.

Not included in comparative output.

Predecessor/Successor Pairs

Top 5 predecessors and successors of each Tier 1 opcode.

This does not include the unspecialized instructions that occur after a specialized instruction deoptimizes.

Not included in comparative output.

Specialization stats

Specialization stats by family

BINARY_OP

specialization stats for BINARY_OP family
Kind Base Count Base Ratio Head Count Head Ratio Change
deferred

Lists the number of "deferred" (i.e. not specialized) instructions executed.

24,960 0.2% 24,960 0.2% 0.0%
hit

Specialized instructions that complete.

11,242,620 99.8% 11,242,620 99.8% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 20 7.7% 20 7.7% 0.0%
Failure 240 92.3% 240 92.3% 0.0%
Failure kind Base Count Base Ratio Head Count Head Ratio Change
multiply different types 160 66.7% 160 66.7% 0.0%
remainder 80 33.3% 80 33.3% 0.0%

BINARY_SLICE

specialization stats for BINARY_SLICE family
Kind Base Count Base Ratio Head Count Head Ratio Change
deferred

Lists the number of "deferred" (i.e. not specialized) instructions executed.

23,040 100.0% 23,040 100.0% 0.0%

BINARY_SUBSCR

specialization stats for BINARY_SUBSCR family
Kind Base Count Base Ratio Head Count Head Ratio Change
deferred

Lists the number of "deferred" (i.e. not specialized) instructions executed.

421,440 0.5% 421,440 0.5% 0.0%
hit

Specialized instructions that complete.

82,219,320 99.5% 82,219,320 99.5% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 40 25.0% 40 25.0% 0.0%
Failure 120 75.0% 120 75.0% 0.0%
Failure kind Base Count Base Ratio Head Count Head Ratio Change
list slice 120 100.0% 120 100.0% 0.0%

CALL

specialization stats for CALL family
Kind Base Count Base Ratio Head Count Head Ratio Change
hit

Specialized instructions that complete.

76,126,140 100.0% 76,126,140 100.0% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 380 100.0% 380 100.0% 0.0%
Failure 0 0.0% 0 0.0%

COMPARE_OP

specialization stats for COMPARE_OP family
Kind Base Count Base Ratio Head Count Head Ratio Change
hit

Specialized instructions that complete.

53,532,540 100.0% 53,532,540 100.0% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 20 100.0% 20 100.0% 0.0%
Failure 0 0.0% 0 0.0%

CONTAINS_OP

specialization stats for CONTAINS_OP family
Kind Base Count Base Ratio Head Count Head Ratio Change
deferred

Lists the number of "deferred" (i.e. not specialized) instructions executed.

7,914,260 98.6% 7,914,520 98.6% 0.0%
hit

Specialized instructions that complete.

109,440 1.4% 109,440 1.4% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 0 0.0% 0 0.0%
Failure 2,000 100.0% 2,000 100.0% 0.0%
Failure kind Base Count Base Ratio Head Count Head Ratio Change
list 2,000 100.0% 2,000 100.0% 0.0%

FOR_ITER

specialization stats for FOR_ITER family
Kind Base Count Base Ratio Head Count Head Ratio Change
hit

Specialized instructions that complete.

5,060,840 98.0% 6,047,180 98.3% 19.5%
deferred

Lists the number of "deferred" (i.e. not specialized) instructions executed.

60 0.0% 60 0.0% 0.0%
miss

Specialized instructions that deopt.

101,760 2.0% 101,760 1.7% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 1,920 100.0% 1,920 100.0% 0.0%
Failure 0 0.0% 0 0.0%

LOAD_ATTR

specialization stats for LOAD_ATTR family
Kind Base Count Base Ratio Head Count Head Ratio Change
deferred

Lists the number of "deferred" (i.e. not specialized) instructions executed.

60 0.0% 60 0.0% 0.0%
hit

Specialized instructions that complete.

105,165,540 100.0% 105,165,540 100.0% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 340 94.4% 340 94.4% 0.0%
Failure 20 5.6% 20 5.6% 0.0%

LOAD_GLOBAL

specialization stats for LOAD_GLOBAL family
Kind Base Count Base Ratio Head Count Head Ratio Change
hit

Specialized instructions that complete.

9,408,100 100.0% 9,743,800 100.0% 3.6%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 200 100.0% 200 100.0% 0.0%
Failure 0 0.0% 0 0.0%

STORE_ATTR

specialization stats for STORE_ATTR family
Kind Base Count Base Ratio Head Count Head Ratio Change
hit

Specialized instructions that complete.

708,480 100.0% 708,480 100.0% 0.0%

STORE_SUBSCR

specialization stats for STORE_SUBSCR family
Kind Base Count Base Ratio Head Count Head Ratio Change
hit

Specialized instructions that complete.

3,494,400 100.0% 3,494,400 100.0% 0.0%

TO_BOOL

specialization stats for TO_BOOL family
Kind Base Count Base Ratio Head Count Head Ratio Change
deferred

Lists the number of "deferred" (i.e. not specialized) instructions executed.

60 0.0% 60 0.0% 0.0%
hit

Specialized instructions that complete.

32,763,900 100.0% 32,763,900 100.0% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 20 50.0% 20 50.0% 0.0%
Failure 20 50.0% 20 50.0% 0.0%
Failure kind Base Count Base Ratio Head Count Head Ratio Change
sequence 20 100.0% 20 100.0% 0.0%

UNPACK_SEQUENCE

specialization stats for UNPACK_SEQUENCE family
Kind Base Count Base Ratio Head Count Head Ratio Change
hit

Specialized instructions that complete.

124,920 100.0% 124,920 100.0% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 40 100.0% 40 100.0% 0.0%
Failure 0 0.0% 0 0.0%

Specialization effectiveness

specialization effectiveness

All entries are execution counts. Should add up to the total number of Tier 1 instructions executed.

Instructions Base Count Base Ratio Head Count Head Ratio Change
Specialized misses

Specialized instructions, e.g. LOAD_ATTR_MODULE that deopt.

102,480 0.0% 107,260 0.0% 4.7%
Specialized hits

Specialized instructions, e.g. LOAD_ATTR_MODULE that complete.

146,838,460 27.9% 152,842,080 28.3% 4.1%
Basic

Instructions that are not and cannot be specialized, e.g. LOAD_FAST.

371,884,820 70.5% 379,046,120 70.1% 1.9%
Not specialized

Instructions that could be specialized but aren't, e.g. LOAD_ATTR, BINARY_SLICE.

8,387,340 1.6% 8,387,600 1.6% 0.0%

Deferred by instruction

Breakdown of deferred (not specialized) instruction counts by family
Name Base Count Base Ratio Head Count Head Ratio Change
CONTAINS_OP 7,914,260 94.4% 7,914,520 94.4% 0.0%
BINARY_SUBSCR 421,440 5.0% 421,440 5.0% 0.0%
BINARY_OP 24,960 0.3% 24,960 0.3% 0.0%
BINARY_SLICE 23,040 0.3% 23,040 0.3% 0.0%
TO_BOOL 60 0.0% 60 0.0% 0.0%
FOR_ITER 60 0.0% 60 0.0% 0.0%
LOAD_ATTR 60 0.0% 60 0.0% 0.0%
STORE_SLICE 0 0.0% 0 0.0%
CACHE 0 0.0% 0 0.0%
CALL_FUNCTION_EX 0 0.0% 0 0.0%

Misses by instruction

Breakdown of misses (specialized deopts) instruction counts by family
Name Base Count Base Ratio Head Count Head Ratio Change
RESUME 720 0.7% 5,500 4.9% 663.9%
RESUME_CHECK 720 0.7% 5,500 4.9% 663.9%
FOR_ITER_LIST 50,880 49.3% 50,880 45.1% 0.0%
FOR_ITER_RANGE 50,880 49.3% 50,880 45.1% 0.0%
CACHE 0 0.0% 0 0.0%
CALL_FUNCTION_EX 0 0.0% 0 0.0%
EXIT_INIT_CHECK 0 0.0% 0 0.0%
GET_ITER 0 0.0% 0 0.0%
INTERPRETER_EXIT 0 0.0% 0 0.0%
MAKE_FUNCTION 0 0.0% 0 0.0%

Call stats

Inlined calls and frame stats

This shows what fraction of calls to Python functions are inlined (i.e. not having a call at the C level) and for those that are not, where the call comes from. The various categories overlap.

Also includes the count of frame objects created.

Base Count Base Ratio Head Count Head Ratio Change
Calls to PyEval_EvalDefault 28,723,620 39.7% 28,723,620 39.7% 0.0%
Calls to Python functions inlined 43,591,140 60.3% 43,591,140 60.3% 0.0%
Calls via PyEval_EvalFrame (total) 28,723,620 39.7% 28,723,620 39.7% 0.0%
Calls via PyEval_EvalFrame (vector) 60 0.0% 60 0.0% 0.0%
Calls via PyEval_EvalFrame (generator) 28,723,560 39.7% 28,723,560 39.7% 0.0%
Calls via PyEval_EvalFrame (legacy) 0 0.0% 0 0.0%
Calls via PyEval_EvalFrame (function vectorcall) 60 0.0% 60 0.0% 0.0%
Calls via PyEval_EvalFrame (build class) 0 0.0% 0 0.0%
Calls via PyEval_EvalFrame (slot) 0 0.0% 0 0.0%
Calls via PyEval_EvalFrame (function ex) 60 0.0% 60 0.0% 0.0%
Calls via PyEval_EvalFrame (api) 0 0.0% 0 0.0%
Calls via PyEval_EvalFrame (method) 0 0.0% 0 0.0%
Frame objects created 0 0.0% 0 0.0%
Frames pushed 43,827,360 60.6% 43,827,360 60.6% 0.0%

Object stats

Allocations, frees and dict materializatons

Below, "allocations" means "allocations that are not from a freelist". Total allocations = "Allocations from freelist" + "Allocations".

"Inline values" is the number of values arrays inlined into objects.

The cache hit/miss numbers are for the MRO cache, split into dunder and other names.

Base Count Base Ratio Head Count Head Ratio Change
Allocations over 4 kbytes 80 0.0% 160 0.0% 100.0%
Allocations to 4 kbytes 1,400 0.0% 1,800 0.0% 28.6%
Method cache misses 52 48 -7.7%
Mortal decrefs 433,387,390 32.8% 401,796,046 31.0% -7.3%
Method cache collisions 43 40 -7.0%
Mortal increfs 520,646,268 52.0% 486,031,985 49.9% -6.6%
Interpreter mortal increfs 146,949,020 14.7% 153,203,300 15.7% 4.3%
Interpreter immortal increfs 90,501,040 9.0% 93,072,900 9.6% 2.8%
Interpreter immortal decrefs 155,238,500 11.7% 157,466,280 12.2% 1.4%
Interpreter mortal decrefs 250,325,280 18.9% 253,582,860 19.6% 1.3%
Immortal increfs 243,436,278 24.3% 240,855,013 24.7% -1.1%
Frees to freelist 7,930,560 7,955,740 0.3%
Allocations from freelist 7,930,640 41.9% 7,955,820 42.0% 0.3%
Immortal decrefs 483,723,716 36.6% 482,332,232 37.2% -0.3%
Frees 11,305,522 11,307,161 0.0%
Method cache hits 51,168 51,172 0.0%
Allocations 10,982,640 58.1% 10,983,180 58.0% 0.0%
Allocations to 512 bytes 10,981,160 58.1% 10,981,220 58.0% 0.0%
Inline values 236,160 236,160 0.0%
Materialize dict (on request) 0 0.0% 0 0.0%
Materialize dict (new key) 0 0.0% 0 0.0%
Materialize dict (too big) 0 0.0% 0 0.0%
Materialize dict (str subclass) 0 0.0% 0 0.0%
Method cache dunder hits 94,139 94,139 0.0%
Method cache dunder misses 1 1 0.0%

GC stats

GC collections and effectiveness

Collected/visits gives some measure of efficiency.

Generation Base Collections Base Objects collected Base Object visits Base Reachable from roots Base Not reachable from roots Head Collections Head Objects collected Head Object visits Head Reachable from roots Head Not reachable from roots
0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0

Optimization (Tier 2) stats

statistics about the Tier 2 optimizer
Base Count Base Ratio Head Count Head Ratio Change
Traces executed

The number of traces that were executed

129,695,000 100,496,340 -22.5%
Traces created

The number of traces that were successfully created.

660 3.9% 740 4.4% 12.1%
Uops executed

The total number of uops (micro-operations) that were executed

2,672,761,520 2,060.8% 2,580,943,940 2,568.2% -3.4%
Optimization attempts

The number of times a potential trace is identified. Specifically, this occurs in the JUMP BACKWARD instruction when the counter reaches a threshold.

16,860 16,920 0.4%
Trace too short

A potential trace is abandoned because it it too short.

16,200 96.1% 16,180 95.6% -0.1%
Trace stack underflow

A potential trace is abandoned because it pops more frames than it pushes.

16,280 96.6% 16,260 96.1% -0.1%
Trace stack overflow

A trace is truncated because it would require more than 5 stack frames.

0 0.0% 0 0.0%
Trace too long

A trace is truncated because it is longer than the instruction buffer.

0 0.0% 0 0.0%
Inner loop found

A trace is truncated because it has an inner loop

0 0.0% 0 0.0%
Recursive call

A trace is truncated because it has a recursive call.

0 0.0% 0 0.0%
Low confidence

A trace is abandoned because the likelihood of the jump to top being taken is too low.

0 0.0% 0 0.0%
Executors invalidated

The number of executors that were invalidated due to watched dictionary changes.

0 0.0% 0 0.0%
Base Count Base Ratio Head Count Head Ratio Change
Optimizer attempts

The number of times the trace optimizer (_Py_uop_analyze_and_optimize) was run.

660 740 12.1%
Optimizer successes

The number of traces that were successfully optimized.

660 100.0% 740 100.0% 12.1%
Optimizer no memory

The number of optimizations that failed due to no memory.

0 0.0% 0 0.0%
Remove globals builtins changed

The builtins changed during optimization

0 0.0% 0 0.0%
Remove globals incorrect keys

The keys in the globals dictionary aren't what was expected

0 0.0% 0 0.0%

JIT memory stats

JIT memory stats
Base Size (bytes) Base Ratio Head Size (bytes) Head Ratio Change
Freed memory size

The size of the memory freed from the JIT traces

491,520 6.5% 12,124,160 73.6% 2,366.7%
Code size

The size of the memory allocated for the code of the JIT traces

5,193,220 68.9% 11,974,140 72.7% 130.6%
Data size

The size of the memory allocated for the data of the JIT traces

883,360 11.7% 2,007,200 12.2% 127.2%
Total memory size

The total size of the memory allocated for the JIT traces

7,536,640 16,465,920 118.5%
Padding size

The size of the memory allocated for the padding of the JIT traces

1,460,060 19.4% 2,484,580 15.1% 70.2%
Trampoline size

The size of the memory allocated for the trampolines of the JIT traces

0 0.0% 0 0.0%

JIT trace total memory histogram

JIT trace total memory histogram
Size (bytes) Base Count Base Ratio Head Count Head Ratio Change
<= 4,096 160 24.2% 140 12.5% -12.5%
<= 8,192 240 36.4% 400 35.7% 66.7%
<= 16,384 160 24.2% 280 25.0% 75.0%
<= 32,768 100 15.2% 220 19.6% 120.0%
<= 65,536 80 7.1%

Trace length histogram

trace length histogram
Range Base Count Base Ratio Head Count Head Ratio Change
<= 8 140 21.2% 120 16.2% -14.3%
<= 16 0 0.0% 0 0.0%
<= 32 260 39.4% 380 51.4% 46.2%
<= 64 140 21.2% 140 18.9% 0.0%
<= 128 80 12.1% 80 10.8% 0.0%
<= 256 40 6.1% 20 2.7% -50.0%

Optimized trace length histogram

optimized trace length histogram
Range Base Count Base Ratio Head Count Head Ratio Change
<= 4 100 15.2% 80 10.8% -20.0%
<= 8 40 6.1% 40 5.4% 0.0%
<= 16 20 3.0% 20 2.7% 0.0%
<= 32 280 42.4% 380 51.4% 35.7%
<= 64 140 21.2% 160 21.6% 14.3%
<= 128 80 12.1% 60 8.1% -25.0%

Trace run length histogram

trace run length histogram

Uop execution stats

uop execution stats
Name Base Count Head Count Change
_DEOPT 420 3,400 709.5%
_RESUME_CHECK 25,880 1,080 -95.8%
_STORE_FAST_7 25,880 1,080 -95.8%
_STORE_FAST_4 1,700 300 -82.4%
_BUILD_LIST 145,040 78,960 -45.6%
_GUARD_IS_NOT_NONE_POP 146,480 79,760 -45.5%
_GUARD_BUILTINS_VERSION_PUSH_KEYS 710,240 420,880 -40.7%
_GUARD_GLOBALS_VERSION 710,240 420,880 -40.7%
_LOAD_GLOBAL_BUILTINS_FROM_KEYS 710,240 420,880 -40.7%
_EXIT_TRACE 101,261,440 73,027,820 -27.9%
_CALL_BUILTIN_CLASS 1,113,260 858,620 -22.9%
_START_EXECUTOR 129,695,000 100,496,340 -22.5%
_GET_ITER 2,601,440 2,159,600 -17.0%
_BINARY_SUBSCR_CHECK_FUNC 1,244,200 1,046,640 -15.9%
_BINARY_SUBSCR_INIT_CALL 1,244,200 1,046,640 -15.9%
_JUMP_TO_TOP 4,611,840 5,328,120 15.5%
_INIT_CALL_PY_EXACT_ARGS_0 1,264,160 1,093,440 -13.5%
_CHECK_STACK_SPACE_OPERAND 1,238,280 1,092,360 -11.8%
_INIT_CALL_PY_EXACT_ARGS_2 1,171,160 1,049,980 -10.3%
_MAKE_FUNCTION 1,212,400 1,091,280 -10.0%
_RETURN_GENERATOR 1,212,400 1,091,280 -10.0%
_COPY_FREE_VARS 1,212,400 1,091,280 -10.0%
_SET_FUNCTION_ATTRIBUTE 1,212,400 1,091,280 -10.0%
_CALL_BUILTIN_FAST_WITH_KEYWORDS 1,212,400 1,091,280 -10.0%
_BUILD_TUPLE 1,233,300 1,110,780 -9.9%
_BINARY_OP_ADD_INT 29,920 27,120 -9.4%
_LOAD_SMALL_INT 403,020 372,420 -7.6%
_GUARD_BOTH_INT 1,860,480 1,736,560 -6.7%
_LOAD_FAST_5 3,635,940 3,412,180 -6.2%
_STORE_FAST_3 4,003,860 3,815,840 -4.7%
_STORE_FAST_5 33,060 31,660 -4.2%
_PUSH_FRAME 29,671,420 28,557,480 -3.8%
_DYNAMIC_EXIT 28,433,140 27,465,120 -3.4%
_CHECK_FUNCTION_EXACT_ARGS 28,377,280 27,460,900 -3.2%
_CHECK_FUNCTION_VERSION 28,377,280 27,460,900 -3.2%
_SAVE_RETURN_OFFSET 28,427,220 27,510,840 -3.2%
_POP_TOP 4,455,520 4,323,140 -3.0%
_LOAD_FAST_4 38,276,180 37,149,380 -2.9%
_GUARD_DORV_VALUES_INST_ATTR_FROM_DICT 27,164,880 26,369,620 -2.9%
_GUARD_KEYS_VERSION 27,164,880 26,369,620 -2.9%
_LOAD_ATTR_METHOD_WITH_VALUES 27,164,880 26,369,620 -2.9%
_LOAD_FAST 27,267,980 26,482,940 -2.9%
_CHECK_STACK_SPACE 27,188,940 26,418,480 -2.8%
_LOAD_FAST_3 6,904,680 6,715,240 -2.7%
_STORE_FAST 29,816,540 29,068,800 -2.5%
_INIT_CALL_PY_EXACT_ARGS_1 25,991,900 25,367,420 -2.4%
_ITER_NEXT_RANGE 27,737,080 27,095,380 -2.3%
_GUARD_NOT_EXHAUSTED_RANGE 29,583,540 28,915,660 -2.3%
_ITER_CHECK_RANGE 29,583,540 28,915,660 -2.3%
_LOAD_FAST_6 33,745,720 33,075,260 -2.0%
_STORE_FAST_6 16,792,980 16,466,300 -1.9%
_CHECK_VALIDITY_AND_SET_IP 88,811,000 87,352,840 -1.6%
_PUSH_NULL 37,063,420 36,463,160 -1.6%
_CHECK_PERIODIC 69,921,000 68,874,820 -1.5%
_SET_IP 318,949,320 314,936,460 -1.3%
_CHECK_MANAGED_OBJECT_HAS_VALUES 62,047,200 61,276,640 -1.2%
_LOAD_ATTR_INSTANCE_VALUE 62,047,200 61,276,640 -1.2%
_LOAD_CONST_INLINE 39,097,920 38,631,180 -1.2%
_GUARD_IS_TRUE_POP 29,024,960 28,685,060 -1.2%
_GUARD_TYPE_VERSION 71,697,860 70,945,240 -1.0%
_CHECK_VALIDITY 286,851,320 283,953,040 -1.0%
_CHECK_FUNCTION 36,236,580 35,900,880 -0.9%
_MAKE_WARM 134,306,840 133,101,160 -0.9%
_ITER_CHECK_LIST 38,760,520 38,437,300 -0.8%
_GUARD_NOT_EXHAUSTED_LIST 38,724,040 38,405,580 -0.8%
_GUARD_TOS_INT 5,643,880 5,598,600 -0.8%
_LOAD_FAST_0 48,589,740 48,200,320 -0.8%
_GUARD_IS_FALSE_POP 13,649,920 13,755,860 0.8%
_LOAD_FAST_7 2,342,040 2,327,380 -0.6%
_ITER_NEXT_LIST 35,474,720 35,263,760 -0.6%
_BINARY_SUBSCR_LIST_INT 65,006,640 64,658,420 -0.5%
_LOAD_DEREF 29,338,420 29,191,000 -0.5%
_COMPARE_OP_INT 43,736,660 43,568,080 -0.4%
_LOAD_CONST_INLINE_BORROW 4,446,140 4,455,800 0.2%
_LOAD_FAST_1 66,071,000 65,933,740 -0.2%
_STORE_FAST_2 1,994,120 1,992,680 -0.1%
_LOAD_FAST_2 4,991,940 4,988,800 -0.1%
_CALL_METHOD_DESCRIPTOR_O 359,980 359,940 -0.0%
_LOAD_ATTR_METHOD_NO_DICT 359,980 359,940 -0.0%
_CALL_LEN 33,417,740 33,415,600 -0.0%
_GUARD_NOS_INT 37,866,200 37,864,020 -0.0%
_LOAD_SMALL_INT_1 41,621,800 41,619,660 -0.0%
_STORE_DEREF 1,544,500 1,544,480 -0.0%
_CONTAINS_OP 28,459,180 28,458,920 -0.0%
_LOAD_SMALL_INT_0 24,308,600 24,308,560 -0.0%
_TIER2_RESUME_CHECK 39,027,840 39,027,840 0.0%
_STORE_FAST_1 26,276,160 26,276,160 0.0%
_SWAP 4,446,640 4,446,640 0.0%
_COPY 4,389,480 4,389,480 0.0%
_STORE_SUBSCR_LIST_INT 2,194,740 2,194,740 0.0%
_BINARY_OP_SUBTRACT_INT 2,194,740 2,194,740 0.0%
_LIST_APPEND 1,954,560 1,954,560 0.0%
_BINARY_SUBSCR 1,935,360 1,935,360 0.0%
_GUARD_DORV_NO_DICT 57,160 57,160 0.0%
_GUARD_TYPE_VERSION_AND_LOCK 57,160 57,160 0.0%
_STORE_ATTR_INSTANCE_VALUE 57,160 57,160 0.0%
_BINARY_SUBSCR_TUPLE_INT 49,940 49,940 0.0%
_CHECK_FUNCTION_VERSION_INLINE 49,940 49,940 0.0%

Pair counts

Pair counts for top 100 Non-JIT uop pairs

Pairs of specialized operations that deoptimize and are then followed by the corresponding unspecialized instruction are not counted as pairs.

Not included in comparative output.

Unsupported opcodes

unsupported opcodes

Optimizer errored out with opcode

Optimization stopped after encountering this opcode

Rare events

Counts of rare/unlikely events
Event Base Count Head Count Change
set class

Setting an object's class, obj.__class__ = ...

0 0
set bases

Setting the bases of a class, cls.__bases__ = ...

0 0
set eval frame func

Setting the PEP 523 frame eval function _PyInterpreterState_SetFrameEvalFunc()

0 0
builtin dict

Modifying the builtins, __builtins__.__dict__[var] = ...

0 0
func modification

Modifying a function, e.g. func.__defaults__ = ..., etc.

0 0
watched dict modification

A watched dict has been modified

0 0
watched globals modification

A watched globals() dict has been modified

0 0

Meta stats

Meta statistics
Base Count Head Count Change
Number of data files 20 20 0.0%

Stats gathered on: 2025-02-06