You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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
[-]Quicken Everything[/-][+]Quicken everything[/+]GH-98686: Quicken everything (GH-98687)
brandtbucher commentedon Nov 2, 2022
Leaving this open since we want to move most of this logic to the compile and unmarshal steps.
GH-98686: Fix compiler warning for HAS_ARG (GH-99106)
GH-98686: Get rid of "adaptive" and "quick" instructions (GH-99182)
GH-98686: Get rid of BINARY_OP_GENERIC and COMPARE_OP_GENERIC (GH-99399)