Autotune.Family_decision(gh-ocannl-591)
The family tree's levels commit to values of t, not to display strings. A consumer that reads a decision back off a path — the certain-traffic floor sketch_path_traffic_floor, the lattice lift lift_geometry_lattice, a ranking or profitability pass over the search's paths, the tests — matches on the datum. to_label is the rendering, used by logs, decline reports and goldens; nothing parses it back, so rewording a label (or renaming a level, which level derives from the datum) changes what is printed and nothing else.
This replaced a Printf.sprintf / Scanf.sscanf protocol whose failure mode was silent: a reworded geometry label made every scan arm fall through, so the traffic floor's increment was 0 on every path — a sound bound, so nothing raised, no golden moved, and the family bound quietly stopped differentiating the tree.
A committed tile geometry. Which fields are meaningful is the geometry_choice constructor's business: g_bm/g_bk always; g_bn is 0 for Cpu_packed's unsplit full column extent and the mma lane width for Gpu_mma; g_tm/g_tn are the per-thread tile of Gpu_blocktile and 0 elsewhere. g_bk = 0 in Gpu_mma is the unstaged full-K block.
type geometry_choice = | Gpu_blocktile of geometryThe GPU scalar blocktile menu: both operand tiles staged in kernel.
*)| Gpu_mma of geometryThe GPU tensorized menu: g_bk > 0 stages both operand tiles in kernel, g_bk = 0 is the unstaged full-K block.
| Cpu_blocktile of Base.intThe CPU blocktile menu's single block size (bm = bn = bk).
*)| Cpu_packed of geometry| LatticeThe staged tile-size lattice beyond the curated menu (gh-ocannl-514 phase 5), excluded by default policy and lifted by lift_geometry_lattice; its axes commit as Lattice_box.
type t = | Fusion of [ `Unfused | `Fused ]The root: the epilogue-fusion flavor (gh-ocannl-613).
*)| Pipeline of [ `Blocktile | `Tensorized ]Which composed pipeline.
*)| Batch of [ `Serial | `Grid ]The batch-geometry twin (gh-ocannl-643), GPU only.
*)| Packing of [ `In_kernel | `Hoisted ]The CPU blocktile pipeline's link-time packing twin (gh-ocannl-470).
*)| Geometry of geometry_choiceThe tile geometry, per the pipeline's own menu.
*)| Lattice_box of {}One binary interval refinement of a lattice axis: the value range still open below the commitment, lb_lo = lb_hi at a singleton. A box prices at lb_lo, its most favorable corner.
| Twin of [ `Plain | `Swizzled | `Depth of Base.int ]The per-staged-geometry twins: the swizzled staged layout, the pipelined depths.
*)| Tensorized_form of [ `Whole_triple | `Packed ]The CPU tensorized composition.
*)| Row_block of Base.intThe CPU whole-triple row block; 0 is the unsplit form, > 0 a pool-rendered Grid split.
| Packing_shape of [ `Serial
| `Hoisted
| `Hoisted_grid
| `Hoisted_grid_pack_rest
| `Grid_pack_rest
| `Grid ]Which CPU packed composition: where the panels are packed (in kernel, at link time, per Grid chunk) — what makes a packed geometry's traffic additional or merely relocated.
*)One committed decision. Each constructor belongs to exactly one level (level) and carries the whole identity of the commitment: no consumer needs the level name, or the label, to know what was decided.
type path = (Base.string * t) Base.listWhat Ir.Schedule_space.enumerate and the ~path of Ir.Schedule_space.search carry at this label type: the committed vector, outermost level first. The string is the level's display name; the decision is the identity.
val level : t -> Base.stringThe level a decision belongs to — the name Ir.Schedule_space.tree.Choice carries. Derived from the datum, so a node's level and its children's identities cannot drift apart.
val to_label : t -> Base.stringThe display rendering. Nothing reads it back.
val render_path : path -> Base.stringA path as "level=label > level=label > …", for logs and reports.