mirror of
https://github.com/python/cpython.git
synced 2025-09-01 14:38:00 +00:00
gh-116968: Reimplement Tier 2 counters (#117144)
Introduce a unified 16-bit backoff counter type (``_Py_BackoffCounter``), shared between the Tier 1 adaptive specializer and the Tier 2 optimizer. The API used for adaptive specialization counters is changed but the behavior is (supposed to be) identical. The behavior of the Tier 2 counters is changed: - There are no longer dynamic thresholds (we never varied these). - All counters now use the same exponential backoff. - The counter for ``JUMP_BACKWARD`` starts counting down from 16. - The ``temperature`` in side exits starts counting down from 64.
This commit is contained in:
parent
63bbe77d9b
commit
060a96f1a9
19 changed files with 313 additions and 235 deletions
|
@ -590,7 +590,7 @@ de_instrument(PyCodeObject *code, int i, int event)
|
|||
CHECK(_PyOpcode_Deopt[deinstrumented] == deinstrumented);
|
||||
*opcode_ptr = deinstrumented;
|
||||
if (_PyOpcode_Caches[deinstrumented]) {
|
||||
instr[1].cache = adaptive_counter_warmup();
|
||||
instr[1].counter = adaptive_counter_warmup();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -611,7 +611,7 @@ de_instrument_line(PyCodeObject *code, int i)
|
|||
CHECK(original_opcode == _PyOpcode_Deopt[original_opcode]);
|
||||
instr->op.code = original_opcode;
|
||||
if (_PyOpcode_Caches[original_opcode]) {
|
||||
instr[1].cache = adaptive_counter_warmup();
|
||||
instr[1].counter = adaptive_counter_warmup();
|
||||
}
|
||||
assert(instr->op.code != INSTRUMENTED_LINE);
|
||||
}
|
||||
|
@ -634,7 +634,7 @@ de_instrument_per_instruction(PyCodeObject *code, int i)
|
|||
CHECK(original_opcode == _PyOpcode_Deopt[original_opcode]);
|
||||
*opcode_ptr = original_opcode;
|
||||
if (_PyOpcode_Caches[original_opcode]) {
|
||||
instr[1].cache = adaptive_counter_warmup();
|
||||
instr[1].counter = adaptive_counter_warmup();
|
||||
}
|
||||
assert(*opcode_ptr != INSTRUMENTED_INSTRUCTION);
|
||||
assert(instr->op.code != INSTRUMENTED_INSTRUCTION);
|
||||
|
@ -667,7 +667,7 @@ instrument(PyCodeObject *code, int i)
|
|||
assert(instrumented);
|
||||
*opcode_ptr = instrumented;
|
||||
if (_PyOpcode_Caches[deopt]) {
|
||||
instr[1].cache = adaptive_counter_warmup();
|
||||
instr[1].counter = adaptive_counter_warmup();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue