Skip to content

Latest commit

 

History

History
3616 lines (3374 loc) · 73.9 KB

bm-20250121-azure-x86_64-brandtbucher-remove_optimizer_api-3.14.0a4+-085e172-pystats-deepcopy-vs-base.md

File metadata and controls

3616 lines (3374 loc) · 73.9 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
LOAD_FAST 75,010,600 75,010,600 0.0%
RETURN_VALUE 48,508,400 48,508,400 0.0%
LOAD_FAST_LOAD_FAST 40,344,840 40,344,840 0.0%
PUSH_NULL 39,977,420 39,977,420 0.0%
ENTER_EXECUTOR 39,830,500 39,830,500 0.0%
POP_TOP 24,023,940 24,023,940 0.0%
CALL_BUILTIN_O 23,255,140 23,255,140 0.0%
STORE_FAST 22,897,300 22,897,300 0.0%
STORE_SUBSCR_DICT 18,032,680 18,032,680 0.0%
LOAD_GLOBAL_BUILTIN 17,729,520 17,729,520 0.0%
CALL_PY_GENERAL 16,398,700 16,398,700 0.0%
POP_JUMP_IF_FALSE 15,483,440 15,483,440 0.0%
RESUME_CHECK 12,627,740 12,627,740 0.0%
LOAD_CONST_IMMORTAL 8,757,720 8,757,720 0.0%
IS_OP 8,571,100 8,571,100 0.0%
LOAD_GLOBAL_MODULE 8,204,800 8,204,800 0.0%
GET_ITER 6,857,580 6,857,580 0.0%
JUMP_FORWARD 6,758,600 6,758,600 0.0%
CALL_PY_EXACT_ARGS 6,666,960 6,666,960 0.0%
NOP 5,744,820 5,744,820 0.0%
BINARY_SUBSCR_DICT 5,744,640 5,744,640 0.0%
BUILD_LIST 5,714,340 5,714,340 0.0%
LOAD_DEREF 5,683,620 5,683,620 0.0%
LOAD_METHOD_NO_DICT 5,002,380 5,002,380 0.0%
POP_JUMP_IF_NONE 4,909,780 4,909,780 0.0%
TO_BOOL_BOOL 4,792,500 4,792,500 0.0%
CALL_NON_PY_GENERAL 3,844,180 3,844,180 0.0%
CALL_LIST_APPEND 3,809,280 3,809,280 0.0%
LOAD_ATTR 2,984,480 2,984,480 0.0%
CHECK_EXC_MATCH 2,856,960 2,856,960 0.0%
POP_EXCEPT 2,856,960 2,856,960 0.0%
PUSH_EXC_INFO 2,856,960 2,856,960 0.0%
LIST_APPEND 2,856,960 2,856,960 0.0%
CALL_FUNCTION_EX 2,826,600 2,826,600 0.0%
LOAD_ATTR_MODULE 2,096,360 2,096,360 0.0%
FOR_ITER_TUPLE 2,071,840 2,071,840 0.0%
MAKE_CELL 1,904,940 1,904,940 0.0%
INTERPRETER_EXIT 1,904,740 1,904,740 0.0%
SWAP 1,904,640 1,904,640 0.0%
FOR_ITER_LIST 1,904,640 1,904,640 0.0%
BINARY_OP_SUBTRACT_FLOAT 1,843,320 1,843,320 0.0%
BINARY_OP_ADD_FLOAT 1,843,200 1,843,200 0.0%
FOR_ITER 1,137,180 1,137,180 0.0%
STORE_FAST_STORE_FAST 1,075,420 1,075,420 0.0%
UNPACK_SEQUENCE_TWO_TUPLE 1,075,420 1,075,420 0.0%
CALL_BUILTIN_FAST 1,075,200 1,075,200 0.0%
LOAD_CONST_MORTAL 1,018,240 1,018,240 0.0%
STORE_FAST_LOAD_FAST 986,440 986,440 0.0%
TO_BOOL 952,900 952,900 0.0%
BUILD_TUPLE 952,860 952,860 0.0%
LIST_EXTEND 952,620 952,620 0.0%
COPY_FREE_VARS 952,560 952,560 0.0%
CALL_INTRINSIC_1 952,500 952,500 0.0%
POP_JUMP_IF_TRUE 952,500 952,500 0.0%
LOAD_FAST_AND_CLEAR 952,320 952,320 0.0%
CALL_ISINSTANCE 952,320 952,320 0.0%
MAKE_FUNCTION 922,020 922,020 0.0%
SET_FUNCTION_ATTRIBUTE 921,900 921,900 0.0%
RETURN_GENERATOR 921,600 921,600 0.0%
YIELD_VALUE 921,600 921,600 0.0%
LOAD_ATTR_CLASS 921,600 921,600 0.0%
JUMP_BACKWARD 317,620
POP_ITER 282,960 282,960 0.0%
LOAD_SMALL_INT 253,160 253,160 0.0%
FOR_ITER_RANGE 187,900 187,900 0.0%
CALL_TYPE_1 184,660 184,660 0.0%
CONTAINS_OP_SET 184,660 184,660 0.0%
CALL_METHOD_DESCRIPTOR_FAST 178,940 178,940 0.0%
STORE_ATTR 129,800 129,800 0.0%
BUILD_MAP 123,120 123,120 0.0%
CALL_BUILTIN_CLASS 95,740 95,740 0.0%
STORE_SUBSCR_LIST_INT 64,840 64,840 0.0%
STORE_ATTR_INSTANCE_VALUE 61,860 61,860 0.0%
POP_JUMP_IF_NOT_NONE 61,680 61,680 0.0%
CALL_METHOD_DESCRIPTOR_NOARGS 61,660 61,660 0.0%
LOAD_METHOD_WITH_VALUES 31,140 31,140 0.0%
NOT_TAKEN 30,720 30,720 0.0%
CALL_TUPLE_1 30,720 30,720 0.0%
TO_BOOL_NONE 30,720 30,720 0.0%
CALL 800 800 0.0%
LOAD_ATTR_INSTANCE_VALUE 720 720 0.0%
LOAD_METHOD 480 480 0.0%
STORE_NAME 480 480 0.0%
LOAD_GLOBAL 360 360 0.0%
STORE_DEREF 300 300 0.0%
BINARY_OP 200 200 0.0%
BINARY_SUBSCR_TUPLE_INT 180 180 0.0%
CALL_METHOD_DESCRIPTOR_O 180 180 0.0%
CALL_ALLOC_AND_ENTER_INIT 120 120 0.0%
EXIT_INIT_CHECK 80 80 0.0%
BINARY_SUBSCR 60 60 0.0%
UNPACK_SEQUENCE 60 60 0.0%
LOAD_BUILD_CLASS 60 60 0.0%
LOAD_LOCALS 60 60 0.0%
LOAD_NAME 60 60 0.0%
CALL_BUILTIN_FAST_WITH_KEYWORDS 60 60 0.0%
JUMP_BACKWARD_JIT 317,620

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.

