Michael Droettboom
84b4533e84
gh-109329: Count tier2 opcode misses ( #110561 )
...
This keeps a separate 'miss' counter for each micro-opcode, incremented whenever a guard uop takes a deoptimization side exit.
2023-10-30 17:02:45 -07:00
Sam Gross
6dfb8fe023
gh-110481: Implement biased reference counting (gh-110764)
2023-10-30 16:06:09 +00:00
Irit Katriel
a0c414c35d
gh-111354: define names for RESUME oparg values ( #111365 )
2023-10-26 16:30:18 +01:00
Irit Katriel
67a91f78e4
gh-109094: replace frame->prev_instr by frame->instr_ptr ( #109095 )
2023-10-26 13:43:10 +00:00
Mark Shannon
b0699aa544
GH-111213: Fix a few broken stats (GH-111216)
2023-10-26 11:33:12 +01:00
Michael Droettboom
9eb2489266
gh-109329: Add stat for "trace too short" (GH-110402)
2023-10-05 16:12:06 +01:00
Michael Droettboom
e561e98058
GH-109329: Add tier 2 stats (GH-109913)
2023-10-04 14:52:28 -07:00
Brandt Bucher
22e65eecaa
GH-105848: Replace KW_NAMES + CALL with LOAD_CONST + CALL_KW (GH-109300)
2023-09-13 10:25:45 -07:00
Michael Droettboom
5dcbbd8861
GH-109330: Dump and compare stats using opcode names, not numbers (GH-109335)
2023-09-12 14:12:57 -07:00
Guido van Rossum
bcce5e2718
gh-109039: Branch prediction for Tier 2 interpreter ( #109038 )
...
This adds a 16-bit inline cache entry to the conditional branch instructions POP_JUMP_IF_{FALSE,TRUE,NONE,NOT_NONE} and their instrumented variants, which is used to keep track of the branch direction.
Each time we encounter these instructions we shift the cache entry left by one and set the bottom bit to whether we jumped.
Then when it's time to translate such a branch to Tier 2 uops, we use the bit count from the cache entry to decided whether to continue translating the "didn't jump" branch or the "jumped" branch.
The counter is initialized to a pattern of alternating ones and zeros to avoid bias.
The .pyc file magic number is updated. There's a new test, some fixes for existing tests, and a few miscellaneous cleanups.
2023-09-11 18:20:24 +00:00
Victor Stinner
fd5989bda1
gh-108753: _Py_PrintSpecializationStats() uses Py_hexdigits ( #109040 )
2023-09-07 04:47:57 +02:00
Victor Stinner
a0773b89df
gh-108753: Enhance pystats ( #108754 )
...
Statistics gathering is now off by default. Use the "-X pystats"
command line option or set the new PYTHONSTATS environment variable
to 1 to turn statistics gathering on at Python startup.
Statistics are no longer dumped at exit if statistics gathering was
off or statistics have been cleared.
Changes:
* Add PYTHONSTATS environment variable.
* sys._stats_dump() now returns False if statistics are not dumped
because they are all equal to zero.
* Add PyConfig._pystats member.
* Add tests on sys functions and on setting PyConfig._pystats to 1.
* Add Include/cpython/pystats.h and Include/internal/pycore_pystats.h
header files.
* Rename '_py_stats' variable to '_Py_stats'.
* Exclude Include/cpython/pystats.h from the Py_LIMITED_API.
* Move pystats.h include from object.h to Python.h.
* Add _Py_StatsOn() and _Py_StatsOff() functions. Remove
'_py_stats_struct' variable from the API: make it static in
specialize.c.
* Document API in Include/pystats.h and Include/cpython/pystats.h.
* Complete pystats documentation in Doc/using/configure.rst.
* Don't write "all zeros" stats: if _stats_off() and _stats_clear()
or _stats_dump() were called.
* _PyEval_Fini() now always call _Py_PrintSpecializationStats() which
does nothing if stats are all zeros.
Co-authored-by: Michael Droettboom <mdboom@gmail.com>
2023-09-06 15:54:59 +00:00
Victor Stinner
b298b395e8
gh-108765: Cleanup #include in Python/*.c files ( #108977 )
...
Mention one symbol imported by each #include.
2023-09-06 15:56:08 +02:00
Guido van Rossum
59e46932c8
gh-108488: Initialize JUMP_BACKWARD cache to 0, not 17 ( #108591 )
...
This mis-initialization caused the executor optimization to kick in sooner than intended. It also set the lower 4 bits of the counter to `1` -- those bits are supposed to be reserved (the actual counter is in the upper 12 bits).
2023-08-29 18:14:56 +00:00
Dong-hee Na
66b4d9c9f0
gh-107265: Revert "Ensure _PyCode_Quicken does not handle ENTER_EXECUTOR" ( #108485 )
...
This reverts commit d6ac5c7b10
.
Reason: the assert we just added could be triggered (see issue).
2023-08-25 15:23:39 +00:00
Dong-hee Na
d6ac5c7b10
gh-107265: Ensure _PyCode_Quicken does not handle ENTER_EXECUTOR (gh-108460)
2023-08-24 23:03:26 +00:00
Irit Katriel
72119d16a5
gh-105481: remove regen-opcode. Generated _PyOpcode_Caches in regen-cases. ( #108367 )
2023-08-23 18:39:00 +01:00
Brandt Bucher
326f0ba1c5
GH-106485: Dematerialize instance dictionaries when possible (GH-106539)
2023-08-09 19:14:50 +00:00
Brandt Bucher
a9caf9cf90
GH-105848: Simplify the arrangement of CALL's stack (GH-107788)
2023-08-09 18:19:39 +00:00
Brandt Bucher
ea72c6fe3b
GH-107596: Specialize str[int] (GH-107597)
2023-08-08 13:42:43 -07:00
Mark Shannon
2ba7c7f7b1
Add some GC stats to Py_STATS (GH-107581)
2023-08-04 10:34:23 +01:00
Victor Stinner
1a3faba9f1
gh-106869: Use new PyMemberDef constant names ( #106871 )
...
* Remove '#include "structmember.h"'.
* If needed, add <stddef.h> to get offsetof() function.
* Update Parser/asdl_c.py to regenerate Python/Python-ast.c.
* Replace:
* T_SHORT => Py_T_SHORT
* T_INT => Py_T_INT
* T_LONG => Py_T_LONG
* T_FLOAT => Py_T_FLOAT
* T_DOUBLE => Py_T_DOUBLE
* T_STRING => Py_T_STRING
* T_OBJECT => _Py_T_OBJECT
* T_CHAR => Py_T_CHAR
* T_BYTE => Py_T_BYTE
* T_UBYTE => Py_T_UBYTE
* T_USHORT => Py_T_USHORT
* T_UINT => Py_T_UINT
* T_ULONG => Py_T_ULONG
* T_STRING_INPLACE => Py_T_STRING_INPLACE
* T_BOOL => Py_T_BOOL
* T_OBJECT_EX => Py_T_OBJECT_EX
* T_LONGLONG => Py_T_LONGLONG
* T_ULONGLONG => Py_T_ULONGLONG
* T_PYSSIZET => Py_T_PYSSIZET
* T_NONE => _Py_T_NONE
* READONLY => Py_READONLY
* PY_AUDIT_READ => Py_AUDIT_READ
* READ_RESTRICTED => Py_AUDIT_READ
* PY_WRITE_RESTRICTED => _Py_WRITE_RESTRICTED
* RESTRICTED => (READ_RESTRICTED | _Py_WRITE_RESTRICTED)
2023-07-25 15:28:30 +02:00
Victor Stinner
ee15844db8
gh-106320: Move _PyMethodWrapper_Type to internal C API ( #107064 )
2023-07-22 20:57:59 +00:00
Mark Shannon
0c90e75610
GH-100288: Specialize LOAD_ATTR for simple class attributes. ( #105990 )
...
* Add two more specializations of LOAD_ATTR.
2023-07-10 11:40:35 +01:00
Guido van Rossum
17af98227f
gh-106320: Fix specialize.c compilation by including pycore_pylifecycle.h ( #106434 )
...
Compilation of Python/specialize.c was broken on macOS for me by gh-106400.
2023-07-04 21:42:12 +00:00
Brandt Bucher
7b2d94d875
GH-106008: Make implicit boolean conversions explicit (GH-106003)
2023-06-29 13:49:54 -07:00
Guido van Rossum
51fc725117
gh-104584: Baby steps towards generating and executing traces ( #105924 )
...
Added a new, experimental, tracing optimizer and interpreter (a.k.a. "tier 2"). This currently pessimizes, so don't use yet -- this is infrastructure so we can experiment with optimizing passes. To enable it, pass ``-Xuops`` or set ``PYTHONUOPS=1``. To get debug output, set ``PYTHONUOPSDEBUG=N`` where ``N`` is a debug level (0-4, where 0 is no debug output and 4 is excessively verbose).
All of this code is likely to change dramatically before the 3.13 feature freeze. But this is a first step.
2023-06-26 19:02:57 -07:00
Mark Shannon
04492cbc9a
GH-91095: Specialize calls to normal Python classes. (GH-99331)
2023-06-22 09:48:19 +01:00
Brandt Bucher
2beab5bdef
GH-105840: Fix assertion failures when specializing calls with too many __defaults__ (GH-105847)
2023-06-16 11:01:15 -07:00
Mark Shannon
e830289c52
GH-105229: Remove remaining two-codeunit superinstructions (GH-105326)
...
* Remove LOAD_CONST__LOAD_FAST and LOAD_FAST__LOAD_CONST superinstructions.
2023-06-08 12:35:34 +01:00
Mark Shannon
0689340366
GH-105229: Replace some superinstructions with single instruction equivalent. (GH-105230)
2023-06-05 11:07:04 +01:00
Brandt Bucher
1eb950ca55
GH-104405: Add missing PEP 523 checks (GH-104406)
2023-05-12 22:23:13 +00:00
Carl Meyer
77262458fe
gh-87729: improve hit rate of LOAD_SUPER_ATTR specialization ( #104270 )
2023-05-11 08:08:13 -06:00
penguin_wwy
373bca0cc5
GH-102181: Improve specialization stats for SEND (GH-102182)
2023-05-10 22:40:59 +00:00
Carl Meyer
afe7703744
gh-104184: fix building --with-pydebug --enable-pystats ( #104217 )
2023-05-09 08:53:19 -06:00
Mark Shannon
738c226786
GH-103082: Code cleanup in instrumentation code ( #103474 )
2023-04-29 04:51:55 +00:00
Carl Meyer
ebf97c50f2
gh-103978: avoid using 'class' as an identifier ( #103979 )
2023-04-28 19:20:50 +00:00
Jelle Zijlstra
6c4124d11a
gh-103879: Fix refleak in super specialization ( #103882 )
2023-04-26 08:50:19 -07:00
Carl Meyer
ef25febcf2
gh-87729: specialize LOAD_SUPER_ATTR_METHOD ( #103809 )
2023-04-25 17:45:51 +00:00
Mark Shannon
411b169281
GH-103082: Implementation of PEP 669: Low Impact Monitoring for CPython (GH-103083)
...
* The majority of the monitoring code is in instrumentation.c
* The new instrumentation bytecodes are in bytecodes.c
* legacy_tracing.c adapts the new API to the old sys.setrace and sys.setprofile APIs
2023-04-12 12:04:55 +01:00
Brandt Bucher
b4978ff872
GH-88691: Shrink the CALL caches (GH-103230)
2023-04-05 14:15:49 -07:00
Brandt Bucher
121057aa36
GH-89987: Shrink the BINARY_SUBSCR caches (GH-103022)
2023-03-29 15:53:30 -07:00
Brandt Bucher
0444ae2487
GH-100982: Break up COMPARE_AND_BRANCH (GH-102801)
2023-03-23 15:25:09 -07:00
Mark Shannon
7559f5fda9
GH-101291: Rearrange the size bits in PyLongObject (GH-102464)
...
* Eliminate all remaining uses of Py_SIZE and Py_SET_SIZE on PyLongObject, adding asserts.
* Change layout of size/sign bits in longobject to support future addition of immortal ints and tagged medium ints.
* Add functions to hide some internals of long object, and for setting sign and digit count.
* Replace uses of IS_MEDIUM_VALUE macro with _PyLong_IsCompact().
2023-03-22 14:49:51 +00:00
Brandt Bucher
08b67fb34f
GH-90997: Shrink the LOAD_GLOBAL caches ( #102569 )
2023-03-10 17:01:16 -08:00
Eric Snow
5e5acd291f
gh-100227: Move next_keys_version to PyInterpreterState (gh-102335)
...
https://github.com/python/cpython/issues/100227
2023-03-08 18:04:16 -07:00
Mark Shannon
7c106a443f
GH-100982: Restrict `FOR_ITER_RANGE` to a single instruction to allow instrumentation. (GH-101985)
2023-02-22 11:11:57 +00:00
Steve Dower
a99eb5cd99
gh-101907: Stop using `_Py_OPCODE` and `_Py_OPARG` macros (GH-101912)
...
* gh-101907: Removes use of non-standard C++ extension from Include/cpython/code.h
* Make cases_generator correct on Windows
2023-02-20 14:56:48 +00:00
Mark Shannon
160f2fe2b9
GH-87849: Simplify stack effect of SEND and specialize it for generators and coroutines. (GH-101788)
2023-02-13 11:24:55 +00:00
Brandt Bucher
76efcb4093
GH-100288: Skip extra work when failing to specialize LOAD_ATTR (GH-101354)
2023-01-31 13:28:32 -08:00
Mark Shannon
c1b1f51cd1
GH-101291: Refactor the `PyLongObject` struct into object header and PyLongValue struct. (GH-101292)
2023-01-30 10:03:04 +00:00
Irit Katriel
e9ccfe4a63
gh-100712: make it possible to disable specialization (for debugging) ( #100713 )
2023-01-19 18:14:55 +00:00
Mark Shannon
7b14c2ef19
GH-100982: Add `COMPARE_AND_BRANCH` instruction (GH-100983)
2023-01-16 12:35:21 +00:00
Mark Shannon
6e4e14d98f
GH-100923: Embed jump mask in `COMPARE_OP` oparg (GH-100924)
2023-01-11 20:40:43 +00:00
Mark Shannon
f20c553a45
GH-100288: Remove LOAD_ATTR_METHOD_WITH_DICT instruction. (GH-100753)
2023-01-05 12:20:09 +00:00
Ken Jin
36d358348d
Revert "gh-100288: Specialise LOAD_ATTR_METHOD for managed dictionaries (GH-100289)" ( #100468 )
...
This reverts commit c3c7848a48
.
2022-12-24 01:48:43 +08:00
Ken Jin
c3c7848a48
gh-100288: Specialise LOAD_ATTR_METHOD for managed dictionaries (GH-100289)
2022-12-24 00:26:42 +08:00
Irit Katriel
2659036c75
GH-100459: fix copy-paste errors in specialization stats (GH-100460)
2022-12-23 14:42:24 +00:00
penguin_wwy
a02161286a
GH-99770: Make the correct call specialization fail kind show up in the stats (GH-99771)
2022-12-22 12:44:59 +00:00
Dennis Sweeney
c18d831188
gh-100188: Reduce misses in BINARY_SUBSCR_(LIST/TUPLE)_INT ( #100189 )
...
Don't specialize if the index is negative.
2022-12-20 15:46:16 -05:00
Brandt Bucher
9076455d1b
GH-90043: Handle NaNs in COMPARE_OP_FLOAT_JUMP (GH-100278)
2022-12-16 10:18:31 -08:00
Mark Shannon
d4052d835b
Improve stats presentation for calls. (GH-100274)
2022-12-16 15:43:04 +00:00
Mark Shannon
289c1126dd
Better stats for `LOAD_ATTR` and `STORE_ATTR` (GH-100295)
...
* Don't attempt to specialize for LOAD_ATTR on instance if class has attribute
* Improvement to LOAD_ATTR and STORE_ATTR specialization stats.
2022-12-16 15:41:23 +00:00
Mark Shannon
48e352a241
Move stats for the method cache into the `Py_STAT` machinery (GH-100255)
2022-12-15 09:45:03 +00:00
Carl Meyer
bdd86741be
GH-100222: fix typo _py_set_opocde -> _py_set_opcode (GH-100259)
...
Typo introduced in #100223 .
Automerge-Triggered-By: GH:brandtbucher
2022-12-14 16:39:00 -08:00
Mark Shannon
5693f45b19
Assorted minor fixes for specialization stats. (GH-100219)
2022-12-14 15:50:02 +00:00
Mark Shannon
6997e77bdf
GH-100222: Redefine _Py_CODEUNIT as a union to clarify structure of code unit. (GH-100223)
2022-12-14 11:12:53 +00:00
Michael Droettboom
1583c6e326
GH-100143: Improve collecting pystats for parts of runs (GH-100144)
...
* pystats off by default
* Add -Xpystats flag
* Always dump pystats, even if turned off
2022-12-12 14:50:43 +00:00
Ken Jin
748c6c0921
GH-100110: Specialize FOR_ITER for tuples (GH-100109)
...
* Specialize FOR_ITER for tuples
2022-12-09 10:27:01 +00:00
Brandt Bucher
b629fdd88a
GH-99298: Clean up attribute specializations (GH-99398)
2022-11-17 15:09:18 -08:00
Brandt Bucher
8555dee5ae
GH-98686: Get rid of BINARY_OP_GENERIC and COMPARE_OP_GENERIC (GH-99399)
2022-11-17 11:36:57 -08:00
Brandt Bucher
9d69284169
GH-99257: Check the owner's type when specializing slots (GH-99258)
2022-11-10 11:50:34 +00:00
Brandt Bucher
c7f5708714
GH-98686: Get rid of "adaptive" and "quick" instructions (GH-99182)
2022-11-09 10:50:09 -08:00
Mark Shannon
4a1c58d504
GH-96793: Specialize FOR_ITER for generators. (GH-98772)
2022-11-07 14:49:51 +00:00
Brandt Bucher
276d77724f
GH-98686: Quicken everything (GH-98687)
2022-11-02 10:42:57 -07:00
Mark Shannon
22863df7ca
GH-96793: Change `FOR_ITER` to not pop the iterator on exhaustion. (GH-96801)
...
Change FOR_ITER to have the same stack effect regardless of whether it branches or not.
Performance is unchanged as FOR_ITER (and specialized forms jump over the cleanup code).
2022-10-27 11:55:03 +01:00
adphrost
a41ed975e8
GH-91049: Introduce set vectorcall field API for PyFunctionObject (GH-92257)
...
Co-authored-by: Andrew Frost <adfrost@fb.com>
Co-authored-by: Itamar Ostricher <itamarost@gmail.com>
2022-09-15 16:42:37 +01:00
Brandt Bucher
b4954b1a9e
GH-90230: Fix warnings and failures with --enable-pystats (GH-96622)
2022-09-09 14:42:29 -07:00
Brandt Bucher
cd0ff9bd14
GH-93911: Fix `LOAD_ATTR_PROPERTY` caches (GH-96519)
2022-09-06 12:11:38 +01:00
Irit Katriel
4c72517cad
gh-93554: Conditional jump opcodes only jump forward (GH-96318)
2022-09-01 21:36:47 +01:00
Matthias Görgens
4a6fa89465
Remove dead code in _PyDict_GetItemHint and rename to _PyDict_LookupIndex (GH-95948)
2022-08-18 10:19:21 +01:00
Ken Jin
7276ca25f5
GH-93911: Specialize `LOAD_ATTR` for custom `__getattribute__` (GH-93988)
2022-08-17 12:37:07 +01:00
Mark Shannon
de388c0a7b
GH-95245: Store object values and dict pointers in single tagged pointer. (GH-95278)
2022-08-01 14:34:54 +01:00
Brandt Bucher
e402b26b7f
GH-95113: Don't use EXTENDED_ARG_QUICK in unquickened code (GH-95121)
2022-07-22 11:04:20 -07:00
Brandt Bucher
daf68ba92f
GH-94822: Don't specialize when metaclasses are involved (GH-94892)
2022-07-18 10:10:22 -07:00
Mark Shannon
c0453a40fa
GH-94163: Add BINARY_SLICE and STORE_SLICE instructions. (GH-94168)
2022-06-27 12:24:23 +01:00
Mark Shannon
6f8875eba3
GH-93841: Allow stats to be turned on and off, cleared and dumped at runtime. (GH-93843)
2022-06-21 15:40:54 +01:00
Dennis Sweeney
5fcfdd87c9
GH-91432: Specialize FOR_ITER (GH-91713)
...
* Adds FOR_ITER_LIST and FOR_ITER_RANGE specializations.
* Adds _PyLong_AssignValue() internal function to avoid temporary boxing of ints.
2022-06-21 11:19:26 +01:00
Christian Heimes
77c839c98f
gh-94021: Address unreachable code warning in specialize code (GH-94022)
2022-06-20 23:34:11 -07:00
Ken Jin
a51742ab82
gh-93911: Specialize `LOAD_ATTR_PROPERTY` (GH-93912)
2022-06-17 23:13:17 +08:00
Ken Jin
ab45c1dde0
Fix BINARY_SUBSCR_GETITEM stats (GH-93903)
2022-06-16 15:02:07 +01:00
Mark Shannon
6b330002b1
Rename 'LOAD_METHOD' specialization stat consts to 'ATTR'. (GH-93812)
2022-06-14 16:44:01 +01:00
Mark Shannon
ef6e44d392
Remove LOAD_METHOD stats. (GH-93807)
2022-06-14 15:03:15 +01:00
Ken Jin
b083450f88
GH-93429: Merge `LOAD_METHOD` back into `LOAD_ATTR` (GH-93430)
2022-06-14 11:36:22 +01:00
Dennis Sweeney
c5d0517ea4
Add more FOR_ITER specialization stats (GH-32151)
2022-06-13 01:40:54 -04:00
Mark Shannon
f012df706c
Shrink the LOAD_METHOD cache by one codeunit. ( #93537 )
2022-06-07 10:28:53 +01:00
Mark Shannon
eb618d5ff0
GH-93354: Use exponential backoff to avoid excessive specialization attempts. (GH-93355)
2022-05-31 11:58:26 +01:00
Mark Shannon
bbcf42449e
GH-90230: Add stats to breakdown the origin of calls to `PyEval_EvalFrame` (GH-93284)
2022-05-27 16:31:41 +01:00
Ken Jin
5e6e5b98a8
gh-92777: Add LOAD_METHOD_LAZY_DICT (GH-92778)
2022-05-25 14:06:15 +01:00
Mark Shannon
e48ac9c100
GH-90690: Remove `PRECALL` instruction (GH-92925)
2022-05-19 11:05:26 +01:00