Skip to content

Quicken everything #98686

Description

@brandtbucher

...as discussed in faster-cpython/ideas#462.

Basically, we can simplify the quickening process by quickening code objects as they are created. This works by ditching our per-code-object warmup counter, and instead using our adaptive backoff counters for more-granular "warming".

I have a branch that implements this change, resulting in consistent a ~1% performance improvement. I imagine that this comes from several places:

  • A lower specialization threshold. I tried a wide range of initial adaptive counter values (ranging from 0 to 4095), and a value of 1 worked best. With this value, adaptive instructions will specialize the second time they are run.
  • A simpler interpreter loop. RESUME_QUICK and JUMP_BACKWARD_QUICK are no longer needed.
  • Superinstructions everywhere. All code objects have superinstructions now.

Next steps will be simplifying the unmarshal / code creation process as part of this same work.

Activity

  1. added
    performancePerformance or resource usage
    interpreter-core(Objects, Python, Grammar, and Parser dirs)
    3.12only security fixes
    on Oct 25, 2022
  2. self-assigned this
    on Oct 25, 2022
  3. changed the title [-]Quicken Everything[/-] [+]Quicken everything[/+] on Oct 25, 2022
  4. added a commit that references this issue on Nov 2, 2022
  5. brandtbucher commented on Nov 2, 2022

    @brandtbucher
    MemberAuthor

    Leaving this open since we want to move most of this logic to the compile and unmarshal steps.

  6. added 2 commits that reference this issue on Nov 4, 2022
  7. added a commit that references this issue on Nov 17, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

3.12only security fixesinterpreter-core(Objects, Python, Grammar, and Parser dirs)performancePerformance or resource usage

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions