IMPORTANT: To view this page as Markdown, append `.md` to the URL (e.g. /max/get-started.md). For the complete documentation index, see llms.txt.
Skip to main content
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 struct

SchedulerWorkIterator

struct SchedulerWorkIterator[num_stages: Int, cluster_shape: IndexList[Int(3), element_type=DType.uint32], rasterize_order: RasterOrder, block_swizzle_size: Int]

Work iterator for Scheduler warp - owns work_info and both pipeline states.

The Scheduler warp uniquely needs to:

  1. Consume work responses (like other warps) via next
  2. Signal throttle and produce new work requests via signal_and_advance()
  3. Drain pending requests at exit via drain()

Usage: var sched_iter = scheduler.scheduler_iterator() for _ in sched_iter: sched_iter.signal_and_advance() sched_iter.drain()

Parameters​

  • ​num_stages (Int): Number of CLC pipeline stages for work distribution.
  • ​cluster_shape (IndexList[Int(3), element_type=DType.uint32]): Cluster tile counts as (m, n, k).
  • ​rasterize_order (RasterOrder): Order CLC rasterizes tiles across the cluster grid.
  • ​block_swizzle_size (Int): Block swizzle factor for tile remapping, one of 0, 1, 2, 4, or 8.

Fields​

  • ​scheduler (SchedulerWorkIterator[num_stages, cluster_shape, rasterize_order, block_swizzle_size].SchedulerType):
  • ​work_info (WorkInfo):
  • ​consumer_state (PipelineState[num_stages]):
  • ​producer_state (PipelineState[num_stages]):
  • ​throttle_pipeline (SchedulerWorkIterator[num_stages, cluster_shape, rasterize_order, block_swizzle_size].ThrottlePipeline):
  • ​needs_fetch (Bool):

Implemented traits​

AnyType, Copyable, ImplicitlyDeletable, Iterable, Iterator, Movable, RegisterPassable

comptime members​

Element​

comptime Element = WorkInfo

IteratorType​

comptime IteratorType[iterable_mut: Bool, //, iterable_origin: Origin[mut=iterable_mut]] = SchedulerWorkIterator[num_stages, cluster_shape, rasterize_order, block_swizzle_size]

Parameters​

SchedulerType​

comptime SchedulerType = TileScheduler[num_stages, cluster_shape, rasterize_order, block_swizzle_size]

ThrottlePipeline​

comptime ThrottlePipeline = SchedulerWorkIterator[num_stages, cluster_shape, rasterize_order, block_swizzle_size].SchedulerType.ThrottlePipeline

Methods​

__init__​

def __init__(scheduler: TileScheduler[num_stages, cluster_shape, rasterize_order, block_swizzle_size], work_info: WorkInfo) -> Self

Create scheduler iterator. Throttle pipeline from scheduler.

Args:

__iter__​

def __iter__(ref self) -> Self

__next__​

def __next__(mut self) -> WorkInfo

Return current work item, deferring fetch to next call.

Returns:

WorkInfo Raises:

StopIteration: When there is no more work to process.

signal_and_advance​

def signal_and_advance(mut self)

Signal CLC throttle consumer and advance to next work request.

Combines two operations that always happen together in Scheduler warp:

  1. Signal throttle consumer (tells Load warp we've consumed a response)
  2. Issue next CLC work request (producer side)

drain​

def drain(mut self)

Drain all pending CLC requests before kernel exit.

Must be called after the work loop completes to ensure all CLC pipeline stages are properly synchronized before exit.

Was this page helpful?