120 0.0% 120 0.0% 0.0%
hit

Specialized instructions that complete.

3,686,460 100.0% 3,686,460 100.0% 0.0%
miss

Specialized instructions that deopt.

60 0.0% 60 0.0% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 40 50.0% 40 50.0% 0.0%
Failure 40 50.0% 40 50.0% 0.0%
Failure kind Base Count Base Ratio Head Count Head Ratio Change
multiply different types 40 100.0% 40 100.0% 0.0%

BINARY_SUBSCR

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

Specialized instructions that complete.

6,666,420 100.0% 6,666,420 100.0% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 60 100.0% 60 100.0% 0.0%
Failure 0 0.0% 0 0.0%

CALL

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

Specialized instructions that complete.

106,384,760 97.9% 106,384,760 97.9% 0.0%
miss

Specialized instructions that deopt.

2,228,120 2.1% 2,228,120 2.1% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 42,840 100.0% 42,840 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
hit

Specialized instructions that complete.

34,222,080 100.0% 34,222,080 100.0% 0.0%

FOR_ITER

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

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

1,136,820 21.4% 1,136,820 21.4% 0.0%
hit

Specialized instructions that complete.

4,164,380 78.6% 4,164,380 78.6% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 0 0.0% 0 0.0%
Failure 360 100.0% 360 100.0% 0.0%
Failure kind Base Count Base Ratio Head Count Head Ratio Change
zip 280 77.8% 280 77.8% 0.0%
dict items 80 22.2% 80 22.2% 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.

2,983,240 10.6% 2,983,240 10.6% 0.0%
hit

Specialized instructions that complete.

25,134,680 89.4% 25,134,680 89.4% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 380 30.6% 380 30.6% 0.0%
Failure 860 69.4% 860 69.4% 0.0%
Failure kind Base Count Base Ratio Head Count Head Ratio Change
method 540 62.8% 540 62.8% 0.0%
overriding descriptor 320 37.2% 320 37.2% 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.

25,934,320 100.0% 25,934,320 100.0% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 360 100.0% 360 100.0% 0.0%
Failure 0 0.0% 0 0.0%

LOAD_METHOD

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

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

180 4.9% 180 4.9% 0.0%
miss

Specialized instructions that deopt.

3,180 86.9% 3,180 86.9% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 300 83.3% 300 83.3% 0.0%
Failure 60 16.7% 60 16.7% 0.0%

STORE_ATTR

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

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

129,680 67.7% 129,680 67.7% 0.0%
hit

Specialized instructions that complete.

55,500 29.0% 55,500 29.0% 0.0%
miss

Specialized instructions that deopt.

6,360 3.3% 6,360 3.3% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 180 75.0% 180 75.0% 0.0%
Failure 60 25.0% 60 25.0% 0.0%
Failure kind Base Count Base Ratio Head Count Head Ratio Change
split dict 60 100.0% 60 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.

21,258,240 100.0% 21,258,240 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.

952,500 11.2% 952,500 11.2% 0.0%
hit

Specialized instructions that complete.

7,588,020 88.8% 7,588,020 88.8% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 60 15.0% 60 15.0% 0.0%
Failure 340 85.0% 340 85.0% 0.0%
Failure kind Base Count Base Ratio Head Count Head Ratio Change
tuple 280 82.4% 280 82.4% 0.0%
sequence 60 17.6% 60 17.6% 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.

10,291,380 100.0% 10,291,380 100.0% 0.0%
Success Base Count Base Ratio Head Count Head Ratio Change
Success 60 100.0% 60 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 hits

Specialized instructions, e.g. LOAD_ATTR_MODULE that complete.

148,544,340 27.6% 148,861,960 27.6% 0.2%
Basic

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

382,819,680 71.0% 382,502,060 71.0% -0.1%
Not specialized

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

5,206,320 1.0% 5,206,320 1.0% 0.0%
Specialized misses

Specialized instructions, e.g. LOAD_ATTR_MODULE that deopt.

2,238,140 0.4% 2,238,140 0.4% 0.0%

Deferred by instruction

Breakdown of deferred (not specialized) instruction counts by family
Name Base Count Base Ratio Head Count Head Ratio Change
LOAD_ATTR 2,983,240 57.3% 2,983,240 57.3% 0.0%
FOR_ITER 1,136,820 21.9% 1,136,820 21.9% 0.0%
TO_BOOL 952,500 18.3% 952,500 18.3% 0.0%
STORE_ATTR 129,680 2.5% 129,680 2.5% 0.0%
LOAD_METHOD 180 0.0% 180 0.0% 0.0%
BINARY_OP 120 0.0% 120 0.0% 0.0%
BINARY_SLICE 0 0.0% 0 0.0%
STORE_SLICE 0 0.0% 0 0.0%
CACHE 0 0.0% 0 0.0%
BINARY_SUBSCR 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
CALL_PY_GENERAL 2,228,080 99.5% 2,228,080 99.5% 0.0%
STORE_ATTR_INSTANCE_VALUE 6,360 0.3% 6,360 0.3% 0.0%
LOAD_METHOD_WITH_VALUES 3,180 0.1% 3,180 0.1% 0.0%
RESUME 420 0.0% 420 0.0% 0.0%
RESUME_CHECK 420 0.0% 420 0.0% 0.0%
BINARY_OP_ADD_FLOAT 60 0.0% 60 0.0% 0.0%
CALL_ALLOC_AND_ENTER_INIT 40 0.0% 40 0.0% 0.0%
CACHE 0 0.0% 0 0.0%
CALL_FUNCTION_EX 0 0.0% 0 0.0%
CHECK_EXC_MATCH 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 1,904,920 3.8% 1,904,920 3.8% 0.0%
Calls to Python functions inlined 48,446,600 96.2% 48,446,600 96.2% 0.0%
Calls via PyEval_EvalFrame (total) 1,904,920 3.8% 1,904,920 3.8% 0.0%
Calls via PyEval_EvalFrame (vector) 61,720 0.1% 61,720 0.1% 0.0%
Calls via PyEval_EvalFrame (generator) 1,843,200 3.7% 1,843,200 3.7% 0.0%
Calls via PyEval_EvalFrame (legacy) 0 0.0% 0 0.0%
Calls via PyEval_EvalFrame (function vectorcall) 61,660 0.1% 61,660 0.1% 0.0%
Calls via PyEval_EvalFrame (build class) 60 0.0% 60 0.0% 0.0%
Calls via PyEval_EvalFrame (slot) 0 0.0% 0 0.0%
Calls via PyEval_EvalFrame (function ex) 1,874,100 3.7% 1,874,100 3.7% 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 2,856,960 5.7% 2,856,960 5.7% 0.0%
Frames pushed 48,508,400 96.3% 48,508,400 96.3% 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
Method cache dunder misses 457 92,674 20,178.8%
Method cache collisions 498 92,724 18,519.3%
Method cache misses 207 226 9.2%
Method cache dunder hits 13,213,383 13,121,166 -0.7%
Immortal decrefs 246,205,429 19.7% 246,343,774 19.7% 0.1%
Immortal increfs 295,878,397 26.0% 296,016,742 26.0% 0.0%
Mortal decrefs 453,450,099 36.2% 453,496,238 36.2% 0.0%
Mortal increfs 493,432,471 43.3% 493,478,604 43.3% 0.0%
Method cache hits 5,260,593 5,260,574 -0.0%
Frees 65,466,260 65,466,256 -0.0%
Allocations from freelist 34,056,840 35.2% 34,056,840 35.2% 0.0%
Frees to freelist 34,056,320 34,056,320 0.0%
Allocations 62,610,380 64.8% 62,610,380 64.8% 0.0%
Allocations to 512 bytes 62,610,040 64.8% 62,610,040 64.8% 0.0%
Allocations to 4 kbytes 340 0.0% 340 0.0% 0.0%
Allocations over 4 kbytes 0 0.0% 0 0.0%
Inline values 952,440 952,440 0.0%
Interpreter mortal increfs 313,413,780 27.5% 313,413,780 27.5% 0.0%
Interpreter mortal decrefs 440,603,480 35.2% 440,603,480 35.2% 0.0%
Interpreter immortal increfs 36,514,540 3.2% 36,514,540 3.2% 0.0%
Interpreter immortal decrefs 112,578,380 9.0% 112,578,380 9.0% 0.0%
Materialize dict (on request) 952,440 100.0% 952,440 100.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%

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
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.

9,580 9,580 0.0%
Traces created

The number of traces that were successfully created.

120 1.3% 120 1.3% 0.0%
Trace stack overflow

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

0 0.0% 0 0.0%
Trace stack underflow

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

8,300 86.6% 8,300 86.6% 0.0%
Trace too long

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

0 0.0% 0 0.0%
Trace too short

A potential trace is abandoned because it it too short.

9,460 98.7% 9,460 98.7% 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%
Traces executed

The number of traces that were executed

84,131,140 84,131,140 0.0%
Uops executed

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

1,899,139,240 2,257.4% 1,899,139,240 2,257.4% 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.

120 120 0.0%
Optimizer successes

The number of traces that were successfully optimized.

120 100.0% 120 100.0% 0.0%
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%

Trace length histogram

trace length histogram
Range Base Count Base Ratio Head Count Head Ratio Change
<= 1 0 0.0% 0 0.0%
<= 2 0 0.0% 0 0.0%
<= 4 0 0.0% 0 0.0%
<= 8 20 16.7% 20 16.7% 0.0%
<= 16 0 0.0% 0 0.0%
<= 32 60 50.0% 60 50.0% 0.0%
<= 64 20 16.7% 20 16.7% 0.0%
<= 128 20 16.7% 20 16.7% 0.0%

Optimized trace length histogram

optimized trace length histogram
Range Base Count Base Ratio Head Count Head Ratio Change
<= 1 0 0.0% 0 0.0%
<= 2 0 0.0% 0 0.0%
<= 4 20 16.7% 20 16.7% 0.0%
<= 8 0 0.0% 0 0.0%
<= 16 0 0.0% 0 0.0%
<= 32 80 66.7% 80 66.7% 0.0%
<= 64 0 0.0% 0 0.0%
<= 128 20 16.7% 20 16.7% 0.0%

Trace run length histogram

trace run length histogram
Range Base Count Base Ratio Head Count Head Ratio Change
<= 1 0 0.0% 0 0.0%

Uop execution stats

