For the complete documentation index, see llms.txt. Markdown versions of all pages are available by appending .md to any URL (e.g. /get-started.md).
Mojo struct
SingleCounterSync
struct SingleCounterSync[pipeline_stages: Int, block_rows: Int, warp_rows: Int, reads_per_warp_block: Int]
Single counter synchronization strategy.
Uses one atomic counter per tile that tracks both producer and consumer progress. This is simpler but has higher contention as all warps compete for the same counter.
Phase progression:
- Each phase advances by (writes_per_warp_block + reads_per_warp_block)
- Producers wait for phase N, increment counter by 1
- Consumers wait for phase N+1, increment counter by 1
Parameters
- pipeline_stages (
Int): Number of pipeline stages in the ring buffer. - block_rows (
Int): Total number of rows in the work block. - warp_rows (
Int): Number of rows processed by a single warp. - reads_per_warp_block (
Int): Number of consumer read operations per warp block.
Fields
- sync_counter (
SingleCounterSync[pipeline_stages, block_rows, warp_rows, reads_per_warp_block].SyncCounterArray):
Implemented traits
AnyType,
Copyable,
Deinitable,
ImplicitlyCopyable,
Movable,
RegisterPassable,
SyncStrategy,
TrivialRegisterPassable
comptime members
block_warps
comptime block_warps = (block_rows // warp_rows)
SyncCounterArray
comptime SyncCounterArray = SMemArray[Int32, SingleCounterSync[pipeline_stages, block_rows, warp_rows, reads_per_warp_block].total_tiles]
total_tiles
comptime total_tiles = (SingleCounterSync[pipeline_stages, block_rows, warp_rows, reads_per_warp_block].block_warps * pipeline_stages)
writes_per_warp_block
comptime writes_per_warp_block = 1
Methods
__init__
def __init__() -> Self
Initialize with internally allocated sync counter.
get_staged_idx
wait_producer_acquire
def wait_producer_acquire(self, tile_idx: Int, stage: Int, phase: Int32)
signal_producer_release
def signal_producer_release(mut self, tile_idx: Int, stage: Int)
wait_consumer_acquire
def wait_consumer_acquire(self, tile_idx: Int, stage: Int, phase: Int32)
signal_consumer_release
def signal_consumer_release(mut self, tile_idx: Int, stage: Int)