Skip to content

Workflow for 3.12 cycle

Michael Droettboom edited this page Aug 2, 2022 · 17 revisions
graph LR

%% High level goals

    CompactObject[["Compact objects"]]
    
    ReducedRefcount[["Reduced reference counting overhead"]]
    
    SpecDone[["Finish specialization"]]
    
    Traces[["Projected (short) trace opimitized interpreter"]]

%% Tasks

    Compiler("Bytecode compiler enhancements<br/><b>Irit</b>")
    
    StaticRefcntReduction("Use static analysis to reduce<br/>reference count operations")

    SpecSeq("Specialize FOR_ITER for sequences<br/><b>Dennis</b>")

    SpecGen("Specialize FOR_ITER for generator")
    
    SpecClass("Specialize CALL for Python classes")
    
    CtoPy("Identify main sources of<br/>calls to PyEval_EvalFrame")

    ShimFrame("Shim frames on entry<br/>to PyEval_EvalDefault")

    SpecSend("Specialize SEND")
    
    SatRefcnt("Saturating refcounts")

    380("Move PEP 380 logic into compiler<br/><b>Brandt</b> ")

    EncapsulateGIL("Encapasulate GIL code and<br/>move it out of ceval.c")

    OpcodesOwnFile("Move opcode definitions to their own file<br/>and generate PyEval_EvalDefault")

    CycleGC("Improve cycle GC<br/>(Task needs breaking up)")

    MiniOps("Breakup instruction definitions into 'mini-ops'")
    
    SmallGCHead("One word GC header")
    
    MergeDictValuePointers("Merge managed dict and values<br/>pointer into one word")
    
    TrackRefsInC("Identify flow of references in C")
    
    OptRefsInC("Optimize flow of references in C,<br/>transferring ownership when needed")
    
    GuardOpt("Optimize traces:<br/>Guard stengthening and elimination")
    
    AllocSinking("Optimize traces:<br/>Allocation elimination")
    
    AllBranchesForward("Only unconditional jumps should go backwards")
    
    HotSpotDetection("Detect hotspots in code")
    
    TraceProjection("Trace projection:<br/>Create traces from hotspots")
    
    TraceEval("Trace interpreter")
    
    OptAPI("Implement optimizer API")
    
    Deferred("Deferred reference counts")
    
    StaticRefcntReduction("Static reduction in refcount operations")
    
    WebAssemblyFriendlyInterpreter("Generate version of the interpreter better<br/>suited to emscripten and web assembly")

%% Dependencies

    380 --> OpcodesOwnFile
    380 --> SpecSend

    subgraph Trace optimized interpreter
    AllBranchesForward --> HotSpotDetection
    HotSpotDetection --> TraceProjection
    OpcodesOwnFile --> MiniOps
    EncapsulateGIL --> OpcodesOwnFile
    OpcodesOwnFile --> WebAssemblyFriendlyInterpreter
    OptAPI --> TraceProjection
    MiniOps --> TraceProjection
    TraceProjection --> TraceEval
    MiniOps --> TraceEval
    TraceEval --> GuardOpt
    TraceEval --> AllocSinking
    GuardOpt --> Traces
    AllocSinking --> Traces
    end

    subgraph Specialization
    CtoPy --> ShimFrame
    SpecSeq --> SpecGen
    ShimFrame --> SpecGen
    SpecGen --> SpecSend
    SpecSend --> SpecDone
    SpecClass --> SpecDone
    end

    subgraph Compact Objects
    SatRefcnt --> SmallGCHead
    MergeDictValuePointers --> CompactObject
    SmallGCHead --> CompactObject
    end

    subgraph Reduced Reference Count Overhead
    TrackRefsInC --> OptRefsInC
    OptRefsInC --> ReducedRefcount
    Compiler --> StaticRefcntReduction
    Deferred --> StaticRefcntReduction
    Deferred --> ReducedRefcount
    StaticRefcntReduction --> ReducedRefcount
    end
Loading
Clone this wiki locally