uop execution stats
Name Base Count Head Count Change
_SET_IP 214,263,560 214,263,560 0.0%
_CHECK_VALIDITY 179,612,820 179,612,820 0.0%
_PUSH_NULL 94,516,780 94,516,780 0.0%
_CHECK_VALIDITY_AND_SET_IP 89,331,800 89,331,800 0.0%
_MAKE_WARM 85,974,340 85,974,340 0.0%
_START_EXECUTOR 84,131,140 84,131,140 0.0%
_LOAD_FAST_0 83,778,100 83,778,100 0.0%
_CHECK_PERIODIC 65,667,640 65,667,640 0.0%
_LOAD_CONST_INLINE 63,339,420 63,339,420 0.0%
_EXIT_TRACE 59,660,380 59,660,380 0.0%
_LOAD_FAST_3 51,611,240 51,611,240 0.0%
_CHECK_FUNCTION 51,058,240 51,058,240 0.0%
_LOAD_FAST_1 48,539,440 48,539,440 0.0%
_LOAD_CONST_INLINE_BORROW 40,515,940 40,515,940 0.0%
_STORE_FAST_3 39,594,300 39,594,300 0.0%
_LOAD_FAST_2 37,737,760 37,737,760 0.0%
_GUARD_IS_TRUE_POP 37,263,000 37,263,000 0.0%
_TIER2_RESUME_CHECK 36,802,540 36,802,540 0.0%
_CALL_TYPE_1 34,037,420 34,037,420 0.0%
_CONTAINS_OP_SET 34,037,420 34,037,420 0.0%
_LOAD_FAST_5 30,873,500 30,873,500 0.0%
_STORE_FAST_5 28,630,960 28,630,960 0.0%
_CHECK_FUNCTION_VERSION 25,499,580 25,499,580 0.0%
_DYNAMIC_EXIT 23,548,800 23,548,800 0.0%
_PUSH_FRAME 23,548,800 23,548,800 0.0%
_PY_FRAME_GENERAL 23,548,800 23,548,800 0.0%
_SAVE_RETURN_OFFSET 23,548,800 23,548,800 0.0%
_LOAD_FAST_4 19,445,720 19,445,720 0.0%
_STORE_FAST_4 18,923,420 18,923,420 0.0%
_LOAD_METHOD_NO_DICT 17,085,660 17,085,660 0.0%
_GUARD_IS_NOT_NONE_POP 15,273,220 15,273,220 0.0%
_LOAD_FAST_6 14,817,880 14,817,880 0.0%
_CALL_METHOD_DESCRIPTOR_FAST 14,320,900 14,320,900 0.0%
_CALL_BUILTIN_O 14,315,420 14,315,420 0.0%
_FOR_ITER_TIER_TWO 12,902,400 12,902,400 0.0%
_GUARD_NOT_EXHAUSTED_LIST 12,595,200 12,595,200 0.0%
_ITER_CHECK_LIST 12,595,200 12,595,200 0.0%
_STORE_FAST_6 10,999,780 10,999,780 0.0%
_ITER_NEXT_LIST 10,690,560 10,690,560 0.0%
_GUARD_TYPE_VERSION 10,598,320 10,598,320 0.0%
_IS_OP 9,676,760 9,676,760 0.0%
_UNPACK_SEQUENCE_TWO_TUPLE 9,215,960 9,215,960 0.0%
_POP_TOP 8,779,800 8,779,800 0.0%
_GUARD_IS_FALSE_POP 8,294,380 8,294,380 0.0%
_GUARD_NOT_EXHAUSTED_TUPLE 5,085,920 5,085,920 0.0%
_ITER_CHECK_TUPLE 5,085,920 5,085,920 0.0%
_BUILD_MAP 4,607,940 4,607,940 0.0%
_CALL_BUILTIN_FAST 3,686,400 3,686,400 0.0%
_GET_ITER 3,188,040 3,188,040 0.0%
_LOAD_FAST 3,123,240 3,123,240 0.0%
_LOAD_FAST_7 2,764,800 2,764,800 0.0%
_GUARD_IS_NONE_POP 2,764,780 2,764,780 0.0%
_STORE_SUBSCR_DICT 2,764,760 2,764,760 0.0%
_CALL_METHOD_DESCRIPTOR_NOARGS 2,764,760 2,764,760 0.0%
_ITER_NEXT_TUPLE 2,754,600 2,754,600 0.0%
_STORE_FAST 2,201,640 2,201,640 0.0%
_TO_BOOL_BOOL 1,843,200 1,843,200 0.0%
_JUMP_TO_TOP 1,843,200 1,843,200 0.0%
_STORE_FAST_7 1,843,200 1,843,200 0.0%
_STORE_FAST_1 1,843,180 1,843,180 0.0%
_CALL_NON_PY_GENERAL 1,747,640 1,747,640 0.0%
_CHECK_FUNCTION_VERSION_INLINE 1,747,640 1,747,640 0.0%
_CHECK_IS_NOT_PY_CALLABLE 1,747,640 1,747,640 0.0%
_GUARD_NOT_EXHAUSTED_RANGE 1,409,720 1,409,720 0.0%
_ITER_CHECK_RANGE 1,409,720 1,409,720 0.0%
_LOAD_ATTR 1,317,560 1,317,560 0.0%
_ITER_NEXT_RANGE 1,286,840 1,286,840 0.0%
_LOAD_SMALL_INT 948,920 948,920 0.0%
_BUILD_LIST 921,600 921,600 0.0%
_CALL_INTRINSIC_1 921,600 921,600 0.0%
_LIST_EXTEND 921,600 921,600 0.0%
_BINARY_SUBSCR_DICT 921,600 921,600 0.0%
_CALL_ISINSTANCE 921,600 921,600 0.0%
_TO_BOOL_NONE 921,600 921,600 0.0%
_ERROR_POP_N 921,600 921,600 0.0%
_STORE_ATTR 884,080 884,080 0.0%
_STORE_SUBSCR_LIST_INT 395,960 395,960 0.0%
_LOAD_SMALL_INT_0 395,960 395,960 0.0%
_CALL_BUILTIN_CLASS 27,320 27,320 0.0%
_DEOPT 360 360 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
Opcode Base Count Head Count Change
CALL_FUNCTION_EX 240 240 0.0%
CALL 240 240 0.0%

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 60 60 0.0%

Stats gathered on: 2025-01-22