mirror of
https://github.com/python/cpython.git
synced 2025-10-17 04:08:28 +00:00
GH-98686: Get rid of "adaptive" and "quick" instructions (GH-99182)
This commit is contained in:
parent
6e3cc72afe
commit
c7f5708714
18 changed files with 562 additions and 758 deletions
|
@ -11,7 +11,7 @@ A family of instructions has the following fundamental properties:
|
|||
generated by the bytecode compiler.
|
||||
* It has a single adaptive instruction that records an execution count and,
|
||||
at regular intervals, attempts to specialize itself. If not specializing,
|
||||
it executes the non-adaptive instruction.
|
||||
it executes the base implementation.
|
||||
* It has at least one specialized form of the instruction that is tailored
|
||||
for a particular value or set of values at runtime.
|
||||
* All members of the family must have the same number of inline cache entries,
|
||||
|
@ -22,19 +22,18 @@ A family of instructions has the following fundamental properties:
|
|||
The current implementation also requires the following,
|
||||
although these are not fundamental and may change:
|
||||
|
||||
* All families uses one or more inline cache entries,
|
||||
* All families use one or more inline cache entries,
|
||||
the first entry is always the counter.
|
||||
* All instruction names should start with the name of the non-adaptive
|
||||
* All instruction names should start with the name of the adaptive
|
||||
instruction.
|
||||
* The adaptive instruction should end in `_ADAPTIVE`.
|
||||
* Specialized forms should have names describing their specialization.
|
||||
|
||||
## Example family
|
||||
|
||||
The `LOAD_GLOBAL` instruction (in Python/ceval.c) already has an adaptive
|
||||
The `LOAD_GLOBAL` instruction (in Python/bytecodes.c) already has an adaptive
|
||||
family that serves as a relatively simple example.
|
||||
|
||||
The `LOAD_GLOBAL_ADAPTIVE` instruction performs adaptive specialization,
|
||||
The `LOAD_GLOBAL` instruction performs adaptive specialization,
|
||||
calling `_Py_Specialize_LoadGlobal()` when the counter reaches zero.
|
||||
|
||||
There are two specialized instructions in the family, `LOAD_GLOBAL_MODULE`
|
||||
|
@ -138,5 +137,5 @@ to eliminate the branches.
|
|||
Finally, take care that stats are gather correctly.
|
||||
After the last `DEOPT_IF` has passed, a hit should be recorded with
|
||||
`STAT_INC(BASE_INSTRUCTION, hit)`.
|
||||
After a optimization has been deferred in the `ADAPTIVE` form,
|
||||
After an optimization has been deferred in the adaptive instruction,
|
||||
that should be recorded with `STAT_INC(BASE_INSTRUCTION, deferred)`.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue