gh-149564: Propagate call-site hotness to callees via dynamic exits#149575
Open
anujbharambe wants to merge 1 commit intopython:mainfrom
Open
gh-149564: Propagate call-site hotness to callees via dynamic exits#149575anujbharambe wants to merge 1 commit intopython:mainfrom
anujbharambe wants to merge 1 commit intopython:mainfrom
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
exec()-generated functions, the loop trace fires_DYNAMIC_EXITon each call because the function version guard fails for each different callee. Each callee'sRESUME_CHECK_JITcounter starts high and only decrements by 1 per call, so with ~60 calls per callee, the counter never reaches zero and the callee never gets its own executor._DYNAMIC_EXITor_COLD_DYNAMIC_EXITlands on aRESUME_CHECK_JITinstruction.Being called from a hot trace via dynamic exit is strong evidence the callee deserves compilation.
Changes
Python/bytecodes.c: Added counter boost logic to_DYNAMIC_EXITand_COLD_DYNAMIC_EXITPython/executor_cases.c.h: RegeneratedLib/test/test_capi/test_opt.py: Addedtest_dynamic_exit_boosts_resumeRisks
if (target->op.code == RESUME_CHECK_JIT)check is a single byte comparison on the dynamic exit path (already cold/rare). Negligible cost.AI Disclosure: Some parts of the code and this PR were written with the help of Claude(AI).