For the complete documentation index, see llms.txt. Markdown versions of all pages are available by appending .md to any URL (e.g. /max/get-started.md).
Mojo function
derive_prologue_from_program
def derive_prologue_from_program(program: PipelineProgram, config: PipelineConfig, sched: ScheduleConfig = ScheduleConfig(scheduling=SchedulingStrategy.IDENTITY, sched_barrier_mask=Int(85), auto_waits=True, drain_lgkm_mask=Int(0), auto_drain=False, lds_contention_penalty=Int(0), wait_lgkm_first=Int(8), wait_vm_last=Int(6), lgkm_per_load_a=Int(0), lgkm_per_load_b=Int(0), lgkm_after_last=False, minimal_barriers=False, omit_mma_set_prio=False, max_vgpr=Int(999999), global_before_frag=False, barrier_before_pre_ops=False, inter_block_lgkm_drain=False, partial_prologue_drain=False, wrap_waits_with_sched_barrier=False), bootstrap: List[OpDesc] = List()) -> List[ScheduleEntry]
Derive prologue from a finalized PipelineProgram.
Extracts global loads from the program's first-half blocks, groups them by buffer stage (0 vs 1), and emits the standard prologue sequence: stage-0 loads at K0 β wait_vm(0) β barrier β stage-1 loads at K1 β wait_vm(0)
When sched.partial_prologue_drain is True, the inter-stage
wait_vm(0) + barrier and the trailing wait_vm(0) are skipped β
all prefetches issue continuously, and the framework instead
appends the schedule's bootstrap_frags() paired with partial
wait_vm(N) + barrier drains so each bootstrap frag-load fires
after exactly the prefetch it depends on has completed (the rest
stay in flight for the first main-loop iter).
Per-frag wait values are derived from cumulative prefetch
vm_cost: the i-th bootstrap frag drains down to leave
total_vm - sum(prefetch_vm_costs[:i+1]) outstanding.
This replaces default_prologue_double_buffer() for schedules that build a PipelineProgram. The advantage is that the prologue is always consistent with the kernel body's actual load distribution (after CSP reordering and redistribution), rather than scanning raw body ops independently.
Returns:
Was this page helpful?
Thank you! We'll create more content like this.
Thank you for helping us improve!