Skip to content

TileOP: add options+groupM overloads across the TMATMUL family - #93

Merged
VV0003 merged 1 commit into
linxfrom
feat/options-groupm-overloads2
Sep 8, 2026
Merged

TileOP: add options+groupM overloads across the TMATMUL family#93
VV0003 merged 1 commit into
linxfrom
feat/options-groupm-overloads2

Conversation

@VV0003

@VV0003 VV0003 commented Sep 8, 2026

Copy link
Copy Markdown
Collaborator

Completes the explicit-groupM overload matrix. Before this PR only TMATMUL had the (options, groupM) combination — an FA-style call like

TMATMUL_ACC(tO, tO, tW, tV, pvOptions, kGroupM);   // error: no matching function

failed to compile. This adds the same overload to the remaining five family members:

TMATMUL_ACC(d, c, a, b, options, groupM)
TMATMUL_BIAS(d, a, b, bias, options, groupM)
TMATMUL_MX(d, a, sa, b, sb, options, groupM)
TMATMUL_MX_ACC(d, c, a, sa, b, sb, options, groupM)
TMATMUL_MX_BIAS(d, a, sa, b, sb, bias, options, groupM)

Each variant is the corresponding full-options overload with the runtime group_M substituted into the emitter M slot, plus the shared cooperative guards from pto_matmul_groupm_detail (Local-A/Shared-B only; group_M 1..128). All PostProcess capabilities (quant/PReLU/RowMax/GroupMax/CScale) flow through unchanged — including the parameter-free keep_acc() path with zero dead descriptor materialisation.

Overload matrix after this PR

interface basic basic+groupM options options+groupM
TMATMUL ✓ (existing)
TMATMUL_ACC new
TMATMUL_BIAS new
TMATMUL_MX new
TMATMUL_MX_ACC new
TMATMUL_MX_BIAS new

Verification

  • The reported call pattern (TMATMUL_ACC(o, o, w, sv, Opt{}, 128)) compiles: BSTART.CUBE TMATMUL.ACC with LB0 = runtime group_M (B.DIM reg, 0), N/K immediate-form, no dead descriptors before B.FPATR
  • All five new overloads emit the correct bundles (fixture CoopGroupMOverloads extended with the options_groupm_forms namespace)
  • Full gate 64/74 — the 11 failures are identical on the unmodified baseline
  • unittest 40/40

The explicit-groupM coverage was asymmetric: only TMATMUL had the
(options, groupM) combination, so the FA-style call

  TMATMUL_ACC(tO, tO, tW, tV, pvOptions, kGroupM);

failed with 'no matching function'. This adds the (options, groupM)
overload to the remaining five family members:

  TMATMUL_ACC(d, c, a, b, options, groupM)
  TMATMUL_BIAS(d, a, b, bias, options, groupM)
  TMATMUL_MX(d, a, sa, b, sb, options, groupM)
  TMATMUL_MX_ACC(d, c, a, sa, b, sb, options, groupM)
  TMATMUL_MX_BIAS(d, a, sa, b, sb, bias, options, groupM)

Each variant is the full options overload with the runtime group_M
substituted into the emitter's M slot, plus the shared cooperative
guards (Local-A/Shared-B only; group_M in 1..128 via the
pto_matmul_groupm_detail helpers). All other PostProcess capabilities
(quant/PReLU/RowMax/GroupMax/CScale) flow through unchanged.

Verified (fixture CoopGroupMOverloads, options_groupm_forms namespace):
- the reported call pattern compiles: BSTART.CUBE TMATMUL.ACC with
  LB0 = runtime group_M (B.DIM reg, 0), N/K immediate-form, no dead
  descriptor materialisation before B.FPATR
- all five family members emit the correct bundle
- full gate 64/74 (11 failures identical on baseline); unittest 40/40
@VV0003
VV0003 merged commit 5c4b9e9 into linx Sep 8, 2026
2 checks passed
VV0003 pushed a commit that referenced this pull request Sep 8, 2026
…e same PR

Records the working convention (applied in #87/#93): any public-header
interface change must update the corresponding docs/tileop-usage pages
(signature block with template declarations, parameter table, overload
selection), plus options.md / migration entries for cross-cutting
changes, verified by the docs freshness unittest.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant