Tile implementation coverage
What is implemented, and what remains design
Area |
Implemented and exercised |
Important remaining boundary |
|---|---|---|
C++ surface |
Signature parameters; range-for Nests; direct carried assignment; explicit stores; Tile-level operations |
Not arbitrary C++ capture or intra-kernel SIMT/Tile mixing |
Execution |
|
The backend must realize the requested binding; unsupported bindings are errors |
Reduction policy |
Typed per-operation unordered-tree default, explicit ordered tree and left/right folds; TIRx/XIR preserve order restrictions |
Generic lift/merge contracts remain future work; ordered trees currently use serial realizations; XIR has no tree emitter |
Data/layout |
Typed layout representation and proof mechanisms; Tensor as storage plus layout/view |
Not every represented layout has an emitter on every bridge |
Low precision |
FP16/BF16 typed views, copies/conversions and FP32 MMA accumulation on XIR/SIMD and Metal/TIRx; INT8/UINT8 with INT32 MMA; exact FP8 format/Buffer interfaces |
FP8 execution rejects explicitly; native MPP is still FP32; dtype-aware atom costs and broad low-precision operator/performance qualification remain open |
TileIR |
Mutable typed SSA, regions and intrusive ownership/use structure |
General Machine TileIR and its pass suite are not implemented |
TIRx |
Native C++ export preserving pure multi-consumer SSA; target-selectable recomputation; CPU/Metal realizations; typed MPP modes and optional proved K/M/N-tail views/bounded output; Metal FP32 subgroup reductions; bounded target-specific cost/solvers; opt-in rectangular group-program traversal |
MPP bounds require optional capabilities and canonical proved guards; arbitrary masks retain fallback storage; traversal is explicit and Metal-group-only; materialization/reuse lacks traffic/spill calibration; broader atoms/operators remain necessary |
Native Metal |
Typed FP32 MMA/view-forwarding subset; ordinary Runtime shader and launch |
Not general epilogues, K pipelines, manual Memory, all dtypes or arbitrary operators |
XIR/SIMD |
Direct verified XIR; local Tile expansion; loop PHIs; ordinary CPU Runtime |
No matrix-extension atom, packed GEMM microkernel or general Tile distribution |
CPU planner / realizations |
Root-axis permutations × legal worker-block widths; bounded storage/SIMD/launch choices; proved CBLAS and Accelerate atoms |
Provider selection is explicit; no fitted break-even model, whole-program optimum, general Tile partitioning or physical pipeline solver |
Autotuning |
Recapture/JIT variants, Cartesian execution/resource/materialization candidates, exact Metal reduction-width sweeps and frozen-plan benchmarking |
Broader search requires legal emitters and measured ranking; one capture is not mandatory |
Composed Metal programs |
Automatic cooperative admission for supported MMA-containing programs, singleton-axis projection, pipeline capacity reservation and closed per-Tile subgroup reductions; reference binding accounts for complete subgroups |
One subgroup per reduction output, not general redistribution; no sibling-scope fusion or calibrated whole-region resource/time solver |
Execution calculus |
Documented contracts and finite reference tests |
Proposed refinement rules and relative-completeness scope, not machine-checked production correctness or a novelty result |
The existing CuTe-derived mixed-radix/composition design is not a claim of a complete decision procedure over arbitrary programs. The language design distinguishes representational closure, proof fragments, finite fallback and unknown results. Likewise, XIR’s current compact-buffer realization is a subset of the layout representation, not an alternative, less general DSL.
Generality and attribution
The goal is reusable optimization over IR structure, not a table of operator names or favorable shapes. Three different claims require separate evidence:
Semantic applicability: a transformation matches proved access, dependence, ownership and numerical contracts, using independence already supplied by valid parallel primitives rather than re-proving it. Pointwise grid fusion and shared-SSA scalarization can serve different expression graphs, including several independently written output domains; canonical add/max/min reduction mapping serves several row programs. Matrix input forwarding serves the admitted affine zero-padded MMA family, not every operator containing a reduction. The optional closed matrix epilogue similarly matches an ordinary scalar DAG and same-element accesses. It rejects manual memory, neighbor reads, extra consumers and unproved inputs; it does not introduce activation-specific production primitives.
Realization coverage: a legal execution/resource combination has a target emitter. The M/N-tail extension expands this space without changing planner coefficients or the subgroup distribution. Existing staged/JIT selection can then use newly legal K blocks. That is not evidence of better analytic ranking, nor does it improve native MPP or XIR automatically.
Performance generalization: a frozen policy must be tested on disjoint shapes and composed operators, with unchanged incumbents, complete output checks, both GPU/E2E objectives and reported regressions. Current small-row held-out failures and large-GEMM gaps show that this claim is still open.
The latest matrix epilogue replay makes this distinction concrete: the same
rule releases storage for both ReLU and GELU, yet has sizeable regressions
on large GEMMs. It is opt-in through PlannerOptions::fuse_matrix_epilogues,
with scalar math retained in the cost proxy. Additional memory operands
(bias/residual), free variables, arbitrary layouts/dtypes and other backend
emitters remain outside this first contract. Staged/JIT can compare candidate
realizations; a legality proof alone must not silently select one as faster.
Execution partitioning, worker ownership, materialization/reuse and atom selection should remain independently represented choices with coupled legality/resource checks. Shared analysis and search consume backend-owned capabilities and costs; target emitters implement the selected contracts. This does not require one identical schedule or cost profile across CPU and GPU, and does not add operator-specific concepts to the public DSL. The next acceptance work must exercise these choices across pointwise chains, reductions/normalizations and matrix-based compositions, rather than only selecting another GEMM winner. Attention, convolution/filter and sort/Top-K PoCs are correctness coverage, not a broad optimized-performance claim.
Next work and acceptance criteria
Generalize the CPU atom catalog: add layout/stride/transpose and fused epilogue contracts without turning whole operators into DSL primitives. Select reference, library and native microkernel atoms with an explicit break-even model; preserve the current opt-in policies as controls.
Close the direct XIR/reference gap: choose Tile/vector axes, reduction trees, register blocking and cache/packing only with dependence, alias and numerical proofs. Provider parity must not hide the missing general SIMD and matrix realization family.
Calibrated cost and search: use MPP v2, the CPU launch threshold and the exposed residual-LayerNorm regret as bootstrap evidence. Add duplicated global/local traffic, expression depth, live-state and measured spill features, then evaluate on disjoint shapes/operators; report held-out regret, top-K coverage and uncertainty.
Production LLM coverage: add hidden widths/context lengths, mask corner cases, dtypes and realistic prefill/decode sizes. Benchmark fused and unfused XIR/TIRx/Torch paths with identical inputs and explicit math policy.
Generalize Metal MPP planning: retain MPS, handwritten MPP, original TIRx, staged TIRx-MPP and native-MPP controls. Extend the legal realization family and test v2’s rectangle/K/thread features on held-out GEMMs and production LLM operators. Do not turn the winning 128×32 schedule into a shape table; this cohort’s GEMM parity is not universal library parity.
Machine TileIR when needed: promote realized maps, atoms, resource lifetimes and protocols into mutable typed records when multiple passes need them. Keep the public DSL minimal and avoid a new serialization layer.
Open questions are therefore concrete: which dependency-safe distribution space pays off first, what calibrated features predict held-out performance, and which physical realization explains the remaining library gap? The current evidence supports pursuing those questions, not declaring completion.