diff --git a/asl/block/attributes/B.FPATR.asl b/asl/block/attributes/B.FPATR.asl index ed3318383..70bf4f0fe 100644 --- a/asl/block/attributes/B.FPATR.asl +++ b/asl/block/attributes/B.FPATR.asl @@ -25,15 +25,26 @@ // NDF-BEGIN: PTO-CUBE-SHARED-TRANSPOSE-001 // ndf: kind=contract level=L1 layer=block status=accepted // B.FPATR bits 7 and 8 MUST independently select logical transpose for the -// corresponding Shared A or B primary data operand only. Shared ScaleA is -// always physically [M,G_A] and Shared ScaleB is always physically [N,G_B], -// both K-group-major, regardless of the transpose controls. Local-side -// transpose MUST remain illegal and neither source is mutated. Shared A [M,K] -// is physically [M,K] at TransA=0 and [K,M] at TransA=1; Shared B [K,N] is -// physically [N,K] at TransB=0 and [K,N] at TransB=1. Each Shared source MUST -// expose the exact physical valid shape with a legal padded major pitch, and -// every participating PE MUST pass metadata preflight before any payload -// snapshot, destination allocation, or output effect. +// corresponding Shared A or B primary data operand only. Shared ScaleA MUST +// have stored-valid shape [group_M,G_A] and ScaleB [N,G_B], with each G equal +// to ceil(K/group_size) for its own primary type (group-32 E8M0 or group-64 +// U32), independent of transpose. Local-side transpose MUST remain illegal. +// Shared A [group_M,K] is physically [group_M,K] at TransA=0 and [K,group_M] +// at TransA=1; Shared B [K,N] is physically [N,K] at TransB=0 and [K,N] at +// TransB=1. Cooperative Shared forms MUST use group_M in 1..128 and N/K in +// 1..65535 without power-of-two restrictions. If a supported packed-four-bit +// Shared primary is present (E2M1X2, E1M2X2, HiF4X2 for Matrix-MX only, S4X2, +// or U4X2), K and every such original parent's physical `columns` pitch MUST +// be even under every transpose combination; valid M/group_M and N gain no +// parity rule. This MUST not affect Local-only TMATMUL, TGEMV, generic Shared +// allocation, or Local packed A when Shared B is not packed. Each Shared +// source MUST expose its exact physical valid shape with a legal padded pitch; +// Local CUBE roles retain existing descriptor/capacity rules, while Shared +// roles are checked against original legal descriptors. Internal read views +// MUST preserve original pitch and typed logical element/carrier/lane mapping +// without a transient Local descriptor or 64 KiB capacity limit. Every +// participating PE MUST pass metadata preflight before payload snapshots, +// destination allocation, or output effects. // NDF-END: PTO-CUBE-SHARED-TRANSPOSE-001 // NDF-BEGIN: PTO-CUBE-CSCALE-001 diff --git a/asl/block/execution/BSTART.TMATMUL.ACC.asl b/asl/block/execution/BSTART.TMATMUL.ACC.asl index bd0a67ce2..7446a559a 100644 --- a/asl/block/execution/BSTART.TMATMUL.ACC.asl +++ b/asl/block/execution/BSTART.TMATMUL.ACC.asl @@ -1,4 +1,4 @@ -// PTO-INSTRUCTION: {"assembly":["BSTART.TMATMUL.ACC DataType"],"block":[],"catalog_indices":[42],"catalog_records":[{"asm":"BSTART.TMATMUL.ACC DataType","constraints":[{"field":"DataType","operator":"one-of","values":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,18,19,20,24,25,26,27,28]}],"encoding":[{"index":0,"mask":"0x07ffffff","match":"0x00231181","width_bits":32}],"encoding_kind":"L32","fields":[{"name":"DataType","pieces":[{"instruction_lsb":27,"value_lsb":0,"width":5}],"signedness":"encoding-defined","width":5}],"form_id":"bstart_tmatmul_acc_32_0c8c62e5f00a","length_bits":32,"mnemonic":"BSTART.TMATMUL.ACC","semantic_family":"CMD","semantic_group":"Bundle Split","semantic_handler":"ExecuteBundleStart","semantic_summary":"Starts CUBE Function 2 for the TMATMUL_ACC Matrix-matrix complete-bundle operation.","status":"accepted","state_effects":["runtime:CurrentBundleCCTRL:raw-partial-and-transparent-cache-hints"]}],"classification":["execution"],"contract":{"block_composition":["BSTART.TMATMUL.ACC AType","B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType)","B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one)","B.DIM LB0 M or cooperative group_M (optional, default 1)","B.DIM LB1 N (optional, default 1)","B.DIM LB2 K (optional, default 1)","B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111)","B.IOT ordered Local mathematical sources: C CUBE_M16/M32 accumulator matching A with encoded selector distinct from DstTile, A CUBE_M16/M32 primary, B CUBE_N8 primary, optional U8 CScale CUBE_M32 [M,1]","B.IOT D matching A's CUBE_M16/M32 layout with a distinct encoded destination index, optional RowMaxOut, optional GroupMaxOut destinations","B.IOT/B.IOR postprocess operands selected by B.FPATR","BSTOP or the next BSTART completion boundary"],"canonical_assembly":["BSTART.TMATMUL.ACC DataType"],"defaults":["Encoded DataType is always AType. Omitted B.DATR preserves AType as BType, selects RNE, and disables saturation.","Omitted LB0 defaults Local M or cooperative group_M to one; omitted LB1 and LB2 default N and K to one.","Exactly one all-zero B.FPATR selects no conversion, activation, or reduction; B.IOR and auxiliary B.IOT operands exist only when a selected postprocess mode requires them.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout; Local C also uses A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize.","TransA=0 and TransB=0 select no logical transpose. Each nonzero control is legal only when the corresponding primary is Shared.","C and D are both mandatory. CScaleEn accepts one final U8 CUBE_M32 [M,1] Local mathematical source only with FP32 C; omission defaults CScaleEn to zero. In decoded blocks C's six-bit relative selector must differ from zero-extended DstTile before rename; direct Tile calls require destination TileIndex to differ from accumulator TileIndex.","Omitted CCTRL selects 00: final D output and no transparent-cache hint."],"encoding_class":"standalone-encoded","examples":["BSTART.TMATMUL.ACC AType; B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType); B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one); B.DIM LB0 M or cooperative group_M (optional, default 1); B.DIM LB1 N (optional, default 1); B.DIM LB2 K (optional, default 1); B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111); B.IOT ordered Local mathematical sources: C CUBE_M16/M32 accumulator matching A with encoded selector distinct from DstTile, A CUBE_M16/M32 primary, B CUBE_N8 primary; B.IOT D matching A's CUBE_M16/M32 layout with a distinct encoded destination index, optional RowMaxOut, optional GroupMaxOut destinations; B.IOT/B.IOR postprocess operands selected by B.FPATR; BSTOP or the next BSTART completion boundary"],"exceptions":["A reserved DataType or fixed-bit mismatch raises Fault_IllegalInstruction before block state changes.","Missing, duplicate, or non-Matrix B.FPATR use raises Fault_BundleControl before allocation or payload effects.","Illegal types, dimensions, masks, binding streams, descriptors, shapes, capacities, aliases, readiness, or postprocess values raise Fault_TileLegality before source snapshots and effects."],"field_contracts":{"DataType":{"ref":"PTO-FIELD-BLOCK-DATATYPE"}},"field_zero_meanings":{"DataType":"Encoded zero selects FP64."},"legality":["The carrier selects exactly CUBE Function 2 and TileOperation_TMATMUL_ACC.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout; Local C also uses A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize.","C and D are both mandatory. CScaleEn accepts one final U8 CUBE_M32 [M,1] Local mathematical source only with FP32 C; omission defaults CScaleEn to zero. In decoded blocks C's six-bit relative selector must differ from zero-extended DstTile before rename; direct Tile calls require destination TileIndex to differ from accumulator TileIndex.","A Shared primary must satisfy hardware-maintained whole-parent readiness and publication before payload access; fixed-quarter allocation or initialization masks are not a prerequisite. Any cooperative Local-A/Shared-B or Shared-A/Shared-B TMATMUL interprets LB0 as Core-total group_M in 1..128; Shared A has exact physical valid shape [group_M,K] with physical index m*pitch+k (K-major) for TransA=0 or [K,group_M] with physical index k*pitch+m (M-major) for TransA=1; Shared B has exact physical valid shape [N,K] with physical index n*pitch+k (K-major, ordinary dense column-major/DN-equivalent) for TransB=0 or [K,N] with physical index k*pitch+n (N-major, ordinary dense row-major) for TransB=1; physical columns may be legally padded, and PE i uses valid_M=clamp(group_M-i*M_per_PE,0,M_per_PE) with M_per_PE 16 for group_M<=64 and 32 for group_M>=65. TransA and TransB apply only to their corresponding Shared primary. Right-only Shared inherits Local A layout; all-Shared ACC inherits C layout; all-Shared non-ACC selects M16 through M=16 and M32 through M=32.","AType and BType must be supported ordinary Matrix types from one numeric class. C is one explicit Local MxN accumulator source and D is a distinct newly published destination; C's encoded relative selector and D's zero-extended DstTile hand must differ before rename. Published Shared operands may replace the right group or both matrix groups; supplementary operands and destinations remain Local.","Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects.","B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema.","For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D."],"memory_effects":["none"],"operands":[{"field":"DataType","role":"tile element data type selector"}],"ordering":["Complete schema, field, type, dimension, descriptor, shape, capacity, readiness, alias, and allocation preflight precedes every source snapshot and destination effect.","D and every enabled reduction output publish as one atomic group; rejection publishes none and successful sources persist.","Transparent-cache hints occur only after complete preflight and cannot alter source snapshots, D allocation or publication, faults, or numeric status."],"standalone_opcode":true,"state_effects":["Start a CUBE Function 2 descriptor with encoded DataType preserved as AType.","At block completion execute TileOperation_TMATMUL_ACC using the resolved M, N, K, input types, mathematical operands, and B.FPATR postprocess schema.","Publish the complete output group atomically after successful preflight and computation; do not consume mathematical or postprocess sources.","For Local execution, publish D with A's CUBE_M16 or CUBE_M32 layout and final output dtype; Bias uses Local CUBE_N8; RowMaxIn/Out and GroupMaxOut use the resolved M layout; vector quant/PReLU parameters use Local CUBE_N8/U64; MX scales keep their operation-owned layouts.","Successful Shared primary reads leave every Shared descriptor, mask, publication state, payload, and lifetime unchanged.","C is snapshotted before multiplication and remains descriptor-and-payload unchanged after success or rejection.","Always publish D; CCTRL[0]=1 publishes raw accumulator-type D and may hint cache replacement, while ACC CCTRL[1]=1 may hint cache use or prefetch of explicit C. Hint handling is not architecturally observable."]},"depends_on":["PTO-BLOCK-MODEL-SCHEMA-BUNDLE-ENCODING"],"id":"PTO-BLOCK-BSTART-TMATMUL-ACC","mnemonic":"BSTART.TMATMUL.ACC","summary":"Starts CUBE Function 2 for the TMATMUL_ACC Matrix-matrix complete-bundle operation.","surface":"block"} +// PTO-INSTRUCTION: {"assembly":["BSTART.TMATMUL.ACC DataType"],"block":[],"catalog_indices":[42],"catalog_records":[{"asm":"BSTART.TMATMUL.ACC DataType","constraints":[{"field":"DataType","operator":"one-of","values":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,18,19,20,24,25,26,27,28]}],"encoding":[{"index":0,"mask":"0x07ffffff","match":"0x00231181","width_bits":32}],"encoding_kind":"L32","fields":[{"name":"DataType","pieces":[{"instruction_lsb":27,"value_lsb":0,"width":5}],"signedness":"encoding-defined","width":5}],"form_id":"bstart_tmatmul_acc_32_0c8c62e5f00a","length_bits":32,"mnemonic":"BSTART.TMATMUL.ACC","semantic_family":"CMD","semantic_group":"Bundle Split","semantic_handler":"ExecuteBundleStart","semantic_summary":"Starts CUBE Function 2 for the TMATMUL_ACC Matrix-matrix complete-bundle operation.","status":"accepted","state_effects":["runtime:CurrentBundleCCTRL:raw-partial-and-transparent-cache-hints"]}],"classification":["execution"],"contract":{"block_composition":["BSTART.TMATMUL.ACC AType","B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType)","B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one)","B.DIM LB0 M or cooperative group_M (optional, default 1)","B.DIM LB1 N (optional, default 1)","B.DIM LB2 K (optional, default 1)","B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111)","B.IOT ordered Local mathematical sources: C CUBE_M16/M32 accumulator matching A with encoded selector distinct from DstTile, A CUBE_M16/M32 primary, B CUBE_N8 primary, optional U8 CScale CUBE_M32 [M,1]","B.IOT D matching A's CUBE_M16/M32 layout with a distinct encoded destination index, optional RowMaxOut, optional GroupMaxOut destinations","B.IOT/B.IOR postprocess operands selected by B.FPATR","BSTOP or the next BSTART completion boundary"],"canonical_assembly":["BSTART.TMATMUL.ACC DataType"],"defaults":["Encoded DataType is always AType. Omitted B.DATR preserves AType as BType, selects RNE, and disables saturation.","Omitted LB0 defaults Local M or cooperative group_M to one; omitted LB1 and LB2 default N and K to one.","Exactly one all-zero B.FPATR selects no conversion, activation, or reduction; B.IOR and auxiliary B.IOT operands exist only when a selected postprocess mode requires them.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout; Local C also uses A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize.","TransA=0 and TransB=0 select no logical transpose. Each nonzero control is legal only when the corresponding primary is Shared.","C and D are both mandatory. CScaleEn accepts one final U8 CUBE_M32 [M,1] Local mathematical source only with FP32 C; omission defaults CScaleEn to zero. In decoded blocks C's six-bit relative selector must differ from zero-extended DstTile before rename; direct Tile calls require destination TileIndex to differ from accumulator TileIndex.","Omitted CCTRL selects 00: final D output and no transparent-cache hint."],"encoding_class":"standalone-encoded","examples":["BSTART.TMATMUL.ACC AType; B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType); B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one); B.DIM LB0 M or cooperative group_M (optional, default 1); B.DIM LB1 N (optional, default 1); B.DIM LB2 K (optional, default 1); B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111); B.IOT ordered Local mathematical sources: C CUBE_M16/M32 accumulator matching A with encoded selector distinct from DstTile, A CUBE_M16/M32 primary, B CUBE_N8 primary; B.IOT D matching A's CUBE_M16/M32 layout with a distinct encoded destination index, optional RowMaxOut, optional GroupMaxOut destinations; B.IOT/B.IOR postprocess operands selected by B.FPATR; BSTOP or the next BSTART completion boundary"],"exceptions":["A reserved DataType or fixed-bit mismatch raises Fault_IllegalInstruction before block state changes.","Missing, duplicate, or non-Matrix B.FPATR use raises Fault_BundleControl before allocation or payload effects.","Illegal types, dimensions, masks, binding streams, descriptors, shapes, capacities, aliases, readiness, or postprocess values raise Fault_TileLegality before source snapshots and effects."],"field_contracts":{"DataType":{"ref":"PTO-FIELD-BLOCK-DATATYPE"}},"field_zero_meanings":{"DataType":"Encoded zero selects FP64."},"legality":["The carrier selects exactly CUBE Function 2 and TileOperation_TMATMUL_ACC.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout; Local C also uses A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize.","C and D are both mandatory. CScaleEn accepts one final U8 CUBE_M32 [M,1] Local mathematical source only with FP32 C; omission defaults CScaleEn to zero. In decoded blocks C's six-bit relative selector must differ from zero-extended DstTile before rename; direct Tile calls require destination TileIndex to differ from accumulator TileIndex.","A Shared primary must satisfy hardware-maintained whole-parent readiness and publication before payload access; fixed-quarter allocation or initialization masks are not a prerequisite. Any cooperative Local-A/Shared-B or Shared-A/Shared-B TMATMUL interprets LB0 as Core-total group_M in 1..128; Shared A has exact physical valid shape [group_M,K] with physical index m*pitch+k (K-major) for TransA=0 or [K,group_M] with physical index k*pitch+m (M-major) for TransA=1; Shared B has exact physical valid shape [N,K] with physical index n*pitch+k (K-major, ordinary dense column-major/DN-equivalent) for TransB=0 or [K,N] with physical index k*pitch+n (N-major, ordinary dense row-major) for TransB=1; physical columns may be legally padded, and PE i uses valid_M=clamp(group_M-i*M_per_PE,0,M_per_PE) with M_per_PE 16 for group_M<=64 and 32 for group_M>=65. TransA and TransB apply only to their corresponding Shared primary. Right-only Shared inherits Local A layout; all-Shared ACC inherits C layout; all-Shared non-ACC selects M16 through M=16 and M32 through M=32.","AType and BType must be supported ordinary Matrix types from one numeric class. C is one explicit Local MxN accumulator source and D is a distinct newly published destination; C's encoded relative selector and D's zero-extended DstTile hand must differ before rename. Published Shared operands may replace the right group or both matrix groups; supplementary operands and destinations remain Local.","Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects.","B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema.","For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D.","Cooperative Shared Matrix forms accept group_M in 1..128 and N/K in 1..65535 without power-of-two restrictions. Validate Local CUBE roles with existing descriptor and capacity rules; validate Shared roles against the original legal Shared descriptor and physical pitch. Internal read views preserve original pitch and use typed logical element/carrier/lane reads without a transient Local descriptor or 64 KiB capacity limit.","If any supported four-bit Shared primary is present (E2M1X2, E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such original parent physical columns pitch are even under every transpose combination. Valid M/group_M and N gain no parity restriction. This does not affect Local-only TMATMUL, TGEMV, generic Shared allocation, or Local packed A when Shared B is not packed."],"memory_effects":["none"],"operands":[{"field":"DataType","role":"tile element data type selector"}],"ordering":["Complete schema, field, type, dimension, descriptor, shape, capacity, readiness, alias, and allocation preflight precedes every source snapshot and destination effect.","D and every enabled reduction output publish as one atomic group; rejection publishes none and successful sources persist.","Transparent-cache hints occur only after complete preflight and cannot alter source snapshots, D allocation or publication, faults, or numeric status."],"standalone_opcode":true,"state_effects":["Start a CUBE Function 2 descriptor with encoded DataType preserved as AType.","At block completion execute TileOperation_TMATMUL_ACC using the resolved M, N, K, input types, mathematical operands, and B.FPATR postprocess schema.","Publish the complete output group atomically after successful preflight and computation; do not consume mathematical or postprocess sources.","For Local execution, publish D with A's CUBE_M16 or CUBE_M32 layout and final output dtype; Bias uses Local CUBE_N8; RowMaxIn/Out and GroupMaxOut use the resolved M layout; vector quant/PReLU parameters use Local CUBE_N8/U64; MX scales keep their operation-owned layouts.","Successful Shared primary reads leave every Shared descriptor, mask, publication state, payload, and lifetime unchanged.","C is snapshotted before multiplication and remains descriptor-and-payload unchanged after success or rejection.","Always publish D; CCTRL[0]=1 publishes raw accumulator-type D and may hint cache replacement, while ACC CCTRL[1]=1 may hint cache use or prefetch of explicit C. Hint handling is not architecturally observable."]},"depends_on":["PTO-BLOCK-MODEL-SCHEMA-BUNDLE-ENCODING"],"id":"PTO-BLOCK-BSTART-TMATMUL-ACC","mnemonic":"BSTART.TMATMUL.ACC","summary":"Starts CUBE Function 2 for the TMATMUL_ACC Matrix-matrix complete-bundle operation.","surface":"block"} // PTO-REVIEW: {"review_method":"formal-definition-read","outcome":"FORMAL-COMPLETE","reviewed_fields":["assembly","encoding","defaults","operation","state","memory","ordering","faults","reserved"]} // NDF-BEGIN: PTO-BSTART-TMATMUL-ACC-CONTRACT-001 // ndf: kind=contract level=L1 layer=block status=accepted @@ -15,6 +15,18 @@ // index MUST be n*pitch+k (K-major, ordinary dense column-major/DN-equivalent) // for TransB=0 or k*pitch+n (N-major, ordinary dense row-major) for TransB=1. // Physical columns MAY be padded only within legal descriptor capacity. +// Cooperative Shared forms MUST use group_M in 1..128 and N/K in 1..65535; +// cooperative N/K MUST not have power-of-two restrictions. Validate Local +// CUBE roles with existing descriptor/capacity rules and Shared roles against +// the original legal Shared descriptors. Internal read views MUST preserve +// original pitch and typed logical element/carrier/lane mapping without a +// transient Local descriptor or 64 KiB capacity limit. +// If a supported packed-four-bit Shared primary is present (E2M1X2, +// E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such +// original parent physical `columns` pitch MUST be even under every +// transpose combination. Valid M/group_M and N have no added parity rule. +// This restriction MUST not affect Local-only TMATMUL, TGEMV, generic Shared +// allocation, or Local packed A when Shared B is not packed. // AType and BType must be supported ordinary Matrix types from one numeric // class. C is one explicit Local MxN accumulator source and D is a newly // published destination; C and D may use one architectural Tile name. diff --git a/asl/block/execution/BSTART.TMATMUL.BIAS.asl b/asl/block/execution/BSTART.TMATMUL.BIAS.asl index cbeddbab5..403e2267e 100644 --- a/asl/block/execution/BSTART.TMATMUL.BIAS.asl +++ b/asl/block/execution/BSTART.TMATMUL.BIAS.asl @@ -1,4 +1,4 @@ -// PTO-INSTRUCTION: {"assembly":["BSTART.TMATMUL.BIAS DataType"],"block":[],"catalog_indices":[43],"catalog_records":[{"asm":"BSTART.TMATMUL.BIAS DataType","constraints":[{"field":"DataType","operator":"one-of","values":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,18,19,20,24,25,26,27,28]}],"encoding":[{"index":0,"mask":"0x07ffffff","match":"0x00131181","width_bits":32}],"encoding_kind":"L32","fields":[{"name":"DataType","pieces":[{"instruction_lsb":27,"value_lsb":0,"width":5}],"signedness":"encoding-defined","width":5}],"form_id":"bstart_tmatmul_bias_32_4d5a498d12f3","length_bits":32,"mnemonic":"BSTART.TMATMUL.BIAS","semantic_family":"CMD","semantic_group":"Bundle Split","semantic_handler":"ExecuteBundleStart","semantic_summary":"Starts CUBE Function 1 for the TMATMUL_BIAS Matrix-matrix complete-bundle operation.","status":"accepted","state_effects":["runtime:CurrentBundleCCTRL:raw-partial-and-transparent-cache-hints"]}],"classification":["execution"],"contract":{"block_composition":["BSTART.TMATMUL.BIAS AType","B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType)","B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one)","B.DIM LB0 M or cooperative group_M (optional, default 1)","B.DIM LB1 N (optional, default 1)","B.DIM LB2 K (optional, default 1)","B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111)","B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, B CUBE_N8 primary, CUBE_N8 1xN Bias","B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations","B.IOT/B.IOR postprocess operands selected by B.FPATR","BSTOP or the next BSTART completion boundary"],"canonical_assembly":["BSTART.TMATMUL.BIAS DataType"],"defaults":["Encoded DataType is always AType. Omitted B.DATR preserves AType as BType, selects RNE, and disables saturation.","Omitted LB0 defaults Local M or cooperative group_M to one; omitted LB1 and LB2 default N and K to one.","Exactly one all-zero B.FPATR selects no conversion, activation, or reduction; B.IOR and auxiliary B.IOT operands exist only when a selected postprocess mode requires them.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize. Bias uses Local CUBE_N8; it is a logical 1xN accumulator-type source (FP32 for MX) broadcast by logical output column.","TransA=0 and TransB=0 select no logical transpose. Each nonzero control is legal only when the corresponding primary is Shared.","Omitted CCTRL selects 00: final D output and no transparent-cache hint."],"encoding_class":"standalone-encoded","examples":["BSTART.TMATMUL.BIAS AType; B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType); B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one); B.DIM LB0 M or cooperative group_M (optional, default 1); B.DIM LB1 N (optional, default 1); B.DIM LB2 K (optional, default 1); B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111); B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, B CUBE_N8 primary, CUBE_N8 1xN Bias; B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations; B.IOT/B.IOR postprocess operands selected by B.FPATR; BSTOP or the next BSTART completion boundary"],"exceptions":["A reserved DataType or fixed-bit mismatch raises Fault_IllegalInstruction before block state changes.","Missing, duplicate, or non-Matrix B.FPATR use raises Fault_BundleControl before allocation or payload effects.","Illegal types, dimensions, masks, binding streams, descriptors, shapes, capacities, aliases, readiness, or postprocess values raise Fault_TileLegality before source snapshots and effects."],"field_contracts":{"DataType":{"ref":"PTO-FIELD-BLOCK-DATATYPE"}},"field_zero_meanings":{"DataType":"Encoded zero selects FP64."},"legality":["The carrier selects exactly CUBE Function 1 and TileOperation_TMATMUL_BIAS.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize. Bias uses Local CUBE_N8; it is a logical 1xN accumulator-type source (FP32 for MX) broadcast by logical output column.","A Shared primary must satisfy hardware-maintained whole-parent readiness and publication before payload access; fixed-quarter allocation or initialization masks are not a prerequisite. Any cooperative Local-A/Shared-B or Shared-A/Shared-B TMATMUL interprets LB0 as Core-total group_M in 1..128; Shared A has exact physical valid shape [group_M,K] with physical index m*pitch+k (K-major) for TransA=0 or [K,group_M] with physical index k*pitch+m (M-major) for TransA=1; Shared B has exact physical valid shape [N,K] with physical index n*pitch+k (K-major, ordinary dense column-major/DN-equivalent) for TransB=0 or [K,N] with physical index k*pitch+n (N-major, ordinary dense row-major) for TransB=1; physical columns may be legally padded, and PE i uses valid_M=clamp(group_M-i*M_per_PE,0,M_per_PE) with M_per_PE 16 for group_M<=64 and 32 for group_M>=65. TransA and TransB apply only to their corresponding Shared primary. Right-only Shared inherits Local A layout; all-Shared ACC inherits C layout; all-Shared non-ACC selects M16 through M=16 and M32 through M=32.","AType and BType must be supported ordinary Matrix types from one numeric class. Bias uses one Local CUBE_N8 logical 1xN accumulator-type source (FP32 for MX), broadcast by logical output column. Published Shared operands may replace the right group or both matrix groups; supplementary operands and destinations remain Local.","Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects.","B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema.","For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D."],"memory_effects":["none"],"operands":[{"field":"DataType","role":"tile element data type selector"}],"ordering":["Complete schema, field, type, dimension, descriptor, shape, capacity, readiness, alias, and allocation preflight precedes every source snapshot and destination effect.","D and every enabled reduction output publish as one atomic group; rejection publishes none and successful sources persist.","Transparent-cache hints occur only after complete preflight and cannot alter source snapshots, D allocation or publication, faults, or numeric status."],"standalone_opcode":true,"state_effects":["Start a CUBE Function 1 descriptor with encoded DataType preserved as AType.","At block completion execute TileOperation_TMATMUL_BIAS using the resolved M, N, K, input types, mathematical operands, and B.FPATR postprocess schema.","Publish the complete output group atomically after successful preflight and computation; do not consume mathematical or postprocess sources.","For Local execution, publish D with A's CUBE_M16 or CUBE_M32 layout and final output dtype; Bias uses Local CUBE_N8; RowMaxIn/Out and GroupMaxOut use the resolved M layout; vector quant/PReLU parameters use Local CUBE_N8/U64; MX scales keep their operation-owned layouts.","Successful Shared primary reads leave every Shared descriptor, mask, publication state, payload, and lifetime unchanged.","Always publish D; CCTRL[0]=1 publishes raw accumulator-type D and may hint cache replacement, while ACC CCTRL[1]=1 may hint cache use or prefetch of explicit C. Hint handling is not architecturally observable."]},"depends_on":["PTO-BLOCK-MODEL-SCHEMA-BUNDLE-ENCODING"],"id":"PTO-BLOCK-BSTART-TMATMUL-BIAS","mnemonic":"BSTART.TMATMUL.BIAS","summary":"Starts CUBE Function 1 for the TMATMUL_BIAS Matrix-matrix complete-bundle operation.","surface":"block"} +// PTO-INSTRUCTION: {"assembly":["BSTART.TMATMUL.BIAS DataType"],"block":[],"catalog_indices":[43],"catalog_records":[{"asm":"BSTART.TMATMUL.BIAS DataType","constraints":[{"field":"DataType","operator":"one-of","values":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,18,19,20,24,25,26,27,28]}],"encoding":[{"index":0,"mask":"0x07ffffff","match":"0x00131181","width_bits":32}],"encoding_kind":"L32","fields":[{"name":"DataType","pieces":[{"instruction_lsb":27,"value_lsb":0,"width":5}],"signedness":"encoding-defined","width":5}],"form_id":"bstart_tmatmul_bias_32_4d5a498d12f3","length_bits":32,"mnemonic":"BSTART.TMATMUL.BIAS","semantic_family":"CMD","semantic_group":"Bundle Split","semantic_handler":"ExecuteBundleStart","semantic_summary":"Starts CUBE Function 1 for the TMATMUL_BIAS Matrix-matrix complete-bundle operation.","status":"accepted","state_effects":["runtime:CurrentBundleCCTRL:raw-partial-and-transparent-cache-hints"]}],"classification":["execution"],"contract":{"block_composition":["BSTART.TMATMUL.BIAS AType","B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType)","B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one)","B.DIM LB0 M or cooperative group_M (optional, default 1)","B.DIM LB1 N (optional, default 1)","B.DIM LB2 K (optional, default 1)","B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111)","B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, B CUBE_N8 primary, CUBE_N8 1xN Bias","B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations","B.IOT/B.IOR postprocess operands selected by B.FPATR","BSTOP or the next BSTART completion boundary"],"canonical_assembly":["BSTART.TMATMUL.BIAS DataType"],"defaults":["Encoded DataType is always AType. Omitted B.DATR preserves AType as BType, selects RNE, and disables saturation.","Omitted LB0 defaults Local M or cooperative group_M to one; omitted LB1 and LB2 default N and K to one.","Exactly one all-zero B.FPATR selects no conversion, activation, or reduction; B.IOR and auxiliary B.IOT operands exist only when a selected postprocess mode requires them.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize. Bias uses Local CUBE_N8; it is a logical 1xN accumulator-type source (FP32 for MX) broadcast by logical output column.","TransA=0 and TransB=0 select no logical transpose. Each nonzero control is legal only when the corresponding primary is Shared.","Omitted CCTRL selects 00: final D output and no transparent-cache hint."],"encoding_class":"standalone-encoded","examples":["BSTART.TMATMUL.BIAS AType; B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType); B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one); B.DIM LB0 M or cooperative group_M (optional, default 1); B.DIM LB1 N (optional, default 1); B.DIM LB2 K (optional, default 1); B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111); B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, B CUBE_N8 primary, CUBE_N8 1xN Bias; B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations; B.IOT/B.IOR postprocess operands selected by B.FPATR; BSTOP or the next BSTART completion boundary"],"exceptions":["A reserved DataType or fixed-bit mismatch raises Fault_IllegalInstruction before block state changes.","Missing, duplicate, or non-Matrix B.FPATR use raises Fault_BundleControl before allocation or payload effects.","Illegal types, dimensions, masks, binding streams, descriptors, shapes, capacities, aliases, readiness, or postprocess values raise Fault_TileLegality before source snapshots and effects."],"field_contracts":{"DataType":{"ref":"PTO-FIELD-BLOCK-DATATYPE"}},"field_zero_meanings":{"DataType":"Encoded zero selects FP64."},"legality":["The carrier selects exactly CUBE Function 1 and TileOperation_TMATMUL_BIAS.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize. Bias uses Local CUBE_N8; it is a logical 1xN accumulator-type source (FP32 for MX) broadcast by logical output column.","A Shared primary must satisfy hardware-maintained whole-parent readiness and publication before payload access; fixed-quarter allocation or initialization masks are not a prerequisite. Any cooperative Local-A/Shared-B or Shared-A/Shared-B TMATMUL interprets LB0 as Core-total group_M in 1..128; Shared A has exact physical valid shape [group_M,K] with physical index m*pitch+k (K-major) for TransA=0 or [K,group_M] with physical index k*pitch+m (M-major) for TransA=1; Shared B has exact physical valid shape [N,K] with physical index n*pitch+k (K-major, ordinary dense column-major/DN-equivalent) for TransB=0 or [K,N] with physical index k*pitch+n (N-major, ordinary dense row-major) for TransB=1; physical columns may be legally padded, and PE i uses valid_M=clamp(group_M-i*M_per_PE,0,M_per_PE) with M_per_PE 16 for group_M<=64 and 32 for group_M>=65. TransA and TransB apply only to their corresponding Shared primary. Right-only Shared inherits Local A layout; all-Shared ACC inherits C layout; all-Shared non-ACC selects M16 through M=16 and M32 through M=32.","AType and BType must be supported ordinary Matrix types from one numeric class. Bias uses one Local CUBE_N8 logical 1xN accumulator-type source (FP32 for MX), broadcast by logical output column. Published Shared operands may replace the right group or both matrix groups; supplementary operands and destinations remain Local.","Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects.","B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema.","For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D.","Cooperative Shared Matrix forms accept group_M in 1..128 and N/K in 1..65535 without power-of-two restrictions. Validate Local CUBE roles with existing descriptor and capacity rules; validate Shared roles against the original legal Shared descriptor and physical pitch. Internal read views preserve original pitch and use typed logical element/carrier/lane reads without a transient Local descriptor or 64 KiB capacity limit.","If any supported four-bit Shared primary is present (E2M1X2, E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such original parent physical columns pitch are even under every transpose combination. Valid M/group_M and N gain no parity restriction. This does not affect Local-only TMATMUL, TGEMV, generic Shared allocation, or Local packed A when Shared B is not packed."],"memory_effects":["none"],"operands":[{"field":"DataType","role":"tile element data type selector"}],"ordering":["Complete schema, field, type, dimension, descriptor, shape, capacity, readiness, alias, and allocation preflight precedes every source snapshot and destination effect.","D and every enabled reduction output publish as one atomic group; rejection publishes none and successful sources persist.","Transparent-cache hints occur only after complete preflight and cannot alter source snapshots, D allocation or publication, faults, or numeric status."],"standalone_opcode":true,"state_effects":["Start a CUBE Function 1 descriptor with encoded DataType preserved as AType.","At block completion execute TileOperation_TMATMUL_BIAS using the resolved M, N, K, input types, mathematical operands, and B.FPATR postprocess schema.","Publish the complete output group atomically after successful preflight and computation; do not consume mathematical or postprocess sources.","For Local execution, publish D with A's CUBE_M16 or CUBE_M32 layout and final output dtype; Bias uses Local CUBE_N8; RowMaxIn/Out and GroupMaxOut use the resolved M layout; vector quant/PReLU parameters use Local CUBE_N8/U64; MX scales keep their operation-owned layouts.","Successful Shared primary reads leave every Shared descriptor, mask, publication state, payload, and lifetime unchanged.","Always publish D; CCTRL[0]=1 publishes raw accumulator-type D and may hint cache replacement, while ACC CCTRL[1]=1 may hint cache use or prefetch of explicit C. Hint handling is not architecturally observable."]},"depends_on":["PTO-BLOCK-MODEL-SCHEMA-BUNDLE-ENCODING"],"id":"PTO-BLOCK-BSTART-TMATMUL-BIAS","mnemonic":"BSTART.TMATMUL.BIAS","summary":"Starts CUBE Function 1 for the TMATMUL_BIAS Matrix-matrix complete-bundle operation.","surface":"block"} // PTO-REVIEW: {"review_method":"formal-definition-read","outcome":"FORMAL-COMPLETE","reviewed_fields":["assembly","encoding","defaults","operation","state","memory","ordering","faults","reserved"]} // NDF-BEGIN: PTO-BSTART-TMATMUL-BIAS-CONTRACT-001 // ndf: kind=contract level=L1 layer=block status=accepted @@ -15,6 +15,18 @@ // index MUST be n*pitch+k (K-major, ordinary dense column-major/DN-equivalent) // for TransB=0 or k*pitch+n (N-major, ordinary dense row-major) for TransB=1. // Physical columns MAY be padded only within legal descriptor capacity. +// Cooperative Shared forms MUST use group_M in 1..128 and N/K in 1..65535; +// cooperative N/K MUST not have power-of-two restrictions. Validate Local +// CUBE roles with existing descriptor/capacity rules and Shared roles against +// the original legal Shared descriptors. Internal read views MUST preserve +// original pitch and typed logical element/carrier/lane mapping without a +// transient Local descriptor or 64 KiB capacity limit. +// If a supported packed-four-bit Shared primary is present (E2M1X2, +// E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such +// original parent physical `columns` pitch MUST be even under every +// transpose combination. Valid M/group_M and N have no added parity rule. +// This restriction MUST not affect Local-only TMATMUL, TGEMV, generic Shared +// allocation, or Local packed A when Shared B is not packed. // AType and BType must be supported ordinary Matrix types from one numeric // class. Bias uses one Local CUBE_N8 logical 1xN accumulator-type source (FP32 for MX), broadcast by logical output column. Published // Shared operands may replace the right group or both matrix groups; diff --git a/asl/block/execution/BSTART.TMATMUL.asl b/asl/block/execution/BSTART.TMATMUL.asl index 2b0c2cf50..d8698d76d 100644 --- a/asl/block/execution/BSTART.TMATMUL.asl +++ b/asl/block/execution/BSTART.TMATMUL.asl @@ -1,4 +1,4 @@ -// PTO-INSTRUCTION: {"assembly":["BSTART.TMATMUL DataType"],"block":[],"catalog_indices":[41],"catalog_records":[{"asm":"BSTART.TMATMUL DataType","constraints":[{"field":"DataType","operator":"one-of","values":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,18,19,20,24,25,26,27,28]}],"encoding":[{"index":0,"mask":"0x07ffffff","match":"0x00031181","width_bits":32}],"encoding_kind":"L32","fields":[{"name":"DataType","pieces":[{"instruction_lsb":27,"value_lsb":0,"width":5}],"signedness":"encoding-defined","width":5}],"form_id":"bstart_tmatmul_32_f9da70e4e0ad","length_bits":32,"mnemonic":"BSTART.TMATMUL","semantic_family":"CMD","semantic_group":"Bundle Split","semantic_handler":"ExecuteBundleStart","semantic_summary":"Starts CUBE Function 0 for the TMATMUL Matrix-matrix complete-bundle operation.","status":"accepted","state_effects":["runtime:CurrentBundleCCTRL:raw-partial-and-transparent-cache-hints"]}],"classification":["execution"],"contract":{"block_composition":["BSTART.TMATMUL AType","B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType)","B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one)","B.DIM LB0 M or cooperative group_M (optional, default 1)","B.DIM LB1 N (optional, default 1)","B.DIM LB2 K (optional, default 1)","B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111)","B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, B CUBE_N8 primary","B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations","B.IOT/B.IOR postprocess operands selected by B.FPATR","BSTOP or the next BSTART completion boundary"],"canonical_assembly":["BSTART.TMATMUL DataType"],"defaults":["Encoded DataType is always AType. Omitted B.DATR preserves AType as BType, selects RNE, and disables saturation.","Omitted LB0 defaults Local M or cooperative group_M to one; omitted LB1 and LB2 default N and K to one.","Exactly one all-zero B.FPATR selects no conversion, activation, or reduction; B.IOR and auxiliary B.IOT operands exist only when a selected postprocess mode requires them.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize.","TransA=0 and TransB=0 select no logical transpose. Each nonzero control is legal only when the corresponding primary is Shared.","Omitted CCTRL selects 00: final D output and no transparent-cache hint."],"encoding_class":"standalone-encoded","examples":["BSTART.TMATMUL AType; B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType); B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one); B.DIM LB0 M or cooperative group_M (optional, default 1); B.DIM LB1 N (optional, default 1); B.DIM LB2 K (optional, default 1); B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111); B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, B CUBE_N8 primary; B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations; B.IOT/B.IOR postprocess operands selected by B.FPATR; BSTOP or the next BSTART completion boundary"],"exceptions":["A reserved DataType or fixed-bit mismatch raises Fault_IllegalInstruction before block state changes.","Missing, duplicate, or non-Matrix B.FPATR use raises Fault_BundleControl before allocation or payload effects.","Illegal types, dimensions, masks, binding streams, descriptors, shapes, capacities, aliases, readiness, or postprocess values raise Fault_TileLegality before source snapshots and effects."],"field_contracts":{"DataType":{"ref":"PTO-FIELD-BLOCK-DATATYPE"}},"field_zero_meanings":{"DataType":"Encoded zero selects FP64."},"legality":["The carrier selects exactly CUBE Function 0 and TileOperation_TMATMUL.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize.","A Shared primary must satisfy hardware-maintained whole-parent readiness and publication before payload access; fixed-quarter allocation or initialization masks are not a prerequisite. Any cooperative Local-A/Shared-B or Shared-A/Shared-B TMATMUL interprets LB0 as Core-total group_M in 1..128; Shared A has exact physical valid shape [group_M,K] with physical index m*pitch+k (K-major) for TransA=0 or [K,group_M] with physical index k*pitch+m (M-major) for TransA=1; Shared B has exact physical valid shape [N,K] with physical index n*pitch+k (K-major, ordinary dense column-major/DN-equivalent) for TransB=0 or [K,N] with physical index k*pitch+n (N-major, ordinary dense row-major) for TransB=1; physical columns may be legally padded, and PE i uses valid_M=clamp(group_M-i*M_per_PE,0,M_per_PE) with M_per_PE 16 for group_M<=64 and 32 for group_M>=65. TransA and TransB apply only to their corresponding Shared primary. Right-only Shared inherits Local A layout; all-Shared ACC inherits C layout; all-Shared non-ACC selects M16 through M=16 and M32 through M=32.","AType and BType must be supported ordinary Matrix types from one numeric class. Published Shared operands may replace the right group or both matrix groups; supplementary operands and destinations remain Local.","Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects.","B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema.","For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D."],"memory_effects":["none"],"operands":[{"field":"DataType","role":"tile element data type selector"}],"ordering":["Complete schema, field, type, dimension, descriptor, shape, capacity, readiness, alias, and allocation preflight precedes every source snapshot and destination effect.","D and every enabled reduction output publish as one atomic group; rejection publishes none and successful sources persist.","Transparent-cache hints occur only after complete preflight and cannot alter source snapshots, D allocation or publication, faults, or numeric status."],"standalone_opcode":true,"state_effects":["Start a CUBE Function 0 descriptor with encoded DataType preserved as AType.","At block completion execute TileOperation_TMATMUL using the resolved M, N, K, input types, mathematical operands, and B.FPATR postprocess schema.","Publish the complete output group atomically after successful preflight and computation; do not consume mathematical or postprocess sources.","For Local execution, publish D with A's CUBE_M16 or CUBE_M32 layout and final output dtype; Bias uses Local CUBE_N8; RowMaxIn/Out and GroupMaxOut use the resolved M layout; vector quant/PReLU parameters use Local CUBE_N8/U64; MX scales keep their operation-owned layouts.","Successful Shared primary reads leave every Shared descriptor, mask, publication state, payload, and lifetime unchanged.","Always publish D; CCTRL[0]=1 publishes raw accumulator-type D and may hint cache replacement, while ACC CCTRL[1]=1 may hint cache use or prefetch of explicit C. Hint handling is not architecturally observable."]},"depends_on":["PTO-BLOCK-MODEL-SCHEMA-BUNDLE-ENCODING"],"id":"PTO-BLOCK-BSTART-TMATMUL","mnemonic":"BSTART.TMATMUL","summary":"Starts CUBE Function 0 for the TMATMUL Matrix-matrix complete-bundle operation.","surface":"block"} +// PTO-INSTRUCTION: {"assembly":["BSTART.TMATMUL DataType"],"block":[],"catalog_indices":[41],"catalog_records":[{"asm":"BSTART.TMATMUL DataType","constraints":[{"field":"DataType","operator":"one-of","values":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,18,19,20,24,25,26,27,28]}],"encoding":[{"index":0,"mask":"0x07ffffff","match":"0x00031181","width_bits":32}],"encoding_kind":"L32","fields":[{"name":"DataType","pieces":[{"instruction_lsb":27,"value_lsb":0,"width":5}],"signedness":"encoding-defined","width":5}],"form_id":"bstart_tmatmul_32_f9da70e4e0ad","length_bits":32,"mnemonic":"BSTART.TMATMUL","semantic_family":"CMD","semantic_group":"Bundle Split","semantic_handler":"ExecuteBundleStart","semantic_summary":"Starts CUBE Function 0 for the TMATMUL Matrix-matrix complete-bundle operation.","status":"accepted","state_effects":["runtime:CurrentBundleCCTRL:raw-partial-and-transparent-cache-hints"]}],"classification":["execution"],"contract":{"block_composition":["BSTART.TMATMUL AType","B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType)","B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one)","B.DIM LB0 M or cooperative group_M (optional, default 1)","B.DIM LB1 N (optional, default 1)","B.DIM LB2 K (optional, default 1)","B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111)","B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, B CUBE_N8 primary","B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations","B.IOT/B.IOR postprocess operands selected by B.FPATR","BSTOP or the next BSTART completion boundary"],"canonical_assembly":["BSTART.TMATMUL DataType"],"defaults":["Encoded DataType is always AType. Omitted B.DATR preserves AType as BType, selects RNE, and disables saturation.","Omitted LB0 defaults Local M or cooperative group_M to one; omitted LB1 and LB2 default N and K to one.","Exactly one all-zero B.FPATR selects no conversion, activation, or reduction; B.IOR and auxiliary B.IOT operands exist only when a selected postprocess mode requires them.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize.","TransA=0 and TransB=0 select no logical transpose. Each nonzero control is legal only when the corresponding primary is Shared.","Omitted CCTRL selects 00: final D output and no transparent-cache hint."],"encoding_class":"standalone-encoded","examples":["BSTART.TMATMUL AType; B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType); B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one); B.DIM LB0 M or cooperative group_M (optional, default 1); B.DIM LB1 N (optional, default 1); B.DIM LB2 K (optional, default 1); B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111); B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, B CUBE_N8 primary; B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations; B.IOT/B.IOR postprocess operands selected by B.FPATR; BSTOP or the next BSTART completion boundary"],"exceptions":["A reserved DataType or fixed-bit mismatch raises Fault_IllegalInstruction before block state changes.","Missing, duplicate, or non-Matrix B.FPATR use raises Fault_BundleControl before allocation or payload effects.","Illegal types, dimensions, masks, binding streams, descriptors, shapes, capacities, aliases, readiness, or postprocess values raise Fault_TileLegality before source snapshots and effects."],"field_contracts":{"DataType":{"ref":"PTO-FIELD-BLOCK-DATATYPE"}},"field_zero_meanings":{"DataType":"Encoded zero selects FP64."},"legality":["The carrier selects exactly CUBE Function 0 and TileOperation_TMATMUL.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize.","A Shared primary must satisfy hardware-maintained whole-parent readiness and publication before payload access; fixed-quarter allocation or initialization masks are not a prerequisite. Any cooperative Local-A/Shared-B or Shared-A/Shared-B TMATMUL interprets LB0 as Core-total group_M in 1..128; Shared A has exact physical valid shape [group_M,K] with physical index m*pitch+k (K-major) for TransA=0 or [K,group_M] with physical index k*pitch+m (M-major) for TransA=1; Shared B has exact physical valid shape [N,K] with physical index n*pitch+k (K-major, ordinary dense column-major/DN-equivalent) for TransB=0 or [K,N] with physical index k*pitch+n (N-major, ordinary dense row-major) for TransB=1; physical columns may be legally padded, and PE i uses valid_M=clamp(group_M-i*M_per_PE,0,M_per_PE) with M_per_PE 16 for group_M<=64 and 32 for group_M>=65. TransA and TransB apply only to their corresponding Shared primary. Right-only Shared inherits Local A layout; all-Shared ACC inherits C layout; all-Shared non-ACC selects M16 through M=16 and M32 through M=32.","AType and BType must be supported ordinary Matrix types from one numeric class. Published Shared operands may replace the right group or both matrix groups; supplementary operands and destinations remain Local.","Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects.","B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema.","For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D.","Cooperative Shared Matrix forms accept group_M in 1..128 and N/K in 1..65535 without power-of-two restrictions. Validate Local CUBE roles with existing descriptor and capacity rules; validate Shared roles against the original legal Shared descriptor and physical pitch. Internal read views preserve original pitch and use typed logical element/carrier/lane reads without a transient Local descriptor or 64 KiB capacity limit.","If any supported four-bit Shared primary is present (E2M1X2, E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such original parent physical columns pitch are even under every transpose combination. Valid M/group_M and N gain no parity restriction. This does not affect Local-only TMATMUL, TGEMV, generic Shared allocation, or Local packed A when Shared B is not packed."],"memory_effects":["none"],"operands":[{"field":"DataType","role":"tile element data type selector"}],"ordering":["Complete schema, field, type, dimension, descriptor, shape, capacity, readiness, alias, and allocation preflight precedes every source snapshot and destination effect.","D and every enabled reduction output publish as one atomic group; rejection publishes none and successful sources persist.","Transparent-cache hints occur only after complete preflight and cannot alter source snapshots, D allocation or publication, faults, or numeric status."],"standalone_opcode":true,"state_effects":["Start a CUBE Function 0 descriptor with encoded DataType preserved as AType.","At block completion execute TileOperation_TMATMUL using the resolved M, N, K, input types, mathematical operands, and B.FPATR postprocess schema.","Publish the complete output group atomically after successful preflight and computation; do not consume mathematical or postprocess sources.","For Local execution, publish D with A's CUBE_M16 or CUBE_M32 layout and final output dtype; Bias uses Local CUBE_N8; RowMaxIn/Out and GroupMaxOut use the resolved M layout; vector quant/PReLU parameters use Local CUBE_N8/U64; MX scales keep their operation-owned layouts.","Successful Shared primary reads leave every Shared descriptor, mask, publication state, payload, and lifetime unchanged.","Always publish D; CCTRL[0]=1 publishes raw accumulator-type D and may hint cache replacement, while ACC CCTRL[1]=1 may hint cache use or prefetch of explicit C. Hint handling is not architecturally observable."]},"depends_on":["PTO-BLOCK-MODEL-SCHEMA-BUNDLE-ENCODING"],"id":"PTO-BLOCK-BSTART-TMATMUL","mnemonic":"BSTART.TMATMUL","summary":"Starts CUBE Function 0 for the TMATMUL Matrix-matrix complete-bundle operation.","surface":"block"} // PTO-REVIEW: {"review_method":"formal-definition-read","outcome":"FORMAL-COMPLETE","reviewed_fields":["assembly","encoding","defaults","operation","state","memory","ordering","faults","reserved"]} // NDF-BEGIN: PTO-BSTART-TMATMUL-CONTRACT-001 // ndf: kind=contract level=L1 layer=block status=accepted @@ -15,6 +15,18 @@ // index MUST be n*pitch+k (K-major, ordinary dense column-major/DN-equivalent) // for TransB=0 or k*pitch+n (N-major, ordinary dense row-major) for TransB=1. // Physical columns MAY be padded only within legal descriptor capacity. +// Cooperative Shared forms MUST use group_M in 1..128 and N/K in 1..65535; +// cooperative N/K MUST not have power-of-two restrictions. Validate Local +// CUBE roles with existing descriptor/capacity rules and Shared roles against +// the original legal Shared descriptors. Internal read views MUST preserve +// original pitch and typed logical element/carrier/lane mapping without a +// transient Local descriptor or 64 KiB capacity limit. +// If a supported packed-four-bit Shared primary is present (E2M1X2, +// E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such +// original parent physical `columns` pitch MUST be even under every +// transpose combination. Valid M/group_M and N have no added parity rule. +// This restriction MUST not affect Local-only TMATMUL, TGEMV, generic Shared +// allocation, or Local packed A when Shared B is not packed. // AType and BType must be supported ordinary Matrix types from one numeric // class. Published Shared operands may replace the right group or both matrix // groups; supplementary operands and destinations remain Local. diff --git a/asl/block/execution/BSTART.TMATMULMX.ACC.asl b/asl/block/execution/BSTART.TMATMULMX.ACC.asl index ce4f03ac0..3de5dcb2b 100644 --- a/asl/block/execution/BSTART.TMATMULMX.ACC.asl +++ b/asl/block/execution/BSTART.TMATMULMX.ACC.asl @@ -1,4 +1,4 @@ -// PTO-INSTRUCTION: {"assembly":["BSTART.TMATMULMX.ACC DataType"],"block":[],"catalog_indices":[45],"catalog_records":[{"asm":"BSTART.TMATMULMX.ACC DataType","constraints":[{"field":"DataType","operator":"one-of","values":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,18,19,20,24,25,26,27,28]}],"encoding":[{"index":0,"mask":"0x07ffffff","match":"0x00631181","width_bits":32}],"encoding_kind":"L32","fields":[{"name":"DataType","pieces":[{"instruction_lsb":27,"value_lsb":0,"width":5}],"signedness":"encoding-defined","width":5}],"form_id":"bstart_tmatmulmx_acc_32_70fa59b0ab4c","length_bits":32,"mnemonic":"BSTART.TMATMULMX.ACC","semantic_family":"CMD","semantic_group":"Bundle Split","semantic_handler":"ExecuteBundleStart","semantic_summary":"Starts CUBE Function 6 for the TMATMUL_MX_ACC Matrix-matrix complete-bundle operation.","status":"accepted","state_effects":["runtime:CurrentBundleCCTRL:raw-partial-and-transparent-cache-hints"]}],"classification":["execution"],"contract":{"block_composition":["BSTART.TMATMULMX.ACC AType","B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType)","B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one)","B.DIM LB0 M or cooperative group_M (optional, default 1)","B.DIM LB1 N (optional, default 1)","B.DIM LB2 K (optional, default 1)","B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111)","B.IOT ordered Local mathematical sources: C CUBE_M16/M32 accumulator matching A with encoded selector distinct from DstTile, A CUBE_M16/M32 primary, optional A scale, B CUBE_N8 primary, optional B scale, optional U8 CScale CUBE_M32 [M,1]","B.IOT D matching A's CUBE_M16/M32 layout with a distinct encoded destination index, optional RowMaxOut, optional GroupMaxOut destinations","B.IOT/B.IOR postprocess operands selected by B.FPATR","BSTOP or the next BSTART completion boundary"],"canonical_assembly":["BSTART.TMATMULMX.ACC DataType"],"defaults":["Encoded DataType is always AType. Omitted B.DATR preserves AType as BType, selects RNE, and disables saturation.","Omitted LB0 defaults Local M or cooperative group_M to one; omitted LB1 and LB2 default N and K to one.","Exactly one all-zero B.FPATR selects no conversion, activation, or reduction; B.IOR and auxiliary B.IOT operands exist only when a selected postprocess mode requires them.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout; Local C also uses A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize; when a Local Matrix-MX scale is required, its M/N major is at most 32 because Local scales use one-block CUBE_M32, while Shared scales remain ordinary Tiles. Each side uses group-32 E8M0 or HiF4X2 group-64 U32 scale; Local scales use CUBE_M32 and Shared scales remain ordinary Tiles.","TransA=0 and TransB=0 select no logical transpose. Each nonzero control is legal only when the corresponding primary is Shared.","C and D are both mandatory. CScaleEn accepts one final U8 CUBE_M32 [M,1] Local mathematical source only with FP32 C; omission defaults CScaleEn to zero. In decoded blocks C's six-bit relative selector must differ from zero-extended DstTile before rename; direct Tile calls require destination TileIndex to differ from accumulator TileIndex.","Omitted CCTRL selects 00: final D output and no transparent-cache hint."],"encoding_class":"standalone-encoded","examples":["BSTART.TMATMULMX.ACC AType; B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType); B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one); B.DIM LB0 M or cooperative group_M (optional, default 1); B.DIM LB1 N (optional, default 1); B.DIM LB2 K (optional, default 1); B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111); B.IOT ordered Local mathematical sources: C CUBE_M16/M32 accumulator matching A with encoded selector distinct from DstTile, A CUBE_M16/M32 primary, optional A scale, B CUBE_N8 primary, optional B scale; B.IOT D matching A's CUBE_M16/M32 layout with a distinct encoded destination index, optional RowMaxOut, optional GroupMaxOut destinations; B.IOT/B.IOR postprocess operands selected by B.FPATR; BSTOP or the next BSTART completion boundary"],"exceptions":["A reserved DataType or fixed-bit mismatch raises Fault_IllegalInstruction before block state changes.","Missing, duplicate, or non-Matrix B.FPATR use raises Fault_BundleControl before allocation or payload effects.","Illegal types, dimensions, masks, binding streams, descriptors, shapes, capacities, aliases, readiness, or postprocess values raise Fault_TileLegality before source snapshots and effects."],"field_contracts":{"DataType":{"ref":"PTO-FIELD-BLOCK-DATATYPE"}},"field_zero_meanings":{"DataType":"Encoded zero selects FP64."},"legality":["The carrier selects exactly CUBE Function 6 and TileOperation_TMATMUL_MX_ACC.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout; Local C also uses A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize; when a Local Matrix-MX scale is required, its M/N major is at most 32 because Local scales use one-block CUBE_M32, while Shared scales remain ordinary Tiles. Each side uses group-32 E8M0 or HiF4X2 group-64 U32 scale; Local scales use CUBE_M32 and Shared scales remain ordinary Tiles.","C and D are both mandatory. CScaleEn accepts one final U8 CUBE_M32 [M,1] Local mathematical source only with FP32 C; omission defaults CScaleEn to zero. In decoded blocks C's six-bit relative selector must differ from zero-extended DstTile before rename; direct Tile calls require destination TileIndex to differ from accumulator TileIndex.","A Shared primary must satisfy hardware-maintained whole-parent readiness and publication before payload access; fixed-quarter allocation or initialization masks are not a prerequisite. Any cooperative Local-A/Shared-B or Shared-A/Shared-B TMATMUL interprets LB0 as Core-total group_M in 1..128; Shared A has exact physical valid shape [group_M,K] with physical index m*pitch+k (K-major) for TransA=0 or [K,group_M] with physical index k*pitch+m (M-major) for TransA=1; Shared B has exact physical valid shape [N,K] with physical index n*pitch+k (K-major, ordinary dense column-major/DN-equivalent) for TransB=0 or [K,N] with physical index k*pitch+n (N-major, ordinary dense row-major) for TransB=1; physical columns may be legally padded, and PE i uses valid_M=clamp(group_M-i*M_per_PE,0,M_per_PE) with M_per_PE 16 for group_M<=64 and 32 for group_M>=65. TransA and TransB apply only to their corresponding Shared primary. Right-only Shared inherits Local A layout; all-Shared ACC inherits C layout; all-Shared non-ACC selects M16 through M=16 and M32 through M=32.","Each non-FP16/BF16 side requires its assigned scale: group-32 E8M0 for MX FP8/FP4 or group-64 U32 for HiF4X2. C is one explicit Local MxN accumulator source and D is a distinct newly published destination; C's encoded relative selector and D's zero-extended DstTile hand must differ before rename. Published Shared operands may replace the right group or both matrix groups; supplementary operands and destinations remain Local.","Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects.","B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema.","For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D."],"memory_effects":["none"],"operands":[{"field":"DataType","role":"tile element data type selector"}],"ordering":["Complete schema, field, type, dimension, descriptor, shape, capacity, readiness, alias, and allocation preflight precedes every source snapshot and destination effect.","D and every enabled reduction output publish as one atomic group; rejection publishes none and successful sources persist.","Transparent-cache hints occur only after complete preflight and cannot alter source snapshots, D allocation or publication, faults, or numeric status."],"standalone_opcode":true,"state_effects":["Start a CUBE Function 6 descriptor with encoded DataType preserved as AType.","At block completion execute TileOperation_TMATMUL_MX_ACC using the resolved M, N, K, input types, mathematical operands, and B.FPATR postprocess schema.","Publish the complete output group atomically after successful preflight and computation; do not consume mathematical or postprocess sources.","For Local execution, publish D with A's CUBE_M16 or CUBE_M32 layout and final output dtype; Bias uses Local CUBE_N8; RowMaxIn/Out and GroupMaxOut use the resolved M layout; vector quant/PReLU parameters use Local CUBE_N8/U64; MX scales keep their operation-owned layouts.","Successful Shared primary reads leave every Shared descriptor, mask, publication state, payload, and lifetime unchanged.","C is snapshotted before multiplication and remains descriptor-and-payload unchanged after success or rejection.","Always publish D; CCTRL[0]=1 publishes raw accumulator-type D and may hint cache replacement, while ACC CCTRL[1]=1 may hint cache use or prefetch of explicit C. Hint handling is not architecturally observable."]},"depends_on":["PTO-BLOCK-MODEL-SCHEMA-BUNDLE-ENCODING"],"id":"PTO-BLOCK-BSTART-TMATMULMX-ACC","mnemonic":"BSTART.TMATMULMX.ACC","summary":"Starts CUBE Function 6 for the TMATMUL_MX_ACC Matrix-matrix complete-bundle operation.","surface":"block"} +// PTO-INSTRUCTION: {"assembly":["BSTART.TMATMULMX.ACC DataType"],"block":[],"catalog_indices":[45],"catalog_records":[{"asm":"BSTART.TMATMULMX.ACC DataType","constraints":[{"field":"DataType","operator":"one-of","values":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,18,19,20,24,25,26,27,28]}],"encoding":[{"index":0,"mask":"0x07ffffff","match":"0x00631181","width_bits":32}],"encoding_kind":"L32","fields":[{"name":"DataType","pieces":[{"instruction_lsb":27,"value_lsb":0,"width":5}],"signedness":"encoding-defined","width":5}],"form_id":"bstart_tmatmulmx_acc_32_70fa59b0ab4c","length_bits":32,"mnemonic":"BSTART.TMATMULMX.ACC","semantic_family":"CMD","semantic_group":"Bundle Split","semantic_handler":"ExecuteBundleStart","semantic_summary":"Starts CUBE Function 6 for the TMATMUL_MX_ACC Matrix-matrix complete-bundle operation.","status":"accepted","state_effects":["runtime:CurrentBundleCCTRL:raw-partial-and-transparent-cache-hints"]}],"classification":["execution"],"contract":{"block_composition":["BSTART.TMATMULMX.ACC AType","B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType)","B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one)","B.DIM LB0 M or cooperative group_M (optional, default 1)","B.DIM LB1 N (optional, default 1)","B.DIM LB2 K (optional, default 1)","B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111)","B.IOT ordered Local mathematical sources: C CUBE_M16/M32 accumulator matching A with encoded selector distinct from DstTile, A CUBE_M16/M32 primary, optional A scale, B CUBE_N8 primary, optional B scale, optional U8 CScale CUBE_M32 [M,1]","B.IOT D matching A's CUBE_M16/M32 layout with a distinct encoded destination index, optional RowMaxOut, optional GroupMaxOut destinations","B.IOT/B.IOR postprocess operands selected by B.FPATR","BSTOP or the next BSTART completion boundary"],"canonical_assembly":["BSTART.TMATMULMX.ACC DataType"],"defaults":["Encoded DataType is always AType. Omitted B.DATR preserves AType as BType, selects RNE, and disables saturation.","Omitted LB0 defaults Local M or cooperative group_M to one; omitted LB1 and LB2 default N and K to one.","Exactly one all-zero B.FPATR selects no conversion, activation, or reduction; B.IOR and auxiliary B.IOT operands exist only when a selected postprocess mode requires them.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout; Local C also uses A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize; when a Local Matrix-MX scale is required, its M/N major is at most 32 because Local scales use one-block CUBE_M32, while Shared scales remain ordinary Tiles. Each side uses group-32 E8M0 or HiF4X2 group-64 U32 scale; Local scales use CUBE_M32 and Shared scales remain ordinary Tiles.","TransA=0 and TransB=0 select no logical transpose. Each nonzero control is legal only when the corresponding primary is Shared.","C and D are both mandatory. CScaleEn accepts one final U8 CUBE_M32 [M,1] Local mathematical source only with FP32 C; omission defaults CScaleEn to zero. In decoded blocks C's six-bit relative selector must differ from zero-extended DstTile before rename; direct Tile calls require destination TileIndex to differ from accumulator TileIndex.","Omitted CCTRL selects 00: final D output and no transparent-cache hint."],"encoding_class":"standalone-encoded","examples":["BSTART.TMATMULMX.ACC AType; B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType); B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one); B.DIM LB0 M or cooperative group_M (optional, default 1); B.DIM LB1 N (optional, default 1); B.DIM LB2 K (optional, default 1); B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111); B.IOT ordered Local mathematical sources: C CUBE_M16/M32 accumulator matching A with encoded selector distinct from DstTile, A CUBE_M16/M32 primary, optional A scale, B CUBE_N8 primary, optional B scale; B.IOT D matching A's CUBE_M16/M32 layout with a distinct encoded destination index, optional RowMaxOut, optional GroupMaxOut destinations; B.IOT/B.IOR postprocess operands selected by B.FPATR; BSTOP or the next BSTART completion boundary"],"exceptions":["A reserved DataType or fixed-bit mismatch raises Fault_IllegalInstruction before block state changes.","Missing, duplicate, or non-Matrix B.FPATR use raises Fault_BundleControl before allocation or payload effects.","Illegal types, dimensions, masks, binding streams, descriptors, shapes, capacities, aliases, readiness, or postprocess values raise Fault_TileLegality before source snapshots and effects."],"field_contracts":{"DataType":{"ref":"PTO-FIELD-BLOCK-DATATYPE"}},"field_zero_meanings":{"DataType":"Encoded zero selects FP64."},"legality":["The carrier selects exactly CUBE Function 6 and TileOperation_TMATMUL_MX_ACC.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout; Local C also uses A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize; when a Local Matrix-MX scale is required, its M/N major is at most 32 because Local scales use one-block CUBE_M32, while Shared scales remain ordinary Tiles. Each side uses group-32 E8M0 or HiF4X2 group-64 U32 scale; Local scales use CUBE_M32 and Shared scales remain ordinary Tiles.","C and D are both mandatory. CScaleEn accepts one final U8 CUBE_M32 [M,1] Local mathematical source only with FP32 C; omission defaults CScaleEn to zero. In decoded blocks C's six-bit relative selector must differ from zero-extended DstTile before rename; direct Tile calls require destination TileIndex to differ from accumulator TileIndex.","A Shared primary must satisfy hardware-maintained whole-parent readiness and publication before payload access; fixed-quarter allocation or initialization masks are not a prerequisite. Any cooperative Local-A/Shared-B or Shared-A/Shared-B TMATMUL interprets LB0 as Core-total group_M in 1..128; Shared A has exact physical valid shape [group_M,K] with physical index m*pitch+k (K-major) for TransA=0 or [K,group_M] with physical index k*pitch+m (M-major) for TransA=1; Shared B has exact physical valid shape [N,K] with physical index n*pitch+k (K-major, ordinary dense column-major/DN-equivalent) for TransB=0 or [K,N] with physical index k*pitch+n (N-major, ordinary dense row-major) for TransB=1; physical columns may be legally padded, and PE i uses valid_M=clamp(group_M-i*M_per_PE,0,M_per_PE) with M_per_PE 16 for group_M<=64 and 32 for group_M>=65. TransA and TransB apply only to their corresponding Shared primary. Right-only Shared inherits Local A layout; all-Shared ACC inherits C layout; all-Shared non-ACC selects M16 through M=16 and M32 through M=32.","Each non-FP16/BF16 side requires its assigned scale: group-32 E8M0 for MX FP8/FP4 or group-64 U32 for HiF4X2. C is one explicit Local MxN accumulator source and D is a distinct newly published destination; C's encoded relative selector and D's zero-extended DstTile hand must differ before rename. Published Shared operands may replace the right group or both matrix groups; supplementary operands and destinations remain Local.","Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects.","B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema.","For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D.","Cooperative Shared Matrix forms accept group_M in 1..128 and N/K in 1..65535 without power-of-two restrictions. Validate Local CUBE roles with existing descriptor and capacity rules; validate Shared roles against the original legal Shared descriptor and physical pitch. Internal read views preserve original pitch and use typed logical element/carrier/lane reads without a transient Local descriptor or 64 KiB capacity limit.","If any supported four-bit Shared primary is present (E2M1X2, E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such original parent physical columns pitch are even under every transpose combination. Valid M/group_M and N gain no parity restriction. This does not affect Local-only TMATMUL, TGEMV, generic Shared allocation, or Local packed A when Shared B is not packed.","Shared Matrix-MX ScaleA has exact stored-valid shape [group_M,G_A] and ScaleB [N,G_B], with each G equal to ceil(K/group_size) for its side (group-32 E8M0 or group-64 U32), independent of TransA/TransB; valid k selects floor(k/group_size)."],"memory_effects":["none"],"operands":[{"field":"DataType","role":"tile element data type selector"}],"ordering":["Complete schema, field, type, dimension, descriptor, shape, capacity, readiness, alias, and allocation preflight precedes every source snapshot and destination effect.","D and every enabled reduction output publish as one atomic group; rejection publishes none and successful sources persist.","Transparent-cache hints occur only after complete preflight and cannot alter source snapshots, D allocation or publication, faults, or numeric status."],"standalone_opcode":true,"state_effects":["Start a CUBE Function 6 descriptor with encoded DataType preserved as AType.","At block completion execute TileOperation_TMATMUL_MX_ACC using the resolved M, N, K, input types, mathematical operands, and B.FPATR postprocess schema.","Publish the complete output group atomically after successful preflight and computation; do not consume mathematical or postprocess sources.","For Local execution, publish D with A's CUBE_M16 or CUBE_M32 layout and final output dtype; Bias uses Local CUBE_N8; RowMaxIn/Out and GroupMaxOut use the resolved M layout; vector quant/PReLU parameters use Local CUBE_N8/U64; MX scales keep their operation-owned layouts.","Successful Shared primary reads leave every Shared descriptor, mask, publication state, payload, and lifetime unchanged.","C is snapshotted before multiplication and remains descriptor-and-payload unchanged after success or rejection.","Always publish D; CCTRL[0]=1 publishes raw accumulator-type D and may hint cache replacement, while ACC CCTRL[1]=1 may hint cache use or prefetch of explicit C. Hint handling is not architecturally observable."]},"depends_on":["PTO-BLOCK-MODEL-SCHEMA-BUNDLE-ENCODING"],"id":"PTO-BLOCK-BSTART-TMATMULMX-ACC","mnemonic":"BSTART.TMATMULMX.ACC","summary":"Starts CUBE Function 6 for the TMATMUL_MX_ACC Matrix-matrix complete-bundle operation.","surface":"block"} // PTO-REVIEW: {"review_method":"formal-definition-read","outcome":"FORMAL-COMPLETE","reviewed_fields":["assembly","encoding","defaults","operation","state","memory","ordering","faults","reserved"]} // NDF-BEGIN: PTO-BSTART-TMATMULMX-ACC-CONTRACT-001 // ndf: kind=contract level=L1 layer=block status=accepted @@ -15,6 +15,18 @@ // index MUST be n*pitch+k (K-major, ordinary dense column-major/DN-equivalent) // for TransB=0 or k*pitch+n (N-major, ordinary dense row-major) for TransB=1. // Physical columns MAY be padded only within legal descriptor capacity. +// Cooperative Shared forms MUST use group_M in 1..128 and N/K in 1..65535; +// cooperative N/K MUST not have power-of-two restrictions. Validate Local +// CUBE roles with existing descriptor/capacity rules and Shared roles against +// the original legal Shared descriptors. Internal read views MUST preserve +// original pitch and typed logical element/carrier/lane mapping without a +// transient Local descriptor or 64 KiB capacity limit. +// If a supported packed-four-bit Shared primary is present (E2M1X2, +// E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such +// original parent physical `columns` pitch MUST be even under every +// transpose combination. Valid M/group_M and N have no added parity rule. +// This restriction MUST not affect Local-only TMATMUL, TGEMV, generic Shared +// allocation, or Local packed A when Shared B is not packed. // Each matrix side independently requires an E8M0 scale exactly when its MX // input type is not FP16 or BF16. C is one explicit Local MxN accumulator // source and D is a distinct newly published destination. C's encoded relative @@ -24,6 +36,10 @@ // Local A/B/C scales use one physical CUBE_M32 row block, so their valid major // dimension is at most 32; a Local B-scale with N>32 is illegal without a // replacement representation. Shared scales remain ordinary Tiles. +// For Shared Matrix-MX, ScaleA MUST have exact stored-valid shape +// [group_M,G_A] and ScaleB [N,G_B], where each G is ceil(K/group_size) +// for its own primary type (group-32 E8M0 or group-64 U32). Transpose MUST +// not change scale shape or indexing; each valid k selects floor(k/group_size). // Shared primaries MUST satisfy parent-level whole_parent_ready and published // readiness; producer and consumer masks remain independent. // TransA/TransB MUST apply only to the corresponding Shared primary. Every diff --git a/asl/block/execution/BSTART.TMATMULMX.BIAS.asl b/asl/block/execution/BSTART.TMATMULMX.BIAS.asl index 0e123c0bc..32ff403c9 100644 --- a/asl/block/execution/BSTART.TMATMULMX.BIAS.asl +++ b/asl/block/execution/BSTART.TMATMULMX.BIAS.asl @@ -1,4 +1,4 @@ -// PTO-INSTRUCTION: {"assembly":["BSTART.TMATMULMX.BIAS DataType"],"block":[],"catalog_indices":[46],"catalog_records":[{"asm":"BSTART.TMATMULMX.BIAS DataType","constraints":[{"field":"DataType","operator":"one-of","values":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,18,19,20,24,25,26,27,28]}],"encoding":[{"index":0,"mask":"0x07ffffff","match":"0x00531181","width_bits":32}],"encoding_kind":"L32","fields":[{"name":"DataType","pieces":[{"instruction_lsb":27,"value_lsb":0,"width":5}],"signedness":"encoding-defined","width":5}],"form_id":"bstart_tmatmulmx_bias_32_098c7efa51b0","length_bits":32,"mnemonic":"BSTART.TMATMULMX.BIAS","semantic_family":"CMD","semantic_group":"Bundle Split","semantic_handler":"ExecuteBundleStart","semantic_summary":"Starts CUBE Function 5 for the TMATMUL_MX_BIAS Matrix-matrix complete-bundle operation.","status":"accepted","state_effects":["runtime:CurrentBundleCCTRL:raw-partial-and-transparent-cache-hints"]}],"classification":["execution"],"contract":{"block_composition":["BSTART.TMATMULMX.BIAS AType","B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType)","B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one)","B.DIM LB0 M or cooperative group_M (optional, default 1)","B.DIM LB1 N (optional, default 1)","B.DIM LB2 K (optional, default 1)","B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111)","B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, optional A scale, B CUBE_N8 primary, optional B scale, CUBE_N8 1xN Bias","B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations","B.IOT/B.IOR postprocess operands selected by B.FPATR","BSTOP or the next BSTART completion boundary"],"canonical_assembly":["BSTART.TMATMULMX.BIAS DataType"],"defaults":["Encoded DataType is always AType. Omitted B.DATR preserves AType as BType, selects RNE, and disables saturation.","Omitted LB0 defaults Local M or cooperative group_M to one; omitted LB1 and LB2 default N and K to one.","Exactly one all-zero B.FPATR selects no conversion, activation, or reduction; B.IOR and auxiliary B.IOT operands exist only when a selected postprocess mode requires them.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize; when a Local Matrix-MX scale is required, its M/N major is at most 32 because Local scales use one-block CUBE_M32, while Shared scales remain ordinary Tiles. Bias uses Local CUBE_N8; it is a logical 1xN accumulator-type source (FP32 for MX) broadcast by logical output column. Each side uses group-32 E8M0 or HiF4X2 group-64 U32 scale; Local scales use CUBE_M32 and Shared scales remain ordinary Tiles.","TransA=0 and TransB=0 select no logical transpose. Each nonzero control is legal only when the corresponding primary is Shared.","Omitted CCTRL selects 00: final D output and no transparent-cache hint."],"encoding_class":"standalone-encoded","examples":["BSTART.TMATMULMX.BIAS AType; B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType); B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one); B.DIM LB0 M or cooperative group_M (optional, default 1); B.DIM LB1 N (optional, default 1); B.DIM LB2 K (optional, default 1); B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111); B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, optional A scale, B CUBE_N8 primary, optional B scale, CUBE_N8 1xN Bias; B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations; B.IOT/B.IOR postprocess operands selected by B.FPATR; BSTOP or the next BSTART completion boundary"],"exceptions":["A reserved DataType or fixed-bit mismatch raises Fault_IllegalInstruction before block state changes.","Missing, duplicate, or non-Matrix B.FPATR use raises Fault_BundleControl before allocation or payload effects.","Illegal types, dimensions, masks, binding streams, descriptors, shapes, capacities, aliases, readiness, or postprocess values raise Fault_TileLegality before source snapshots and effects."],"field_contracts":{"DataType":{"ref":"PTO-FIELD-BLOCK-DATATYPE"}},"field_zero_meanings":{"DataType":"Encoded zero selects FP64."},"legality":["The carrier selects exactly CUBE Function 5 and TileOperation_TMATMUL_MX_BIAS.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize; when a Local Matrix-MX scale is required, its M/N major is at most 32 because Local scales use one-block CUBE_M32, while Shared scales remain ordinary Tiles. Bias uses Local CUBE_N8; it is a logical 1xN accumulator-type source (FP32 for MX) broadcast by logical output column. Each side uses group-32 E8M0 or HiF4X2 group-64 U32 scale; Local scales use CUBE_M32 and Shared scales remain ordinary Tiles.","A Shared primary must satisfy hardware-maintained whole-parent readiness and publication before payload access; fixed-quarter allocation or initialization masks are not a prerequisite. Any cooperative Local-A/Shared-B or Shared-A/Shared-B TMATMUL interprets LB0 as Core-total group_M in 1..128; Shared A has exact physical valid shape [group_M,K] with physical index m*pitch+k (K-major) for TransA=0 or [K,group_M] with physical index k*pitch+m (M-major) for TransA=1; Shared B has exact physical valid shape [N,K] with physical index n*pitch+k (K-major, ordinary dense column-major/DN-equivalent) for TransB=0 or [K,N] with physical index k*pitch+n (N-major, ordinary dense row-major) for TransB=1; physical columns may be legally padded, and PE i uses valid_M=clamp(group_M-i*M_per_PE,0,M_per_PE) with M_per_PE 16 for group_M<=64 and 32 for group_M>=65. TransA and TransB apply only to their corresponding Shared primary. Right-only Shared inherits Local A layout; all-Shared ACC inherits C layout; all-Shared non-ACC selects M16 through M=16 and M32 through M=32.","Each non-FP16/BF16 side requires its assigned scale: group-32 E8M0 for MX FP8/FP4 or group-64 U32 for HiF4X2. Bias uses one Local CUBE_N8 logical 1xN accumulator-type source (FP32 for MX), broadcast by logical output column. Published Shared operands may replace the right group or both matrix groups; supplementary operands and destinations remain Local.","Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects.","B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema.","For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D."],"memory_effects":["none"],"operands":[{"field":"DataType","role":"tile element data type selector"}],"ordering":["Complete schema, field, type, dimension, descriptor, shape, capacity, readiness, alias, and allocation preflight precedes every source snapshot and destination effect.","D and every enabled reduction output publish as one atomic group; rejection publishes none and successful sources persist.","Transparent-cache hints occur only after complete preflight and cannot alter source snapshots, D allocation or publication, faults, or numeric status."],"standalone_opcode":true,"state_effects":["Start a CUBE Function 5 descriptor with encoded DataType preserved as AType.","At block completion execute TileOperation_TMATMUL_MX_BIAS using the resolved M, N, K, input types, mathematical operands, and B.FPATR postprocess schema.","Publish the complete output group atomically after successful preflight and computation; do not consume mathematical or postprocess sources.","For Local execution, publish D with A's CUBE_M16 or CUBE_M32 layout and final output dtype; Bias uses Local CUBE_N8; RowMaxIn/Out and GroupMaxOut use the resolved M layout; vector quant/PReLU parameters use Local CUBE_N8/U64; MX scales keep their operation-owned layouts.","Successful Shared primary reads leave every Shared descriptor, mask, publication state, payload, and lifetime unchanged.","Always publish D; CCTRL[0]=1 publishes raw accumulator-type D and may hint cache replacement, while ACC CCTRL[1]=1 may hint cache use or prefetch of explicit C. Hint handling is not architecturally observable."]},"depends_on":["PTO-BLOCK-MODEL-SCHEMA-BUNDLE-ENCODING"],"id":"PTO-BLOCK-BSTART-TMATMULMX-BIAS","mnemonic":"BSTART.TMATMULMX.BIAS","summary":"Starts CUBE Function 5 for the TMATMUL_MX_BIAS Matrix-matrix complete-bundle operation.","surface":"block"} +// PTO-INSTRUCTION: {"assembly":["BSTART.TMATMULMX.BIAS DataType"],"block":[],"catalog_indices":[46],"catalog_records":[{"asm":"BSTART.TMATMULMX.BIAS DataType","constraints":[{"field":"DataType","operator":"one-of","values":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,18,19,20,24,25,26,27,28]}],"encoding":[{"index":0,"mask":"0x07ffffff","match":"0x00531181","width_bits":32}],"encoding_kind":"L32","fields":[{"name":"DataType","pieces":[{"instruction_lsb":27,"value_lsb":0,"width":5}],"signedness":"encoding-defined","width":5}],"form_id":"bstart_tmatmulmx_bias_32_098c7efa51b0","length_bits":32,"mnemonic":"BSTART.TMATMULMX.BIAS","semantic_family":"CMD","semantic_group":"Bundle Split","semantic_handler":"ExecuteBundleStart","semantic_summary":"Starts CUBE Function 5 for the TMATMUL_MX_BIAS Matrix-matrix complete-bundle operation.","status":"accepted","state_effects":["runtime:CurrentBundleCCTRL:raw-partial-and-transparent-cache-hints"]}],"classification":["execution"],"contract":{"block_composition":["BSTART.TMATMULMX.BIAS AType","B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType)","B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one)","B.DIM LB0 M or cooperative group_M (optional, default 1)","B.DIM LB1 N (optional, default 1)","B.DIM LB2 K (optional, default 1)","B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111)","B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, optional A scale, B CUBE_N8 primary, optional B scale, CUBE_N8 1xN Bias","B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations","B.IOT/B.IOR postprocess operands selected by B.FPATR","BSTOP or the next BSTART completion boundary"],"canonical_assembly":["BSTART.TMATMULMX.BIAS DataType"],"defaults":["Encoded DataType is always AType. Omitted B.DATR preserves AType as BType, selects RNE, and disables saturation.","Omitted LB0 defaults Local M or cooperative group_M to one; omitted LB1 and LB2 default N and K to one.","Exactly one all-zero B.FPATR selects no conversion, activation, or reduction; B.IOR and auxiliary B.IOT operands exist only when a selected postprocess mode requires them.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize; when a Local Matrix-MX scale is required, its M/N major is at most 32 because Local scales use one-block CUBE_M32, while Shared scales remain ordinary Tiles. Bias uses Local CUBE_N8; it is a logical 1xN accumulator-type source (FP32 for MX) broadcast by logical output column. Each side uses group-32 E8M0 or HiF4X2 group-64 U32 scale; Local scales use CUBE_M32 and Shared scales remain ordinary Tiles.","TransA=0 and TransB=0 select no logical transpose. Each nonzero control is legal only when the corresponding primary is Shared.","Omitted CCTRL selects 00: final D output and no transparent-cache hint."],"encoding_class":"standalone-encoded","examples":["BSTART.TMATMULMX.BIAS AType; B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType); B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one); B.DIM LB0 M or cooperative group_M (optional, default 1); B.DIM LB1 N (optional, default 1); B.DIM LB2 K (optional, default 1); B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111); B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, optional A scale, B CUBE_N8 primary, optional B scale, CUBE_N8 1xN Bias; B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations; B.IOT/B.IOR postprocess operands selected by B.FPATR; BSTOP or the next BSTART completion boundary"],"exceptions":["A reserved DataType or fixed-bit mismatch raises Fault_IllegalInstruction before block state changes.","Missing, duplicate, or non-Matrix B.FPATR use raises Fault_BundleControl before allocation or payload effects.","Illegal types, dimensions, masks, binding streams, descriptors, shapes, capacities, aliases, readiness, or postprocess values raise Fault_TileLegality before source snapshots and effects."],"field_contracts":{"DataType":{"ref":"PTO-FIELD-BLOCK-DATATYPE"}},"field_zero_meanings":{"DataType":"Encoded zero selects FP64."},"legality":["The carrier selects exactly CUBE Function 5 and TileOperation_TMATMUL_MX_BIAS.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize; when a Local Matrix-MX scale is required, its M/N major is at most 32 because Local scales use one-block CUBE_M32, while Shared scales remain ordinary Tiles. Bias uses Local CUBE_N8; it is a logical 1xN accumulator-type source (FP32 for MX) broadcast by logical output column. Each side uses group-32 E8M0 or HiF4X2 group-64 U32 scale; Local scales use CUBE_M32 and Shared scales remain ordinary Tiles.","A Shared primary must satisfy hardware-maintained whole-parent readiness and publication before payload access; fixed-quarter allocation or initialization masks are not a prerequisite. Any cooperative Local-A/Shared-B or Shared-A/Shared-B TMATMUL interprets LB0 as Core-total group_M in 1..128; Shared A has exact physical valid shape [group_M,K] with physical index m*pitch+k (K-major) for TransA=0 or [K,group_M] with physical index k*pitch+m (M-major) for TransA=1; Shared B has exact physical valid shape [N,K] with physical index n*pitch+k (K-major, ordinary dense column-major/DN-equivalent) for TransB=0 or [K,N] with physical index k*pitch+n (N-major, ordinary dense row-major) for TransB=1; physical columns may be legally padded, and PE i uses valid_M=clamp(group_M-i*M_per_PE,0,M_per_PE) with M_per_PE 16 for group_M<=64 and 32 for group_M>=65. TransA and TransB apply only to their corresponding Shared primary. Right-only Shared inherits Local A layout; all-Shared ACC inherits C layout; all-Shared non-ACC selects M16 through M=16 and M32 through M=32.","Each non-FP16/BF16 side requires its assigned scale: group-32 E8M0 for MX FP8/FP4 or group-64 U32 for HiF4X2. Bias uses one Local CUBE_N8 logical 1xN accumulator-type source (FP32 for MX), broadcast by logical output column. Published Shared operands may replace the right group or both matrix groups; supplementary operands and destinations remain Local.","Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects.","B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema.","For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D.","Cooperative Shared Matrix forms accept group_M in 1..128 and N/K in 1..65535 without power-of-two restrictions. Validate Local CUBE roles with existing descriptor and capacity rules; validate Shared roles against the original legal Shared descriptor and physical pitch. Internal read views preserve original pitch and use typed logical element/carrier/lane reads without a transient Local descriptor or 64 KiB capacity limit.","If any supported four-bit Shared primary is present (E2M1X2, E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such original parent physical columns pitch are even under every transpose combination. Valid M/group_M and N gain no parity restriction. This does not affect Local-only TMATMUL, TGEMV, generic Shared allocation, or Local packed A when Shared B is not packed.","Shared Matrix-MX ScaleA has exact stored-valid shape [group_M,G_A] and ScaleB [N,G_B], with each G equal to ceil(K/group_size) for its side (group-32 E8M0 or group-64 U32), independent of TransA/TransB; valid k selects floor(k/group_size)."],"memory_effects":["none"],"operands":[{"field":"DataType","role":"tile element data type selector"}],"ordering":["Complete schema, field, type, dimension, descriptor, shape, capacity, readiness, alias, and allocation preflight precedes every source snapshot and destination effect.","D and every enabled reduction output publish as one atomic group; rejection publishes none and successful sources persist.","Transparent-cache hints occur only after complete preflight and cannot alter source snapshots, D allocation or publication, faults, or numeric status."],"standalone_opcode":true,"state_effects":["Start a CUBE Function 5 descriptor with encoded DataType preserved as AType.","At block completion execute TileOperation_TMATMUL_MX_BIAS using the resolved M, N, K, input types, mathematical operands, and B.FPATR postprocess schema.","Publish the complete output group atomically after successful preflight and computation; do not consume mathematical or postprocess sources.","For Local execution, publish D with A's CUBE_M16 or CUBE_M32 layout and final output dtype; Bias uses Local CUBE_N8; RowMaxIn/Out and GroupMaxOut use the resolved M layout; vector quant/PReLU parameters use Local CUBE_N8/U64; MX scales keep their operation-owned layouts.","Successful Shared primary reads leave every Shared descriptor, mask, publication state, payload, and lifetime unchanged.","Always publish D; CCTRL[0]=1 publishes raw accumulator-type D and may hint cache replacement, while ACC CCTRL[1]=1 may hint cache use or prefetch of explicit C. Hint handling is not architecturally observable."]},"depends_on":["PTO-BLOCK-MODEL-SCHEMA-BUNDLE-ENCODING"],"id":"PTO-BLOCK-BSTART-TMATMULMX-BIAS","mnemonic":"BSTART.TMATMULMX.BIAS","summary":"Starts CUBE Function 5 for the TMATMUL_MX_BIAS Matrix-matrix complete-bundle operation.","surface":"block"} // PTO-REVIEW: {"review_method":"formal-definition-read","outcome":"FORMAL-COMPLETE","reviewed_fields":["assembly","encoding","defaults","operation","state","memory","ordering","faults","reserved"]} // NDF-BEGIN: PTO-BSTART-TMATMULMX-BIAS-CONTRACT-001 // ndf: kind=contract level=L1 layer=block status=accepted @@ -15,12 +15,28 @@ // index MUST be n*pitch+k (K-major, ordinary dense column-major/DN-equivalent) // for TransB=0 or k*pitch+n (N-major, ordinary dense row-major) for TransB=1. // Physical columns MAY be padded only within legal descriptor capacity. +// Cooperative Shared forms MUST use group_M in 1..128 and N/K in 1..65535; +// cooperative N/K MUST not have power-of-two restrictions. Validate Local +// CUBE roles with existing descriptor/capacity rules and Shared roles against +// the original legal Shared descriptors. Internal read views MUST preserve +// original pitch and typed logical element/carrier/lane mapping without a +// transient Local descriptor or 64 KiB capacity limit. +// If a supported packed-four-bit Shared primary is present (E2M1X2, +// E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such +// original parent physical `columns` pitch MUST be even under every +// transpose combination. Valid M/group_M and N have no added parity rule. +// This restriction MUST not affect Local-only TMATMUL, TGEMV, generic Shared +// allocation, or Local packed A when Shared B is not packed. // Each matrix side independently requires an E8M0 scale exactly when its MX // input type is not FP16 or BF16. Bias uses one Local CUBE_N8 logical 1xN accumulator-type source (FP32 for MX), broadcast by logical output column. Published Shared operands may replace the right group or both // matrix groups; supplementary operands and destinations remain Local. // Local A/B/C scales use one physical CUBE_M32 row block, so their valid major // dimension is at most 32; a Local B-scale with N>32 is illegal without a // replacement representation. Shared scales remain ordinary Tiles. +// For Shared Matrix-MX, ScaleA MUST have exact stored-valid shape +// [group_M,G_A] and ScaleB [N,G_B], where each G is ceil(K/group_size) +// for its own primary type (group-32 E8M0 or group-64 U32). Transpose MUST +// not change scale shape or indexing; each valid k selects floor(k/group_size). // Shared primaries MUST satisfy parent-level whole_parent_ready and published // readiness; producer and consumer masks remain independent. // TransA/TransB MUST apply only to the corresponding Shared primary. Every diff --git a/asl/block/execution/BSTART.TMATMULMX.asl b/asl/block/execution/BSTART.TMATMULMX.asl index af42c20fb..aede71d8a 100644 --- a/asl/block/execution/BSTART.TMATMULMX.asl +++ b/asl/block/execution/BSTART.TMATMULMX.asl @@ -1,4 +1,4 @@ -// PTO-INSTRUCTION: {"assembly":["BSTART.TMATMULMX DataType"],"block":[],"catalog_indices":[44],"catalog_records":[{"asm":"BSTART.TMATMULMX DataType","constraints":[{"field":"DataType","operator":"one-of","values":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,18,19,20,24,25,26,27,28]}],"encoding":[{"index":0,"mask":"0x07ffffff","match":"0x00431181","width_bits":32}],"encoding_kind":"L32","fields":[{"name":"DataType","pieces":[{"instruction_lsb":27,"value_lsb":0,"width":5}],"signedness":"encoding-defined","width":5}],"form_id":"bstart_tmatmulmx_32_e26cb3874648","length_bits":32,"mnemonic":"BSTART.TMATMULMX","semantic_family":"CMD","semantic_group":"Bundle Split","semantic_handler":"ExecuteBundleStart","semantic_summary":"Starts CUBE Function 4 for the TMATMUL_MX Matrix-matrix complete-bundle operation.","status":"accepted","state_effects":["runtime:CurrentBundleCCTRL:raw-partial-and-transparent-cache-hints"]}],"classification":["execution"],"contract":{"block_composition":["BSTART.TMATMULMX AType","B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType)","B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one)","B.DIM LB0 M or cooperative group_M (optional, default 1)","B.DIM LB1 N (optional, default 1)","B.DIM LB2 K (optional, default 1)","B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111)","B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, optional A scale, B CUBE_N8 primary, optional B scale","B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations","B.IOT/B.IOR postprocess operands selected by B.FPATR","BSTOP or the next BSTART completion boundary"],"canonical_assembly":["BSTART.TMATMULMX DataType"],"defaults":["Encoded DataType is always AType. Omitted B.DATR preserves AType as BType, selects RNE, and disables saturation.","Omitted LB0 defaults Local M or cooperative group_M to one; omitted LB1 and LB2 default N and K to one.","Exactly one all-zero B.FPATR selects no conversion, activation, or reduction; B.IOR and auxiliary B.IOT operands exist only when a selected postprocess mode requires them.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize; when a Local Matrix-MX scale is required, its M/N major is at most 32 because Local scales use one-block CUBE_M32, while Shared scales remain ordinary Tiles. Each side uses group-32 E8M0 or HiF4X2 group-64 U32 scale; Local scales use CUBE_M32 and Shared scales remain ordinary Tiles.","TransA=0 and TransB=0 select no logical transpose. Each nonzero control is legal only when the corresponding primary is Shared.","Omitted CCTRL selects 00: final D output and no transparent-cache hint."],"encoding_class":"standalone-encoded","examples":["BSTART.TMATMULMX AType; B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType); B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one); B.DIM LB0 M or cooperative group_M (optional, default 1); B.DIM LB1 N (optional, default 1); B.DIM LB2 K (optional, default 1); B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111); B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, optional A scale, B CUBE_N8 primary, optional B scale; B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations; B.IOT/B.IOR postprocess operands selected by B.FPATR; BSTOP or the next BSTART completion boundary"],"exceptions":["A reserved DataType or fixed-bit mismatch raises Fault_IllegalInstruction before block state changes.","Missing, duplicate, or non-Matrix B.FPATR use raises Fault_BundleControl before allocation or payload effects.","Illegal types, dimensions, masks, binding streams, descriptors, shapes, capacities, aliases, readiness, or postprocess values raise Fault_TileLegality before source snapshots and effects."],"field_contracts":{"DataType":{"ref":"PTO-FIELD-BLOCK-DATATYPE"}},"field_zero_meanings":{"DataType":"Encoded zero selects FP64."},"legality":["The carrier selects exactly CUBE Function 4 and TileOperation_TMATMUL_MX.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize; when a Local Matrix-MX scale is required, its M/N major is at most 32 because Local scales use one-block CUBE_M32, while Shared scales remain ordinary Tiles. Each side uses group-32 E8M0 or HiF4X2 group-64 U32 scale; Local scales use CUBE_M32 and Shared scales remain ordinary Tiles.","A Shared primary must satisfy hardware-maintained whole-parent readiness and publication before payload access; fixed-quarter allocation or initialization masks are not a prerequisite. Any cooperative Local-A/Shared-B or Shared-A/Shared-B TMATMUL interprets LB0 as Core-total group_M in 1..128; Shared A has exact physical valid shape [group_M,K] with physical index m*pitch+k (K-major) for TransA=0 or [K,group_M] with physical index k*pitch+m (M-major) for TransA=1; Shared B has exact physical valid shape [N,K] with physical index n*pitch+k (K-major, ordinary dense column-major/DN-equivalent) for TransB=0 or [K,N] with physical index k*pitch+n (N-major, ordinary dense row-major) for TransB=1; physical columns may be legally padded, and PE i uses valid_M=clamp(group_M-i*M_per_PE,0,M_per_PE) with M_per_PE 16 for group_M<=64 and 32 for group_M>=65. TransA and TransB apply only to their corresponding Shared primary. Right-only Shared inherits Local A layout; all-Shared ACC inherits C layout; all-Shared non-ACC selects M16 through M=16 and M32 through M=32.","Each non-FP16/BF16 side requires its assigned scale: group-32 E8M0 for MX FP8/FP4 or group-64 U32 for HiF4X2. Published Shared operands may replace the right group or both matrix groups; supplementary operands and destinations remain Local.","Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects.","B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema.","For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D."],"memory_effects":["none"],"operands":[{"field":"DataType","role":"tile element data type selector"}],"ordering":["Complete schema, field, type, dimension, descriptor, shape, capacity, readiness, alias, and allocation preflight precedes every source snapshot and destination effect.","D and every enabled reduction output publish as one atomic group; rejection publishes none and successful sources persist.","Transparent-cache hints occur only after complete preflight and cannot alter source snapshots, D allocation or publication, faults, or numeric status."],"standalone_opcode":true,"state_effects":["Start a CUBE Function 4 descriptor with encoded DataType preserved as AType.","At block completion execute TileOperation_TMATMUL_MX using the resolved M, N, K, input types, mathematical operands, and B.FPATR postprocess schema.","Publish the complete output group atomically after successful preflight and computation; do not consume mathematical or postprocess sources.","For Local execution, publish D with A's CUBE_M16 or CUBE_M32 layout and final output dtype; Bias uses Local CUBE_N8; RowMaxIn/Out and GroupMaxOut use the resolved M layout; vector quant/PReLU parameters use Local CUBE_N8/U64; MX scales keep their operation-owned layouts.","Successful Shared primary reads leave every Shared descriptor, mask, publication state, payload, and lifetime unchanged.","Always publish D; CCTRL[0]=1 publishes raw accumulator-type D and may hint cache replacement, while ACC CCTRL[1]=1 may hint cache use or prefetch of explicit C. Hint handling is not architecturally observable."]},"depends_on":["PTO-BLOCK-MODEL-SCHEMA-BUNDLE-ENCODING"],"id":"PTO-BLOCK-BSTART-TMATMULMX","mnemonic":"BSTART.TMATMULMX","summary":"Starts CUBE Function 4 for the TMATMUL_MX Matrix-matrix complete-bundle operation.","surface":"block"} +// PTO-INSTRUCTION: {"assembly":["BSTART.TMATMULMX DataType"],"block":[],"catalog_indices":[44],"catalog_records":[{"asm":"BSTART.TMATMULMX DataType","constraints":[{"field":"DataType","operator":"one-of","values":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,18,19,20,24,25,26,27,28]}],"encoding":[{"index":0,"mask":"0x07ffffff","match":"0x00431181","width_bits":32}],"encoding_kind":"L32","fields":[{"name":"DataType","pieces":[{"instruction_lsb":27,"value_lsb":0,"width":5}],"signedness":"encoding-defined","width":5}],"form_id":"bstart_tmatmulmx_32_e26cb3874648","length_bits":32,"mnemonic":"BSTART.TMATMULMX","semantic_family":"CMD","semantic_group":"Bundle Split","semantic_handler":"ExecuteBundleStart","semantic_summary":"Starts CUBE Function 4 for the TMATMUL_MX Matrix-matrix complete-bundle operation.","status":"accepted","state_effects":["runtime:CurrentBundleCCTRL:raw-partial-and-transparent-cache-hints"]}],"classification":["execution"],"contract":{"block_composition":["BSTART.TMATMULMX AType","B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType)","B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one)","B.DIM LB0 M or cooperative group_M (optional, default 1)","B.DIM LB1 N (optional, default 1)","B.DIM LB2 K (optional, default 1)","B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111)","B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, optional A scale, B CUBE_N8 primary, optional B scale","B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations","B.IOT/B.IOR postprocess operands selected by B.FPATR","BSTOP or the next BSTART completion boundary"],"canonical_assembly":["BSTART.TMATMULMX DataType"],"defaults":["Encoded DataType is always AType. Omitted B.DATR preserves AType as BType, selects RNE, and disables saturation.","Omitted LB0 defaults Local M or cooperative group_M to one; omitted LB1 and LB2 default N and K to one.","Exactly one all-zero B.FPATR selects no conversion, activation, or reduction; B.IOR and auxiliary B.IOT operands exist only when a selected postprocess mode requires them.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize; when a Local Matrix-MX scale is required, its M/N major is at most 32 because Local scales use one-block CUBE_M32, while Shared scales remain ordinary Tiles. Each side uses group-32 E8M0 or HiF4X2 group-64 U32 scale; Local scales use CUBE_M32 and Shared scales remain ordinary Tiles.","TransA=0 and TransB=0 select no logical transpose. Each nonzero control is legal only when the corresponding primary is Shared.","Omitted CCTRL selects 00: final D output and no transparent-cache hint."],"encoding_class":"standalone-encoded","examples":["BSTART.TMATMULMX AType; B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType); B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one); B.DIM LB0 M or cooperative group_M (optional, default 1); B.DIM LB1 N (optional, default 1); B.DIM LB2 K (optional, default 1); B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111); B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, optional A scale, B CUBE_N8 primary, optional B scale; B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations; B.IOT/B.IOR postprocess operands selected by B.FPATR; BSTOP or the next BSTART completion boundary"],"exceptions":["A reserved DataType or fixed-bit mismatch raises Fault_IllegalInstruction before block state changes.","Missing, duplicate, or non-Matrix B.FPATR use raises Fault_BundleControl before allocation or payload effects.","Illegal types, dimensions, masks, binding streams, descriptors, shapes, capacities, aliases, readiness, or postprocess values raise Fault_TileLegality before source snapshots and effects."],"field_contracts":{"DataType":{"ref":"PTO-FIELD-BLOCK-DATATYPE"}},"field_zero_meanings":{"DataType":"Encoded zero selects FP64."},"legality":["The carrier selects exactly CUBE Function 4 and TileOperation_TMATMUL_MX.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize; when a Local Matrix-MX scale is required, its M/N major is at most 32 because Local scales use one-block CUBE_M32, while Shared scales remain ordinary Tiles. Each side uses group-32 E8M0 or HiF4X2 group-64 U32 scale; Local scales use CUBE_M32 and Shared scales remain ordinary Tiles.","A Shared primary must satisfy hardware-maintained whole-parent readiness and publication before payload access; fixed-quarter allocation or initialization masks are not a prerequisite. Any cooperative Local-A/Shared-B or Shared-A/Shared-B TMATMUL interprets LB0 as Core-total group_M in 1..128; Shared A has exact physical valid shape [group_M,K] with physical index m*pitch+k (K-major) for TransA=0 or [K,group_M] with physical index k*pitch+m (M-major) for TransA=1; Shared B has exact physical valid shape [N,K] with physical index n*pitch+k (K-major, ordinary dense column-major/DN-equivalent) for TransB=0 or [K,N] with physical index k*pitch+n (N-major, ordinary dense row-major) for TransB=1; physical columns may be legally padded, and PE i uses valid_M=clamp(group_M-i*M_per_PE,0,M_per_PE) with M_per_PE 16 for group_M<=64 and 32 for group_M>=65. TransA and TransB apply only to their corresponding Shared primary. Right-only Shared inherits Local A layout; all-Shared ACC inherits C layout; all-Shared non-ACC selects M16 through M=16 and M32 through M=32.","Each non-FP16/BF16 side requires its assigned scale: group-32 E8M0 for MX FP8/FP4 or group-64 U32 for HiF4X2. Published Shared operands may replace the right group or both matrix groups; supplementary operands and destinations remain Local.","Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects.","B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema.","For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D.","Cooperative Shared Matrix forms accept group_M in 1..128 and N/K in 1..65535 without power-of-two restrictions. Validate Local CUBE roles with existing descriptor and capacity rules; validate Shared roles against the original legal Shared descriptor and physical pitch. Internal read views preserve original pitch and use typed logical element/carrier/lane reads without a transient Local descriptor or 64 KiB capacity limit.","If any supported four-bit Shared primary is present (E2M1X2, E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such original parent physical columns pitch are even under every transpose combination. Valid M/group_M and N gain no parity restriction. This does not affect Local-only TMATMUL, TGEMV, generic Shared allocation, or Local packed A when Shared B is not packed.","Shared Matrix-MX ScaleA has exact stored-valid shape [group_M,G_A] and ScaleB [N,G_B], with each G equal to ceil(K/group_size) for its side (group-32 E8M0 or group-64 U32), independent of TransA/TransB; valid k selects floor(k/group_size)."],"memory_effects":["none"],"operands":[{"field":"DataType","role":"tile element data type selector"}],"ordering":["Complete schema, field, type, dimension, descriptor, shape, capacity, readiness, alias, and allocation preflight precedes every source snapshot and destination effect.","D and every enabled reduction output publish as one atomic group; rejection publishes none and successful sources persist.","Transparent-cache hints occur only after complete preflight and cannot alter source snapshots, D allocation or publication, faults, or numeric status."],"standalone_opcode":true,"state_effects":["Start a CUBE Function 4 descriptor with encoded DataType preserved as AType.","At block completion execute TileOperation_TMATMUL_MX using the resolved M, N, K, input types, mathematical operands, and B.FPATR postprocess schema.","Publish the complete output group atomically after successful preflight and computation; do not consume mathematical or postprocess sources.","For Local execution, publish D with A's CUBE_M16 or CUBE_M32 layout and final output dtype; Bias uses Local CUBE_N8; RowMaxIn/Out and GroupMaxOut use the resolved M layout; vector quant/PReLU parameters use Local CUBE_N8/U64; MX scales keep their operation-owned layouts.","Successful Shared primary reads leave every Shared descriptor, mask, publication state, payload, and lifetime unchanged.","Always publish D; CCTRL[0]=1 publishes raw accumulator-type D and may hint cache replacement, while ACC CCTRL[1]=1 may hint cache use or prefetch of explicit C. Hint handling is not architecturally observable."]},"depends_on":["PTO-BLOCK-MODEL-SCHEMA-BUNDLE-ENCODING"],"id":"PTO-BLOCK-BSTART-TMATMULMX","mnemonic":"BSTART.TMATMULMX","summary":"Starts CUBE Function 4 for the TMATMUL_MX Matrix-matrix complete-bundle operation.","surface":"block"} // PTO-REVIEW: {"review_method":"formal-definition-read","outcome":"FORMAL-COMPLETE","reviewed_fields":["assembly","encoding","defaults","operation","state","memory","ordering","faults","reserved"]} // NDF-BEGIN: PTO-BSTART-TMATMULMX-CONTRACT-001 // ndf: kind=contract level=L1 layer=block status=accepted @@ -15,6 +15,18 @@ // index MUST be n*pitch+k (K-major, ordinary dense column-major/DN-equivalent) // for TransB=0 or k*pitch+n (N-major, ordinary dense row-major) for TransB=1. // Physical columns MAY be padded only within legal descriptor capacity. +// Cooperative Shared forms MUST use group_M in 1..128 and N/K in 1..65535; +// cooperative N/K MUST not have power-of-two restrictions. Validate Local +// CUBE roles with existing descriptor/capacity rules and Shared roles against +// the original legal Shared descriptors. Internal read views MUST preserve +// original pitch and typed logical element/carrier/lane mapping without a +// transient Local descriptor or 64 KiB capacity limit. +// If a supported packed-four-bit Shared primary is present (E2M1X2, +// E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such +// original parent physical `columns` pitch MUST be even under every +// transpose combination. Valid M/group_M and N have no added parity rule. +// This restriction MUST not affect Local-only TMATMUL, TGEMV, generic Shared +// allocation, or Local packed A when Shared B is not packed. // Each matrix side independently requires an E8M0 scale exactly when its MX // input type is not FP16 or BF16. Published Shared operands may replace the // right group or both matrix groups; supplementary operands and destinations @@ -22,6 +34,10 @@ // Local A/B/C scales use one physical CUBE_M32 row block, so their valid major // dimension is at most 32; a Local B-scale with N>32 is illegal without a // replacement representation. Shared scales remain ordinary Tiles. +// For Shared Matrix-MX, ScaleA MUST have exact stored-valid shape +// [group_M,G_A] and ScaleB [N,G_B], where each G is ceil(K/group_size) +// for its own primary type (group-32 E8M0 or group-64 U32). Transpose MUST +// not change scale shape or indexing; each valid k selects floor(k/group_size). // Shared primaries MUST satisfy parent-level whole_parent_ready and published // readiness; producer and consumer masks remain independent. // TransA/TransB MUST apply only to the corresponding Shared primary. Every diff --git a/asl/block/model/dispatch/cube-tmatmul.asl b/asl/block/model/dispatch/cube-tmatmul.asl index 6feffdf7c..14a4886ec 100644 --- a/asl/block/model/dispatch/cube-tmatmul.asl +++ b/asl/block/model/dispatch/cube-tmatmul.asl @@ -421,34 +421,37 @@ begin shared_ordinal = (shared_ordinal + 1) as integer {0..4}; end; end; - if TileMatrixFunctionUsesBias(function) then bias = BundleMatrixSourceAt( local_ordinal as integer {0..8}); local_ordinal = (local_ordinal + 1) as integer {0..6}; end; - if _BundleFixedPointAttributes.c_scale_en then c_scale = BundleMatrixSourceAt( local_ordinal as integer {0..8}); end; - let right_group = TileMatrixRightGroupSourceCount( function, right_type); + let left_shared = shared_count != 0 && shared_count != right_group; let shape_legal = if shared_count == 0 then TileMatrixCubeInfosMatchDimensions(left, right, pe_m, n, k) - else if shared_count == right_group then - TileMatrixMixedInfosMatchDimensions(left, right, pe_m, n, k) else - TileMatrixInfosMatchDimensions(left, right, pe_m, n, k); + BundleMatrixCooperativeInfosMatchDimensions( + left, right, pe_m, n, k, left_shared, + left_type, right_type); let operand_types_legal = left.data_type == left_type && right.data_type == right_type; let scales_legal = !TileMatrixFunctionUsesMX(function) || - TileMatrixInfoOptionalScalesLegal( - left, left_scale, left_scale_present, - right, right_scale, right_scale_present); + if shared_count == 0 then + TileMatrixInfoOptionalScalesLegal( + left, left_scale, left_scale_present, + right, right_scale, right_scale_present) + else + BundleMatrixCooperativeScalesLegal( + left, left_scale, left_scale_present, left_shared, + right, right_scale, right_scale_present, + left_type, right_type); assert shape_legal && operand_types_legal && scales_legal; - let accumulator_legal = !TileMatrixFunctionUsesAccumulator(function) || TileMatrixLocalCubeAccumulatorSchemaLegal( accumulator, pe_m, n, result_type, primary_layout, diff --git a/asl/block/model/dispatch/matrix-scale.asl b/asl/block/model/dispatch/matrix-scale.asl index f9a7c395d..005c9938c 100644 --- a/asl/block/model/dispatch/matrix-scale.asl +++ b/asl/block/model/dispatch/matrix-scale.asl @@ -1,4 +1,4 @@ -// PTO-UNIT: {"id":"PTO-BLOCK-MODEL-DISPATCH-MATRIX-SCALE","surface":"block","classification":["model","dispatch","matrix-scale"],"depends_on":["PTO-TILE-MODEL-LEGALITY-MATRIX-POSTPROCESS"]} +// PTO-UNIT: {"id":"PTO-BLOCK-MODEL-DISPATCH-MATRIX-SCALE","surface":"block","classification":["model","dispatch","matrix-scale"],"depends_on":["PTO-BLOCK-MODEL-DISPATCH-SHARED-CUBE-MATRIX","PTO-TILE-MODEL-LEGALITY-MATRIX-FUNCTIONS","PTO-TILE-MODEL-LEGALITY-MATRIX-POSTPROCESS"]} readonly func BundleMatrixCScaleDestinationIndicesDistinct( c_scale_ordinal: integer {0..8}) => boolean @@ -13,3 +13,71 @@ begin end; return TRUE; end; + +readonly func BundleMatrixCooperativeInfosMatchDimensions( + left: TileInfo, + right: TileInfo, + m: integer {1..65535}, + n: integer {1..65535}, + k: integer {1..65535}, + left_shared: boolean, + left_type: TileDataType, + right_type: TileDataType) => boolean +begin + let left_legal = if left_shared then + BundleMatrixPrivateSharedViewLegal( + left, m, k, left_type, FALSE) + else + TileCubeDescriptorLegal(left) && left.contents_defined && + left.valid_rows == m && left.valid_columns == k; + return left_legal && BundleMatrixPrivateSharedViewLegal( + right, k, n, right_type, TRUE); +end; + +readonly func BundleMatrixCooperativeScalesLegal( + left: TileInfo, + left_scale: TileInfo, + left_scale_present: boolean, + left_scale_shared: boolean, + right: TileInfo, + right_scale: TileInfo, + right_scale_present: boolean, + left_type: TileDataType, + right_type: TileDataType) => boolean +begin + if !TileMXOperandPairLegal(left_type, right_type) || + left_scale_present != TileMXInputTypeNeedsScale(left_type) || + right_scale_present != TileMXInputTypeNeedsScale(right_type) then + return FALSE; + end; + let left_groups = if left_scale_present then + TileMXScaleGroupCount( + left.valid_columns as integer {1..65535}, left_type) + else 1; + let right_groups = if right_scale_present then + TileMXScaleGroupCount( + left.valid_columns as integer {1..65535}, right_type) + else 1; + let left_scale_type = if left_scale_present then + TileMXScaleCarrierType(left_type) else left_type; + let right_scale_type = if right_scale_present then + TileMXScaleCarrierType(right_type) else right_type; + let left_scale_legal = !left_scale_present || + (left_scale_shared && BundleMatrixPrivateSharedViewLegal( + left_scale, left.valid_rows as integer {1..65535}, + left_groups, left_scale_type, FALSE)) || + (!left_scale_shared && + ((left_scale.layout == TileLayout_CUBE_M32 && + TileCubeDescriptorLegal(left_scale)) || + (left_scale.layout == TileLayout_RowMajor && + TileInfoDescriptorLegal(left_scale))) && + left_scale.data_type == left_scale_type && + left_scale.valid_rows == left.valid_rows && + left_scale.valid_columns == left_groups); + let right_scale_legal = !right_scale_present || + BundleMatrixPrivateSharedViewLegal( + right_scale, right_groups, + right.valid_columns as integer {1..65535}, + right_scale_type, FALSE); + return left_scale_legal && right_scale_legal; +end; diff --git a/asl/block/model/dispatch/shared-cube-matrix.asl b/asl/block/model/dispatch/shared-cube-matrix.asl index 7b5e03c24..344bbe3d2 100644 --- a/asl/block/model/dispatch/shared-cube-matrix.asl +++ b/asl/block/model/dispatch/shared-cube-matrix.asl @@ -1,5 +1,4 @@ // PTO-UNIT: {"id":"PTO-BLOCK-MODEL-DISPATCH-SHARED-CUBE-MATRIX","surface":"block","classification":["model","dispatch","shared-cube-matrix"],"depends_on":["PTO-BLOCK-MODEL-OPERANDS-SHARED-GENERATION","PTO-TILE-MODEL-LEGALITY-MATRIX-FUNCTIONS","PTO-TILE-MODEL-STATE-SHARED-REGISTERS"]} - readonly func BundleMatrixSharedSourceSchemaLegal( ordinal: integer {0..3}, valid_rows: integer {1..65535}, @@ -30,10 +29,11 @@ begin shared.tile.valid_rows == valid_rows && shared.tile.valid_columns == valid_columns && shared.tile.columns >= columns && + (!TileDataTypeIsFourBit(data_type) || + shared.tile.columns MOD 2 == 0) && shared.tile.data_type == data_type && shared.tile.layout == TileLayout_RowMajor; end; - // Matrix schema preflight derives Shared CELL views without reading payload. readonly func BundleSharedSubviewMatrixMetadataLegalForPE( binding: BundleSharedBindingIndex, pe_identity: MemoryAgentId, @@ -55,6 +55,9 @@ begin modifier.size_code as integer {1..12}); let element_bits = TileElementBits(parent.data_type); let bounded_columns = parent.columns as integer {1..65535}; + if TileDataTypeIsFourBit(data_type) && bounded_columns MOD 2 != 0 then + return FALSE; + end; let raw_offset = UInt(BundleSharedSubviewOffsetRawForPE( binding, pe_identity)); if raw_offset > 2047 then return FALSE; end; @@ -95,7 +98,6 @@ begin return clipped_rows == valid_rows && clipped_columns == valid_columns && selected_columns >= minimum_columns; end; - readonly func BundleMatrixSharedSourcesReady( shared_count: integer {0..4}) => boolean begin @@ -110,7 +112,6 @@ begin end; return TRUE; end; - readonly func BundleMatrixSharedPrimarySchemaLegal( ordinal: integer {0..3}, logical_rows: integer {1..65535}, @@ -124,7 +125,6 @@ begin ordinal, stored_rows, stored_columns, stored_columns, data_type); end; - readonly func BundleMatrixSharedBPrimarySchemaLegal( ordinal: integer {0..3}, logical_rows: integer {1..65535}, @@ -148,7 +148,6 @@ begin else return 0; end; end; - pure func BundleMatrixCooperativeValidM( group_m: integer {1..65535}, pe_identity: MemoryAgentId) => integer {0..32} @@ -161,7 +160,6 @@ begin if remaining < m_per_pe then return remaining as integer {1..31}; end; return m_per_pe as integer {16,32}; end; - pure func BundleMatrixCooperativeCurrentPEMask( group_m: integer {1..65535}, pe_identity: MemoryAgentId) => bits(4) @@ -172,7 +170,6 @@ begin end; return mask; end; - readonly func BundleMatrixSharedLeftPrimarySchemaLegal( ordinal: integer {0..3}, group_m: integer {1..65535}, @@ -184,7 +181,6 @@ begin return BundleMatrixSharedPrimarySchemaLegal( ordinal, group_m, k, data_type, transpose); end; - readonly func BundleMatrixSharedSchemasLegal( function: integer {0..31}, left_type: TileDataType, @@ -209,11 +205,15 @@ begin let right_group = TileMatrixRightGroupSourceCount( function, right_type); let left_shared = shared_count != right_group; + if !TileMatrixFunctionIsGEMV(function) && + ((left_shared && TileDataTypeIsFourBit(left_type)) || + TileDataTypeIsFourBit(right_type)) && k MOD 2 != 0 then + return FALSE; + end; if _BundleFixedPointAttributes.trans_a && !left_shared then return FALSE; end; var ordinal: integer {0..4} = 0; - if left_shared then if !BundleMatrixSharedLeftPrimarySchemaLegal( ordinal as integer {0..3}, @@ -232,7 +232,6 @@ begin ordinal = (ordinal + 1) as integer {0..4}; end; end; - if !BundleMatrixSharedBPrimarySchemaLegal( ordinal as integer {0..3}, k, n, right_type, @@ -251,6 +250,25 @@ begin end; return ordinal == shared_count; end; +readonly func BundleMatrixPrivateSharedViewLegal( + tile: TileInfo, + rows: integer {1..65535}, + columns: integer {1..65535}, + data_type: TileDataType, + allow_column_major_packed: boolean) => boolean +begin + return tile.allocated && tile.contents_defined && + SharedTileCapacityIsLegal(tile.capacity_bytes) && + (tile.layout == TileLayout_RowMajor || + (allow_column_major_packed && + tile.layout == TileLayout_ColumnMajor && + TileDataTypeIsFourBit(data_type))) && + tile.rows == rows && tile.columns == columns && + tile.valid_rows == rows && tile.valid_columns == columns && + tile.data_type == data_type && + rows * columns <= TileLogicalElementCapacity( + tile.capacity_bytes, data_type); +end; readonly func MaterializeBundleSharedMatrixLeftPrimary( ordinal: integer {0..3}, @@ -270,14 +288,14 @@ begin let shared_tile_id = BundleSharedBindingId(ordinal); let source = if _BundleSharedBindings[[ordinal]].source0_subview.valid then - MaterializeBundleSharedSubview(ordinal) + MaterializeBundleSharedSubviewForPE(ordinal, pe_identity) else SharedTileRecord(shared_tile_id).tile; var tile = source; tile.contents_defined = FALSE; tile.defined_elements = Zeros{PTO_MODEL_TILE_ELEMENTS}; tile.packed_defined_elements = zero_packed_tile_elements; tile.defined_valid_elements = 0; - tile.rows = DerivedTileRows(tile.capacity_bytes, k, data_type); + tile.rows = pe_m; tile.columns = k; tile.valid_rows = pe_m; tile.valid_columns = k; @@ -310,7 +328,6 @@ begin tile.defined_valid_elements = (pe_m * k) as integer {0..524288}; return tile; end; - readonly func MaterializeBundleSharedMatrixLeftScale( ordinal: integer {0..3}, group_m: integer {1..65535}, @@ -328,7 +345,7 @@ begin let shared_tile_id = BundleSharedBindingId(ordinal); let source = if _BundleSharedBindings[[ordinal]].source0_subview.valid then - MaterializeBundleSharedSubview(ordinal) + MaterializeBundleSharedSubviewForPE(ordinal, pe_identity) else SharedTileRecord(shared_tile_id).tile; assert BundleMatrixSharedPrimarySchemaLegal( ordinal, group_m, scale_groups, scale_type, FALSE); @@ -337,8 +354,7 @@ begin tile.defined_elements = Zeros{PTO_MODEL_TILE_ELEMENTS}; tile.packed_defined_elements = zero_packed_tile_elements; tile.defined_valid_elements = 0; - tile.rows = DerivedTileRows( - tile.capacity_bytes, scale_groups, scale_type); + tile.rows = pe_m; tile.columns = scale_groups; tile.valid_rows = pe_m; tile.valid_columns = scale_groups; @@ -371,7 +387,6 @@ begin (pe_m * scale_groups) as integer {0..524288}; return tile; end; - readonly func MaterializeBundleSharedMatrixSource( ordinal: integer {0..3}, valid_rows: integer {1..65535}, @@ -397,7 +412,6 @@ begin (valid_rows * valid_columns) as integer {0..524288}; return tile; end; - readonly func MaterializeBundleSharedMatrixPrimary( ordinal: integer {0..3}, logical_rows: integer {1..65535}, @@ -419,14 +433,15 @@ begin tile.defined_elements = Zeros{PTO_MODEL_TILE_ELEMENTS}; tile.packed_defined_elements = zero_packed_tile_elements; tile.defined_valid_elements = 0; - tile.rows = DerivedTileRows( - tile.capacity_bytes, logical_columns, data_type); + tile.rows = logical_rows; tile.columns = logical_columns; tile.valid_rows = logical_rows; tile.valid_columns = logical_columns; tile.data_type = data_type; tile.predicate_basis_type = data_type; - tile.layout = TileLayout_RowMajor; + // Four-bit right primaries use dense ColumnMajor private views; source pitches stay architectural. + tile.layout = if TileDataTypeIsFourBit(data_type) then + TileLayout_ColumnMajor else TileLayout_RowMajor; tile.cube_k_repeat = 0; tile.cube_n_repeat = 0; tile.cube_cell_count = 0; @@ -452,7 +467,6 @@ begin (logical_rows * logical_columns) as integer {0..524288}; return tile; end; - readonly func BundleMatrixCooperativeMLayout( function: integer {0..31}, right_type: TileDataType, diff --git a/asl/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL.asl b/asl/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL.asl index 2dc5af241..d6439404b 100644 --- a/asl/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL.asl +++ b/asl/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL.asl @@ -1,4 +1,4 @@ -// PTO-INSTRUCTION: {"assembly":["TMATMUL "],"block":["BSTART.TMATMUL AType","B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType)","B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one)","B.DIM LB0 M or cooperative group_M (optional, default 1)","B.DIM LB1 N (optional, default 1)","B.DIM LB2 K (optional, default 1)","B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111)","B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, B CUBE_N8 primary","B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations","B.IOT/B.IOR postprocess operands selected by B.FPATR","BSTOP or the next BSTART completion boundary"],"catalog_indices":[82],"catalog_records":[{"arguments":[{"operand":"destination0"},{"operand":"source0"},{"operand":"source1"}],"command_mnemonic":"BSTART.TMATMUL","contract_status":"reviewed-complete","datr_contract":{"allowed_nonzero_fields":["DataType","RMode","Sat","PadValueOrByteId"],"pad_union":"matrix-cctrl"},"disposition":"accepted-direct-operation","effect_contract":"TMATMUL","family":"CUBE","fault_contract":"ExecuteTileInstruction","function":0,"legality_handler":"TileOperandsLegal_TMATMUL","name":"TMATMUL","operands":[{"field":"destination0","role":"destination"},{"field":"source0","role":"left"},{"field":"source1","role":"right"}],"restart_contract":"CompleteBundleAtWithAcceptedApplicabilityRules","semantic_handler":"TMATMUL","state_effects":["operand:destination0:destination","operand:source0:left","operand:source1:right","runtime:CurrentBundleCCTRL:raw-partial-and-transparent-cache-hints"]}],"classification":["matrix-and-matrix-vector","matrix-matrix"],"contract":{"block_composition":["BSTART.TMATMUL AType","B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType)","B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one)","B.DIM LB0 M or cooperative group_M (optional, default 1)","B.DIM LB1 N (optional, default 1)","B.DIM LB2 K (optional, default 1)","B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111)","B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, B CUBE_N8 primary","B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations","B.IOT/B.IOR postprocess operands selected by B.FPATR","BSTOP or the next BSTART completion boundary"],"canonical_assembly":["TMATMUL "],"defaults":["Encoded DataType is always AType. Omitted B.DATR preserves AType as BType, selects RNE, and disables saturation.","Omitted LB0 defaults Local M or cooperative group_M to one; omitted LB1 and LB2 default N and K to one.","Exactly one all-zero B.FPATR selects no conversion, activation, or reduction; B.IOR and auxiliary B.IOT operands exist only when a selected postprocess mode requires them.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize.","TransA=0 and TransB=0 select no logical transpose. Each nonzero control is legal only when the corresponding primary is Shared.","Omitted CCTRL selects 00: final D output and no transparent-cache hint."],"encoding_class":"selector-encoded-block-operation","examples":["BSTART.TMATMUL AType; B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType); B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one); B.DIM LB0 M or cooperative group_M (optional, default 1); B.DIM LB1 N (optional, default 1); B.DIM LB2 K (optional, default 1); B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111); B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, B CUBE_N8 primary; B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations; B.IOT/B.IOR postprocess operands selected by B.FPATR; BSTOP or the next BSTART completion boundary"],"exceptions":["A reserved DataType or fixed-bit mismatch raises Fault_IllegalInstruction before block state changes.","Missing, duplicate, or non-Matrix B.FPATR use raises Fault_BundleControl before allocation or payload effects.","Illegal types, dimensions, masks, binding streams, descriptors, shapes, capacities, aliases, readiness, or postprocess values raise Fault_TileLegality before source snapshots and effects."],"field_contracts":{},"field_zero_meanings":{},"legality":["The carrier selects exactly CUBE Function 0 and TileOperation_TMATMUL.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize.","A Shared primary must satisfy hardware-maintained whole-parent readiness and publication before payload access; fixed-quarter allocation or initialization masks are not a prerequisite. Any cooperative Local-A/Shared-B or Shared-A/Shared-B TMATMUL interprets LB0 as Core-total group_M in 1..128; Shared A has exact physical valid shape [group_M,K] with physical index m*pitch+k (K-major) for TransA=0 or [K,group_M] with physical index k*pitch+m (M-major) for TransA=1; Shared B has exact physical valid shape [N,K] with physical index n*pitch+k (K-major, ordinary dense column-major/DN-equivalent) for TransB=0 or [K,N] with physical index k*pitch+n (N-major, ordinary dense row-major) for TransB=1; physical columns may be legally padded, and PE i uses valid_M=clamp(group_M-i*M_per_PE,0,M_per_PE) with M_per_PE 16 for group_M<=64 and 32 for group_M>=65. TransA and TransB apply only to their corresponding Shared primary. Right-only Shared inherits Local A layout; all-Shared ACC inherits C layout; all-Shared non-ACC selects M16 through M=16 and M32 through M=32.","AType and BType must be supported ordinary Matrix types from one numeric class. Published Shared operands may replace the right group or both matrix groups; supplementary operands and destinations remain Local.","Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects.","B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema.","For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D."],"memory_effects":["none"],"operands":[{"field":"destination0","role":"destination"},{"field":"source0","role":"left"},{"field":"source1","role":"right"}],"ordering":["Complete schema, field, type, dimension, descriptor, shape, capacity, readiness, alias, and allocation preflight precedes every source snapshot and destination effect.","D and every enabled reduction output publish as one atomic group; rejection publishes none and successful sources persist.","Transparent-cache hints occur only after complete preflight and cannot alter source snapshots, D allocation or publication, faults, or numeric status."],"standalone_opcode":false,"state_effects":["Multiply A[M x K] by B[K x N] into one private FP32, S32, or U32 CUBE destination.","After complete preflight, execute TMATMUL with the operand bindings listed above; destination definedness changes only as specified by that handler.","For Local execution, publish D with A's CUBE_M16 or CUBE_M32 layout and final output dtype; Bias uses Local CUBE_N8; RowMaxIn/Out and GroupMaxOut use the resolved M layout; vector quant/PReLU parameters use Local CUBE_N8/U64; MX scales keep their operation-owned layouts.","Successful Shared primary reads leave every Shared descriptor, mask, publication state, payload, and lifetime unchanged.","Always publish D; CCTRL[0]=1 publishes raw accumulator-type D and may hint cache replacement, while ACC CCTRL[1]=1 may hint cache use or prefetch of explicit C. Hint handling is not architecturally observable."]},"depends_on":["PTO-BLOCK-MODEL-SCHEMA-BUNDLE-ENCODING"],"engine":"CUBE","id":"PTO-TILE-TMATMUL","mnemonic":"TMATMUL","summary":"Multiply A[M x K] by B[K x N] into one private FP32, S32, or U32 CUBE destination.","surface":"tile"} +// PTO-INSTRUCTION: {"assembly":["TMATMUL "],"block":["BSTART.TMATMUL AType","B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType)","B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one)","B.DIM LB0 M or cooperative group_M (optional, default 1)","B.DIM LB1 N (optional, default 1)","B.DIM LB2 K (optional, default 1)","B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111)","B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, B CUBE_N8 primary","B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations","B.IOT/B.IOR postprocess operands selected by B.FPATR","BSTOP or the next BSTART completion boundary"],"catalog_indices":[82],"catalog_records":[{"arguments":[{"operand":"destination0"},{"operand":"source0"},{"operand":"source1"}],"command_mnemonic":"BSTART.TMATMUL","contract_status":"reviewed-complete","datr_contract":{"allowed_nonzero_fields":["DataType","RMode","Sat","PadValueOrByteId"],"pad_union":"matrix-cctrl"},"disposition":"accepted-direct-operation","effect_contract":"TMATMUL","family":"CUBE","fault_contract":"ExecuteTileInstruction","function":0,"legality_handler":"TileOperandsLegal_TMATMUL","name":"TMATMUL","operands":[{"field":"destination0","role":"destination"},{"field":"source0","role":"left"},{"field":"source1","role":"right"}],"restart_contract":"CompleteBundleAtWithAcceptedApplicabilityRules","semantic_handler":"TMATMUL","state_effects":["operand:destination0:destination","operand:source0:left","operand:source1:right","runtime:CurrentBundleCCTRL:raw-partial-and-transparent-cache-hints"]}],"classification":["matrix-and-matrix-vector","matrix-matrix"],"contract":{"block_composition":["BSTART.TMATMUL AType","B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType)","B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one)","B.DIM LB0 M or cooperative group_M (optional, default 1)","B.DIM LB1 N (optional, default 1)","B.DIM LB2 K (optional, default 1)","B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111)","B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, B CUBE_N8 primary","B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations","B.IOT/B.IOR postprocess operands selected by B.FPATR","BSTOP or the next BSTART completion boundary"],"canonical_assembly":["TMATMUL "],"defaults":["Encoded DataType is always AType. Omitted B.DATR preserves AType as BType, selects RNE, and disables saturation.","Omitted LB0 defaults Local M or cooperative group_M to one; omitted LB1 and LB2 default N and K to one.","Exactly one all-zero B.FPATR selects no conversion, activation, or reduction; B.IOR and auxiliary B.IOT operands exist only when a selected postprocess mode requires them.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize.","TransA=0 and TransB=0 select no logical transpose. Each nonzero control is legal only when the corresponding primary is Shared.","Omitted CCTRL selects 00: final D output and no transparent-cache hint."],"encoding_class":"selector-encoded-block-operation","examples":["BSTART.TMATMUL AType; B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType); B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one); B.DIM LB0 M or cooperative group_M (optional, default 1); B.DIM LB1 N (optional, default 1); B.DIM LB2 K (optional, default 1); B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111); B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, B CUBE_N8 primary; B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations; B.IOT/B.IOR postprocess operands selected by B.FPATR; BSTOP or the next BSTART completion boundary"],"exceptions":["A reserved DataType or fixed-bit mismatch raises Fault_IllegalInstruction before block state changes.","Missing, duplicate, or non-Matrix B.FPATR use raises Fault_BundleControl before allocation or payload effects.","Illegal types, dimensions, masks, binding streams, descriptors, shapes, capacities, aliases, readiness, or postprocess values raise Fault_TileLegality before source snapshots and effects."],"field_contracts":{},"field_zero_meanings":{},"legality":["The carrier selects exactly CUBE Function 0 and TileOperation_TMATMUL.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize.","A Shared primary must satisfy hardware-maintained whole-parent readiness and publication before payload access; fixed-quarter allocation or initialization masks are not a prerequisite. Any cooperative Local-A/Shared-B or Shared-A/Shared-B TMATMUL interprets LB0 as Core-total group_M in 1..128; Shared A has exact physical valid shape [group_M,K] with physical index m*pitch+k (K-major) for TransA=0 or [K,group_M] with physical index k*pitch+m (M-major) for TransA=1; Shared B has exact physical valid shape [N,K] with physical index n*pitch+k (K-major, ordinary dense column-major/DN-equivalent) for TransB=0 or [K,N] with physical index k*pitch+n (N-major, ordinary dense row-major) for TransB=1; physical columns may be legally padded, and PE i uses valid_M=clamp(group_M-i*M_per_PE,0,M_per_PE) with M_per_PE 16 for group_M<=64 and 32 for group_M>=65. TransA and TransB apply only to their corresponding Shared primary. Right-only Shared inherits Local A layout; all-Shared ACC inherits C layout; all-Shared non-ACC selects M16 through M=16 and M32 through M=32.","AType and BType must be supported ordinary Matrix types from one numeric class. Published Shared operands may replace the right group or both matrix groups; supplementary operands and destinations remain Local.","Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects.","B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema.","For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D.","Cooperative Shared Matrix forms accept group_M in 1..128 and N/K in 1..65535 without power-of-two restrictions. Validate Local CUBE roles with existing descriptor and capacity rules; validate Shared roles against the original legal Shared descriptor and physical pitch. Internal read views preserve original pitch and use typed logical element/carrier/lane reads without a transient Local descriptor or 64 KiB capacity limit.","If any supported four-bit Shared primary is present (E2M1X2, E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such original parent physical columns pitch are even under every transpose combination. Valid M/group_M and N gain no parity restriction. This does not affect Local-only TMATMUL, TGEMV, generic Shared allocation, or Local packed A when Shared B is not packed."],"memory_effects":["none"],"operands":[{"field":"destination0","role":"destination"},{"field":"source0","role":"left"},{"field":"source1","role":"right"}],"ordering":["Complete schema, field, type, dimension, descriptor, shape, capacity, readiness, alias, and allocation preflight precedes every source snapshot and destination effect.","D and every enabled reduction output publish as one atomic group; rejection publishes none and successful sources persist.","Transparent-cache hints occur only after complete preflight and cannot alter source snapshots, D allocation or publication, faults, or numeric status."],"standalone_opcode":false,"state_effects":["Multiply A[M x K] by B[K x N] into one private FP32, S32, or U32 CUBE destination.","After complete preflight, execute TMATMUL with the operand bindings listed above; destination definedness changes only as specified by that handler.","For Local execution, publish D with A's CUBE_M16 or CUBE_M32 layout and final output dtype; Bias uses Local CUBE_N8; RowMaxIn/Out and GroupMaxOut use the resolved M layout; vector quant/PReLU parameters use Local CUBE_N8/U64; MX scales keep their operation-owned layouts.","Successful Shared primary reads leave every Shared descriptor, mask, publication state, payload, and lifetime unchanged.","Always publish D; CCTRL[0]=1 publishes raw accumulator-type D and may hint cache replacement, while ACC CCTRL[1]=1 may hint cache use or prefetch of explicit C. Hint handling is not architecturally observable."]},"depends_on":["PTO-BLOCK-MODEL-SCHEMA-BUNDLE-ENCODING"],"engine":"CUBE","id":"PTO-TILE-TMATMUL","mnemonic":"TMATMUL","summary":"Multiply A[M x K] by B[K x N] into one private FP32, S32, or U32 CUBE destination.","surface":"tile"} // PTO-REVIEW: {"review_method":"formal-definition-read","outcome":"FORMAL-COMPLETE","reviewed_fields":["assembly","encoding","defaults","operation","state","memory","ordering","faults","reserved"]} // NDF-BEGIN: PTO-TMATMUL-CONTRACT-001 // ndf: kind=contract level=L1 layer=tile status=accepted @@ -12,6 +12,18 @@ // [K,group_M] for TransA=1; Shared B MUST have exact physical valid shape // [N,K] for TransB=0 or [K,N] for TransB=1; physical columns MAY be padded // only within legal descriptor capacity. +// Cooperative Shared forms MUST use group_M in 1..128 and N/K in 1..65535; +// cooperative N/K MUST not have power-of-two restrictions. Validate Local +// CUBE roles with existing descriptor/capacity rules and Shared roles against +// the original legal Shared descriptors. Internal read views MUST preserve +// original pitch and typed logical element/carrier/lane mapping without a +// transient Local descriptor or 64 KiB capacity limit. +// If a supported packed-four-bit Shared primary is present (E2M1X2, +// E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such +// original parent physical `columns` pitch MUST be even under every +// transpose combination. Valid M/group_M and N have no added parity rule. +// This restriction MUST not affect Local-only TMATMUL, TGEMV, generic Shared +// allocation, or Local packed A when Shared B is not packed. // AType and BType must be supported ordinary Matrix types from one numeric // class. Published Shared operands may replace the right group or both matrix // groups; supplementary operands and destinations remain Local. diff --git a/asl/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_ACC.asl b/asl/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_ACC.asl index db4c293b9..5676a1e3b 100644 --- a/asl/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_ACC.asl +++ b/asl/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_ACC.asl @@ -1,4 +1,4 @@ -// PTO-INSTRUCTION: {"assembly":["TMATMUL_ACC "],"block":["BSTART.TMATMUL.ACC AType","B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType)","B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one)","B.DIM LB0 M or cooperative group_M (optional, default 1)","B.DIM LB1 N (optional, default 1)","B.DIM LB2 K (optional, default 1)","B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111)","B.IOT ordered Local mathematical sources: C CUBE_M16/M32 accumulator matching A with encoded selector distinct from DstTile, A CUBE_M16/M32 primary, B CUBE_N8 primary, optional U8 CScale CUBE_M32 [M,1]","B.IOT D matching A's CUBE_M16/M32 layout with a distinct encoded destination index, optional RowMaxOut, optional GroupMaxOut destinations","B.IOT/B.IOR postprocess operands selected by B.FPATR","BSTOP or the next BSTART completion boundary"],"catalog_indices":[84],"catalog_records":[{"arguments":[{"operand":"destination0"},{"operand":"source0"},{"operand":"source1"},{"operand":"source2"}],"command_mnemonic":"BSTART.TMATMUL.ACC","contract_status":"reviewed-complete","datr_contract":{"allowed_nonzero_fields":["DataType","RMode","Sat","PadValueOrByteId"],"pad_union":"matrix-cctrl"},"disposition":"accepted-direct-operation","effect_contract":"TMATMUL_ACC","family":"CUBE","fault_contract":"ExecuteTileInstruction","function":2,"legality_handler":"TileOperandsLegal_TMATMUL_ACC","name":"TMATMUL_ACC","operands":[{"field":"destination0","role":"destination"},{"field":"source0","role":"accumulator"},{"field":"source1","role":"left"},{"field":"source2","role":"right"}],"restart_contract":"CompleteBundleAtWithAcceptedApplicabilityRules","semantic_handler":"TMATMUL_ACC","state_effects":["operand:destination0:destination","operand:source0:accumulator","operand:source1:left","operand:source2:right","runtime:CurrentBundleCCTRL:raw-partial-and-transparent-cache-hints"]}],"classification":["matrix-and-matrix-vector","matrix-matrix"],"contract":{"block_composition":["BSTART.TMATMUL.ACC AType","B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType)","B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one)","B.DIM LB0 M or cooperative group_M (optional, default 1)","B.DIM LB1 N (optional, default 1)","B.DIM LB2 K (optional, default 1)","B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111)","B.IOT ordered Local mathematical sources: C CUBE_M16/M32 accumulator matching A with encoded selector distinct from DstTile, A CUBE_M16/M32 primary, B CUBE_N8 primary, optional U8 CScale CUBE_M32 [M,1]","B.IOT D matching A's CUBE_M16/M32 layout with a distinct encoded destination index, optional RowMaxOut, optional GroupMaxOut destinations","B.IOT/B.IOR postprocess operands selected by B.FPATR","BSTOP or the next BSTART completion boundary"],"canonical_assembly":["TMATMUL_ACC "],"defaults":["Encoded DataType is always AType. Omitted B.DATR preserves AType as BType, selects RNE, and disables saturation.","Omitted LB0 defaults Local M or cooperative group_M to one; omitted LB1 and LB2 default N and K to one.","Exactly one all-zero B.FPATR selects no conversion, activation, or reduction; B.IOR and auxiliary B.IOT operands exist only when a selected postprocess mode requires them.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout; Local C also uses A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize.","TransA=0 and TransB=0 select no logical transpose. Each nonzero control is legal only when the corresponding primary is Shared.","C and D are both mandatory. CScaleEn accepts one final U8 CUBE_M32 [M,1] Local mathematical source only with FP32 C; omission defaults CScaleEn to zero. In decoded blocks C's six-bit relative selector must differ from zero-extended DstTile before rename; direct Tile calls require destination TileIndex to differ from accumulator TileIndex.","Omitted CCTRL selects 00: final D output and no transparent-cache hint."],"encoding_class":"selector-encoded-block-operation","examples":["BSTART.TMATMUL.ACC AType; B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType); B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one); B.DIM LB0 M or cooperative group_M (optional, default 1); B.DIM LB1 N (optional, default 1); B.DIM LB2 K (optional, default 1); B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111); B.IOT ordered Local mathematical sources: C CUBE_M16/M32 accumulator matching A with encoded selector distinct from DstTile, A CUBE_M16/M32 primary, B CUBE_N8 primary; B.IOT D matching A's CUBE_M16/M32 layout with a distinct encoded destination index, optional RowMaxOut, optional GroupMaxOut destinations; B.IOT/B.IOR postprocess operands selected by B.FPATR; BSTOP or the next BSTART completion boundary"],"exceptions":["A reserved DataType or fixed-bit mismatch raises Fault_IllegalInstruction before block state changes.","Missing, duplicate, or non-Matrix B.FPATR use raises Fault_BundleControl before allocation or payload effects.","Illegal types, dimensions, masks, binding streams, descriptors, shapes, capacities, aliases, readiness, or postprocess values raise Fault_TileLegality before source snapshots and effects."],"field_contracts":{},"field_zero_meanings":{},"legality":["The carrier selects exactly CUBE Function 2 and TileOperation_TMATMUL_ACC.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout; Local C also uses A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize.","C and D are both mandatory. CScaleEn accepts one final U8 CUBE_M32 [M,1] Local mathematical source only with FP32 C; omission defaults CScaleEn to zero. In decoded blocks C's six-bit relative selector must differ from zero-extended DstTile before rename; direct Tile calls require destination TileIndex to differ from accumulator TileIndex.","A Shared primary must satisfy hardware-maintained whole-parent readiness and publication before payload access; fixed-quarter allocation or initialization masks are not a prerequisite. Any cooperative Local-A/Shared-B or Shared-A/Shared-B TMATMUL interprets LB0 as Core-total group_M in 1..128; Shared A has exact physical valid shape [group_M,K] with physical index m*pitch+k (K-major) for TransA=0 or [K,group_M] with physical index k*pitch+m (M-major) for TransA=1; Shared B has exact physical valid shape [N,K] with physical index n*pitch+k (K-major, ordinary dense column-major/DN-equivalent) for TransB=0 or [K,N] with physical index k*pitch+n (N-major, ordinary dense row-major) for TransB=1; physical columns may be legally padded, and PE i uses valid_M=clamp(group_M-i*M_per_PE,0,M_per_PE) with M_per_PE 16 for group_M<=64 and 32 for group_M>=65. TransA and TransB apply only to their corresponding Shared primary. Right-only Shared inherits Local A layout; all-Shared ACC inherits C layout; all-Shared non-ACC selects M16 through M=16 and M32 through M=32.","AType and BType must be supported ordinary Matrix types from one numeric class. C is one explicit Local MxN accumulator source and D is a distinct newly published destination; C's encoded relative selector and D's zero-extended DstTile hand must differ before rename. Published Shared operands may replace the right group or both matrix groups; supplementary operands and destinations remain Local.","Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects.","B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema.","For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D."],"memory_effects":["none"],"operands":[{"field":"destination0","role":"destination"},{"field":"source0","role":"accumulator"},{"field":"source1","role":"left"},{"field":"source2","role":"right"}],"ordering":["Complete schema, field, type, dimension, descriptor, shape, capacity, readiness, alias, and allocation preflight precedes every source snapshot and destination effect.","D and every enabled reduction output publish as one atomic group; rejection publishes none and successful sources persist.","Transparent-cache hints occur only after complete preflight and cannot alter source snapshots, D allocation or publication, faults, or numeric status."],"standalone_opcode":false,"state_effects":["Multiply matrices and accumulate into the supplied accumulator Tile.","After complete preflight, execute TMATMUL_ACC with the operand bindings listed above; destination definedness changes only as specified by that handler.","For Local execution, publish D with A's CUBE_M16 or CUBE_M32 layout and final output dtype; Bias uses Local CUBE_N8; RowMaxIn/Out and GroupMaxOut use the resolved M layout; vector quant/PReLU parameters use Local CUBE_N8/U64; MX scales keep their operation-owned layouts.","Successful Shared primary reads leave every Shared descriptor, mask, publication state, payload, and lifetime unchanged.","C is snapshotted before multiplication and remains descriptor-and-payload unchanged after success or rejection.","Always publish D; CCTRL[0]=1 publishes raw accumulator-type D and may hint cache replacement, while ACC CCTRL[1]=1 may hint cache use or prefetch of explicit C. Hint handling is not architecturally observable."]},"depends_on":["PTO-BLOCK-MODEL-SCHEMA-BUNDLE-ENCODING"],"engine":"CUBE","id":"PTO-TILE-TMATMUL-ACC","mnemonic":"TMATMUL_ACC","summary":"Multiply matrices and accumulate into the supplied accumulator Tile.","surface":"tile"} +// PTO-INSTRUCTION: {"assembly":["TMATMUL_ACC "],"block":["BSTART.TMATMUL.ACC AType","B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType)","B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one)","B.DIM LB0 M or cooperative group_M (optional, default 1)","B.DIM LB1 N (optional, default 1)","B.DIM LB2 K (optional, default 1)","B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111)","B.IOT ordered Local mathematical sources: C CUBE_M16/M32 accumulator matching A with encoded selector distinct from DstTile, A CUBE_M16/M32 primary, B CUBE_N8 primary, optional U8 CScale CUBE_M32 [M,1]","B.IOT D matching A's CUBE_M16/M32 layout with a distinct encoded destination index, optional RowMaxOut, optional GroupMaxOut destinations","B.IOT/B.IOR postprocess operands selected by B.FPATR","BSTOP or the next BSTART completion boundary"],"catalog_indices":[84],"catalog_records":[{"arguments":[{"operand":"destination0"},{"operand":"source0"},{"operand":"source1"},{"operand":"source2"}],"command_mnemonic":"BSTART.TMATMUL.ACC","contract_status":"reviewed-complete","datr_contract":{"allowed_nonzero_fields":["DataType","RMode","Sat","PadValueOrByteId"],"pad_union":"matrix-cctrl"},"disposition":"accepted-direct-operation","effect_contract":"TMATMUL_ACC","family":"CUBE","fault_contract":"ExecuteTileInstruction","function":2,"legality_handler":"TileOperandsLegal_TMATMUL_ACC","name":"TMATMUL_ACC","operands":[{"field":"destination0","role":"destination"},{"field":"source0","role":"accumulator"},{"field":"source1","role":"left"},{"field":"source2","role":"right"}],"restart_contract":"CompleteBundleAtWithAcceptedApplicabilityRules","semantic_handler":"TMATMUL_ACC","state_effects":["operand:destination0:destination","operand:source0:accumulator","operand:source1:left","operand:source2:right","runtime:CurrentBundleCCTRL:raw-partial-and-transparent-cache-hints"]}],"classification":["matrix-and-matrix-vector","matrix-matrix"],"contract":{"block_composition":["BSTART.TMATMUL.ACC AType","B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType)","B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one)","B.DIM LB0 M or cooperative group_M (optional, default 1)","B.DIM LB1 N (optional, default 1)","B.DIM LB2 K (optional, default 1)","B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111)","B.IOT ordered Local mathematical sources: C CUBE_M16/M32 accumulator matching A with encoded selector distinct from DstTile, A CUBE_M16/M32 primary, B CUBE_N8 primary, optional U8 CScale CUBE_M32 [M,1]","B.IOT D matching A's CUBE_M16/M32 layout with a distinct encoded destination index, optional RowMaxOut, optional GroupMaxOut destinations","B.IOT/B.IOR postprocess operands selected by B.FPATR","BSTOP or the next BSTART completion boundary"],"canonical_assembly":["TMATMUL_ACC "],"defaults":["Encoded DataType is always AType. Omitted B.DATR preserves AType as BType, selects RNE, and disables saturation.","Omitted LB0 defaults Local M or cooperative group_M to one; omitted LB1 and LB2 default N and K to one.","Exactly one all-zero B.FPATR selects no conversion, activation, or reduction; B.IOR and auxiliary B.IOT operands exist only when a selected postprocess mode requires them.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout; Local C also uses A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize.","TransA=0 and TransB=0 select no logical transpose. Each nonzero control is legal only when the corresponding primary is Shared.","C and D are both mandatory. CScaleEn accepts one final U8 CUBE_M32 [M,1] Local mathematical source only with FP32 C; omission defaults CScaleEn to zero. In decoded blocks C's six-bit relative selector must differ from zero-extended DstTile before rename; direct Tile calls require destination TileIndex to differ from accumulator TileIndex.","Omitted CCTRL selects 00: final D output and no transparent-cache hint."],"encoding_class":"selector-encoded-block-operation","examples":["BSTART.TMATMUL.ACC AType; B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType); B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one); B.DIM LB0 M or cooperative group_M (optional, default 1); B.DIM LB1 N (optional, default 1); B.DIM LB2 K (optional, default 1); B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111); B.IOT ordered Local mathematical sources: C CUBE_M16/M32 accumulator matching A with encoded selector distinct from DstTile, A CUBE_M16/M32 primary, B CUBE_N8 primary; B.IOT D matching A's CUBE_M16/M32 layout with a distinct encoded destination index, optional RowMaxOut, optional GroupMaxOut destinations; B.IOT/B.IOR postprocess operands selected by B.FPATR; BSTOP or the next BSTART completion boundary"],"exceptions":["A reserved DataType or fixed-bit mismatch raises Fault_IllegalInstruction before block state changes.","Missing, duplicate, or non-Matrix B.FPATR use raises Fault_BundleControl before allocation or payload effects.","Illegal types, dimensions, masks, binding streams, descriptors, shapes, capacities, aliases, readiness, or postprocess values raise Fault_TileLegality before source snapshots and effects."],"field_contracts":{},"field_zero_meanings":{},"legality":["The carrier selects exactly CUBE Function 2 and TileOperation_TMATMUL_ACC.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout; Local C also uses A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize.","C and D are both mandatory. CScaleEn accepts one final U8 CUBE_M32 [M,1] Local mathematical source only with FP32 C; omission defaults CScaleEn to zero. In decoded blocks C's six-bit relative selector must differ from zero-extended DstTile before rename; direct Tile calls require destination TileIndex to differ from accumulator TileIndex.","A Shared primary must satisfy hardware-maintained whole-parent readiness and publication before payload access; fixed-quarter allocation or initialization masks are not a prerequisite. Any cooperative Local-A/Shared-B or Shared-A/Shared-B TMATMUL interprets LB0 as Core-total group_M in 1..128; Shared A has exact physical valid shape [group_M,K] with physical index m*pitch+k (K-major) for TransA=0 or [K,group_M] with physical index k*pitch+m (M-major) for TransA=1; Shared B has exact physical valid shape [N,K] with physical index n*pitch+k (K-major, ordinary dense column-major/DN-equivalent) for TransB=0 or [K,N] with physical index k*pitch+n (N-major, ordinary dense row-major) for TransB=1; physical columns may be legally padded, and PE i uses valid_M=clamp(group_M-i*M_per_PE,0,M_per_PE) with M_per_PE 16 for group_M<=64 and 32 for group_M>=65. TransA and TransB apply only to their corresponding Shared primary. Right-only Shared inherits Local A layout; all-Shared ACC inherits C layout; all-Shared non-ACC selects M16 through M=16 and M32 through M=32.","AType and BType must be supported ordinary Matrix types from one numeric class. C is one explicit Local MxN accumulator source and D is a distinct newly published destination; C's encoded relative selector and D's zero-extended DstTile hand must differ before rename. Published Shared operands may replace the right group or both matrix groups; supplementary operands and destinations remain Local.","Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects.","B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema.","For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D.","Cooperative Shared Matrix forms accept group_M in 1..128 and N/K in 1..65535 without power-of-two restrictions. Validate Local CUBE roles with existing descriptor and capacity rules; validate Shared roles against the original legal Shared descriptor and physical pitch. Internal read views preserve original pitch and use typed logical element/carrier/lane reads without a transient Local descriptor or 64 KiB capacity limit.","If any supported four-bit Shared primary is present (E2M1X2, E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such original parent physical columns pitch are even under every transpose combination. Valid M/group_M and N gain no parity restriction. This does not affect Local-only TMATMUL, TGEMV, generic Shared allocation, or Local packed A when Shared B is not packed."],"memory_effects":["none"],"operands":[{"field":"destination0","role":"destination"},{"field":"source0","role":"accumulator"},{"field":"source1","role":"left"},{"field":"source2","role":"right"}],"ordering":["Complete schema, field, type, dimension, descriptor, shape, capacity, readiness, alias, and allocation preflight precedes every source snapshot and destination effect.","D and every enabled reduction output publish as one atomic group; rejection publishes none and successful sources persist.","Transparent-cache hints occur only after complete preflight and cannot alter source snapshots, D allocation or publication, faults, or numeric status."],"standalone_opcode":false,"state_effects":["Multiply matrices and accumulate into the supplied accumulator Tile.","After complete preflight, execute TMATMUL_ACC with the operand bindings listed above; destination definedness changes only as specified by that handler.","For Local execution, publish D with A's CUBE_M16 or CUBE_M32 layout and final output dtype; Bias uses Local CUBE_N8; RowMaxIn/Out and GroupMaxOut use the resolved M layout; vector quant/PReLU parameters use Local CUBE_N8/U64; MX scales keep their operation-owned layouts.","Successful Shared primary reads leave every Shared descriptor, mask, publication state, payload, and lifetime unchanged.","C is snapshotted before multiplication and remains descriptor-and-payload unchanged after success or rejection.","Always publish D; CCTRL[0]=1 publishes raw accumulator-type D and may hint cache replacement, while ACC CCTRL[1]=1 may hint cache use or prefetch of explicit C. Hint handling is not architecturally observable."]},"depends_on":["PTO-BLOCK-MODEL-SCHEMA-BUNDLE-ENCODING"],"engine":"CUBE","id":"PTO-TILE-TMATMUL-ACC","mnemonic":"TMATMUL_ACC","summary":"Multiply matrices and accumulate into the supplied accumulator Tile.","surface":"tile"} // PTO-REVIEW: {"review_method":"formal-definition-read","outcome":"FORMAL-COMPLETE","reviewed_fields":["assembly","encoding","defaults","operation","state","memory","ordering","faults","reserved"]} // NDF-BEGIN: PTO-TMATMUL-ACC-CONTRACT-001 // ndf: kind=contract level=L1 layer=tile status=accepted @@ -12,6 +12,18 @@ // [K,group_M] for TransA=1; Shared B MUST have exact physical valid shape // [N,K] for TransB=0 or [K,N] for TransB=1; physical columns MAY be padded // only within legal descriptor capacity. +// Cooperative Shared forms MUST use group_M in 1..128 and N/K in 1..65535; +// cooperative N/K MUST not have power-of-two restrictions. Validate Local +// CUBE roles with existing descriptor/capacity rules and Shared roles against +// the original legal Shared descriptors. Internal read views MUST preserve +// original pitch and typed logical element/carrier/lane mapping without a +// transient Local descriptor or 64 KiB capacity limit. +// If a supported packed-four-bit Shared primary is present (E2M1X2, +// E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such +// original parent physical `columns` pitch MUST be even under every +// transpose combination. Valid M/group_M and N have no added parity rule. +// This restriction MUST not affect Local-only TMATMUL, TGEMV, generic Shared +// allocation, or Local packed A when Shared B is not packed. // AType and BType must be supported ordinary Matrix types from one numeric // class. C is one explicit Local MxN accumulator source and D is a newly // published destination; C and D may use one architectural Tile name. diff --git a/asl/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_BIAS.asl b/asl/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_BIAS.asl index 526945c66..1f7c77186 100644 --- a/asl/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_BIAS.asl +++ b/asl/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_BIAS.asl @@ -1,4 +1,4 @@ -// PTO-INSTRUCTION: {"assembly":["TMATMUL_BIAS "],"block":["BSTART.TMATMUL.BIAS AType","B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType)","B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one)","B.DIM LB0 M or cooperative group_M (optional, default 1)","B.DIM LB1 N (optional, default 1)","B.DIM LB2 K (optional, default 1)","B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111)","B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, B CUBE_N8 primary, CUBE_N8 1xN Bias","B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations","B.IOT/B.IOR postprocess operands selected by B.FPATR","BSTOP or the next BSTART completion boundary"],"catalog_indices":[83],"catalog_records":[{"arguments":[{"operand":"destination0"},{"operand":"source0"},{"operand":"source1"},{"operand":"source2"}],"command_mnemonic":"BSTART.TMATMUL.BIAS","contract_status":"reviewed-complete","datr_contract":{"allowed_nonzero_fields":["DataType","RMode","Sat","PadValueOrByteId"],"pad_union":"matrix-cctrl"},"disposition":"accepted-direct-operation","effect_contract":"TMATMUL_BIAS","family":"CUBE","fault_contract":"ExecuteTileInstruction","function":1,"legality_handler":"TileOperandsLegal_TMATMUL_BIAS","name":"TMATMUL_BIAS","operands":[{"field":"destination0","role":"destination"},{"field":"source0","role":"left"},{"field":"source1","role":"right"},{"field":"source2","role":"bias"}],"restart_contract":"CompleteBundleAtWithAcceptedApplicabilityRules","semantic_handler":"TMATMUL_BIAS","state_effects":["operand:destination0:destination","operand:source0:left","operand:source1:right","operand:source2:bias","runtime:CurrentBundleCCTRL:raw-partial-and-transparent-cache-hints"]}],"classification":["matrix-and-matrix-vector","matrix-matrix"],"contract":{"block_composition":["BSTART.TMATMUL.BIAS AType","B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType)","B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one)","B.DIM LB0 M or cooperative group_M (optional, default 1)","B.DIM LB1 N (optional, default 1)","B.DIM LB2 K (optional, default 1)","B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111)","B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, B CUBE_N8 primary, CUBE_N8 1xN Bias","B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations","B.IOT/B.IOR postprocess operands selected by B.FPATR","BSTOP or the next BSTART completion boundary"],"canonical_assembly":["TMATMUL_BIAS "],"defaults":["Encoded DataType is always AType. Omitted B.DATR preserves AType as BType, selects RNE, and disables saturation.","Omitted LB0 defaults Local M or cooperative group_M to one; omitted LB1 and LB2 default N and K to one.","Exactly one all-zero B.FPATR selects no conversion, activation, or reduction; B.IOR and auxiliary B.IOT operands exist only when a selected postprocess mode requires them.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize. Bias uses Local CUBE_N8; it is a logical 1xN accumulator-type source (FP32 for MX) broadcast by logical output column.","TransA=0 and TransB=0 select no logical transpose. Each nonzero control is legal only when the corresponding primary is Shared.","Omitted CCTRL selects 00: final D output and no transparent-cache hint."],"encoding_class":"selector-encoded-block-operation","examples":["BSTART.TMATMUL.BIAS AType; B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType); B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one); B.DIM LB0 M or cooperative group_M (optional, default 1); B.DIM LB1 N (optional, default 1); B.DIM LB2 K (optional, default 1); B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111); B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, B CUBE_N8 primary, CUBE_N8 1xN Bias; B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations; B.IOT/B.IOR postprocess operands selected by B.FPATR; BSTOP or the next BSTART completion boundary"],"exceptions":["A reserved DataType or fixed-bit mismatch raises Fault_IllegalInstruction before block state changes.","Missing, duplicate, or non-Matrix B.FPATR use raises Fault_BundleControl before allocation or payload effects.","Illegal types, dimensions, masks, binding streams, descriptors, shapes, capacities, aliases, readiness, or postprocess values raise Fault_TileLegality before source snapshots and effects."],"field_contracts":{},"field_zero_meanings":{},"legality":["The carrier selects exactly CUBE Function 1 and TileOperation_TMATMUL_BIAS.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize. Bias uses Local CUBE_N8; it is a logical 1xN accumulator-type source (FP32 for MX) broadcast by logical output column.","A Shared primary must satisfy hardware-maintained whole-parent readiness and publication before payload access; fixed-quarter allocation or initialization masks are not a prerequisite. Any cooperative Local-A/Shared-B or Shared-A/Shared-B TMATMUL interprets LB0 as Core-total group_M in 1..128; Shared A has exact physical valid shape [group_M,K] with physical index m*pitch+k (K-major) for TransA=0 or [K,group_M] with physical index k*pitch+m (M-major) for TransA=1; Shared B has exact physical valid shape [N,K] with physical index n*pitch+k (K-major, ordinary dense column-major/DN-equivalent) for TransB=0 or [K,N] with physical index k*pitch+n (N-major, ordinary dense row-major) for TransB=1; physical columns may be legally padded, and PE i uses valid_M=clamp(group_M-i*M_per_PE,0,M_per_PE) with M_per_PE 16 for group_M<=64 and 32 for group_M>=65. TransA and TransB apply only to their corresponding Shared primary. Right-only Shared inherits Local A layout; all-Shared ACC inherits C layout; all-Shared non-ACC selects M16 through M=16 and M32 through M=32.","AType and BType must be supported ordinary Matrix types from one numeric class. Bias uses one Local CUBE_N8 logical 1xN accumulator-type source (FP32 for MX), broadcast by logical output column. Published Shared operands may replace the right group or both matrix groups; supplementary operands and destinations remain Local.","Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects.","B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema.","For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D."],"memory_effects":["none"],"operands":[{"field":"destination0","role":"destination"},{"field":"source0","role":"left"},{"field":"source1","role":"right"},{"field":"source2","role":"bias"}],"ordering":["Complete schema, field, type, dimension, descriptor, shape, capacity, readiness, alias, and allocation preflight precedes every source snapshot and destination effect.","D and every enabled reduction output publish as one atomic group; rejection publishes none and successful sources persist.","Transparent-cache hints occur only after complete preflight and cannot alter source snapshots, D allocation or publication, faults, or numeric status."],"standalone_opcode":false,"state_effects":["Compute A[M x K] times B[K x N], then add one Local CUBE_N8 1xN private-result Bias into a new Local destination.","After complete preflight, execute TMATMUL_BIAS with the operand bindings listed above; destination definedness changes only as specified by that handler.","For Local execution, publish D with A's CUBE_M16 or CUBE_M32 layout and final output dtype; Bias uses Local CUBE_N8; RowMaxIn/Out and GroupMaxOut use the resolved M layout; vector quant/PReLU parameters use Local CUBE_N8/U64; MX scales keep their operation-owned layouts.","Successful Shared primary reads leave every Shared descriptor, mask, publication state, payload, and lifetime unchanged.","Always publish D; CCTRL[0]=1 publishes raw accumulator-type D and may hint cache replacement, while ACC CCTRL[1]=1 may hint cache use or prefetch of explicit C. Hint handling is not architecturally observable."]},"depends_on":["PTO-BLOCK-MODEL-SCHEMA-BUNDLE-ENCODING"],"engine":"CUBE","id":"PTO-TILE-TMATMUL-BIAS","mnemonic":"TMATMUL_BIAS","summary":"Compute A[M x K] times B[K x N], then add one Local CUBE_N8 1xN private-result Bias into a new Local destination.","surface":"tile"} +// PTO-INSTRUCTION: {"assembly":["TMATMUL_BIAS "],"block":["BSTART.TMATMUL.BIAS AType","B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType)","B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one)","B.DIM LB0 M or cooperative group_M (optional, default 1)","B.DIM LB1 N (optional, default 1)","B.DIM LB2 K (optional, default 1)","B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111)","B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, B CUBE_N8 primary, CUBE_N8 1xN Bias","B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations","B.IOT/B.IOR postprocess operands selected by B.FPATR","BSTOP or the next BSTART completion boundary"],"catalog_indices":[83],"catalog_records":[{"arguments":[{"operand":"destination0"},{"operand":"source0"},{"operand":"source1"},{"operand":"source2"}],"command_mnemonic":"BSTART.TMATMUL.BIAS","contract_status":"reviewed-complete","datr_contract":{"allowed_nonzero_fields":["DataType","RMode","Sat","PadValueOrByteId"],"pad_union":"matrix-cctrl"},"disposition":"accepted-direct-operation","effect_contract":"TMATMUL_BIAS","family":"CUBE","fault_contract":"ExecuteTileInstruction","function":1,"legality_handler":"TileOperandsLegal_TMATMUL_BIAS","name":"TMATMUL_BIAS","operands":[{"field":"destination0","role":"destination"},{"field":"source0","role":"left"},{"field":"source1","role":"right"},{"field":"source2","role":"bias"}],"restart_contract":"CompleteBundleAtWithAcceptedApplicabilityRules","semantic_handler":"TMATMUL_BIAS","state_effects":["operand:destination0:destination","operand:source0:left","operand:source1:right","operand:source2:bias","runtime:CurrentBundleCCTRL:raw-partial-and-transparent-cache-hints"]}],"classification":["matrix-and-matrix-vector","matrix-matrix"],"contract":{"block_composition":["BSTART.TMATMUL.BIAS AType","B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType)","B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one)","B.DIM LB0 M or cooperative group_M (optional, default 1)","B.DIM LB1 N (optional, default 1)","B.DIM LB2 K (optional, default 1)","B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111)","B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, B CUBE_N8 primary, CUBE_N8 1xN Bias","B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations","B.IOT/B.IOR postprocess operands selected by B.FPATR","BSTOP or the next BSTART completion boundary"],"canonical_assembly":["TMATMUL_BIAS "],"defaults":["Encoded DataType is always AType. Omitted B.DATR preserves AType as BType, selects RNE, and disables saturation.","Omitted LB0 defaults Local M or cooperative group_M to one; omitted LB1 and LB2 default N and K to one.","Exactly one all-zero B.FPATR selects no conversion, activation, or reduction; B.IOR and auxiliary B.IOT operands exist only when a selected postprocess mode requires them.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize. Bias uses Local CUBE_N8; it is a logical 1xN accumulator-type source (FP32 for MX) broadcast by logical output column.","TransA=0 and TransB=0 select no logical transpose. Each nonzero control is legal only when the corresponding primary is Shared.","Omitted CCTRL selects 00: final D output and no transparent-cache hint."],"encoding_class":"selector-encoded-block-operation","examples":["BSTART.TMATMUL.BIAS AType; B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType); B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one); B.DIM LB0 M or cooperative group_M (optional, default 1); B.DIM LB1 N (optional, default 1); B.DIM LB2 K (optional, default 1); B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111); B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, B CUBE_N8 primary, CUBE_N8 1xN Bias; B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations; B.IOT/B.IOR postprocess operands selected by B.FPATR; BSTOP or the next BSTART completion boundary"],"exceptions":["A reserved DataType or fixed-bit mismatch raises Fault_IllegalInstruction before block state changes.","Missing, duplicate, or non-Matrix B.FPATR use raises Fault_BundleControl before allocation or payload effects.","Illegal types, dimensions, masks, binding streams, descriptors, shapes, capacities, aliases, readiness, or postprocess values raise Fault_TileLegality before source snapshots and effects."],"field_contracts":{},"field_zero_meanings":{},"legality":["The carrier selects exactly CUBE Function 1 and TileOperation_TMATMUL_BIAS.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize. Bias uses Local CUBE_N8; it is a logical 1xN accumulator-type source (FP32 for MX) broadcast by logical output column.","A Shared primary must satisfy hardware-maintained whole-parent readiness and publication before payload access; fixed-quarter allocation or initialization masks are not a prerequisite. Any cooperative Local-A/Shared-B or Shared-A/Shared-B TMATMUL interprets LB0 as Core-total group_M in 1..128; Shared A has exact physical valid shape [group_M,K] with physical index m*pitch+k (K-major) for TransA=0 or [K,group_M] with physical index k*pitch+m (M-major) for TransA=1; Shared B has exact physical valid shape [N,K] with physical index n*pitch+k (K-major, ordinary dense column-major/DN-equivalent) for TransB=0 or [K,N] with physical index k*pitch+n (N-major, ordinary dense row-major) for TransB=1; physical columns may be legally padded, and PE i uses valid_M=clamp(group_M-i*M_per_PE,0,M_per_PE) with M_per_PE 16 for group_M<=64 and 32 for group_M>=65. TransA and TransB apply only to their corresponding Shared primary. Right-only Shared inherits Local A layout; all-Shared ACC inherits C layout; all-Shared non-ACC selects M16 through M=16 and M32 through M=32.","AType and BType must be supported ordinary Matrix types from one numeric class. Bias uses one Local CUBE_N8 logical 1xN accumulator-type source (FP32 for MX), broadcast by logical output column. Published Shared operands may replace the right group or both matrix groups; supplementary operands and destinations remain Local.","Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects.","B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema.","For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D.","Cooperative Shared Matrix forms accept group_M in 1..128 and N/K in 1..65535 without power-of-two restrictions. Validate Local CUBE roles with existing descriptor and capacity rules; validate Shared roles against the original legal Shared descriptor and physical pitch. Internal read views preserve original pitch and use typed logical element/carrier/lane reads without a transient Local descriptor or 64 KiB capacity limit.","If any supported four-bit Shared primary is present (E2M1X2, E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such original parent physical columns pitch are even under every transpose combination. Valid M/group_M and N gain no parity restriction. This does not affect Local-only TMATMUL, TGEMV, generic Shared allocation, or Local packed A when Shared B is not packed."],"memory_effects":["none"],"operands":[{"field":"destination0","role":"destination"},{"field":"source0","role":"left"},{"field":"source1","role":"right"},{"field":"source2","role":"bias"}],"ordering":["Complete schema, field, type, dimension, descriptor, shape, capacity, readiness, alias, and allocation preflight precedes every source snapshot and destination effect.","D and every enabled reduction output publish as one atomic group; rejection publishes none and successful sources persist.","Transparent-cache hints occur only after complete preflight and cannot alter source snapshots, D allocation or publication, faults, or numeric status."],"standalone_opcode":false,"state_effects":["Compute A[M x K] times B[K x N], then add one Local CUBE_N8 1xN private-result Bias into a new Local destination.","After complete preflight, execute TMATMUL_BIAS with the operand bindings listed above; destination definedness changes only as specified by that handler.","For Local execution, publish D with A's CUBE_M16 or CUBE_M32 layout and final output dtype; Bias uses Local CUBE_N8; RowMaxIn/Out and GroupMaxOut use the resolved M layout; vector quant/PReLU parameters use Local CUBE_N8/U64; MX scales keep their operation-owned layouts.","Successful Shared primary reads leave every Shared descriptor, mask, publication state, payload, and lifetime unchanged.","Always publish D; CCTRL[0]=1 publishes raw accumulator-type D and may hint cache replacement, while ACC CCTRL[1]=1 may hint cache use or prefetch of explicit C. Hint handling is not architecturally observable."]},"depends_on":["PTO-BLOCK-MODEL-SCHEMA-BUNDLE-ENCODING"],"engine":"CUBE","id":"PTO-TILE-TMATMUL-BIAS","mnemonic":"TMATMUL_BIAS","summary":"Compute A[M x K] times B[K x N], then add one Local CUBE_N8 1xN private-result Bias into a new Local destination.","surface":"tile"} // PTO-REVIEW: {"review_method":"formal-definition-read","outcome":"FORMAL-COMPLETE","reviewed_fields":["assembly","encoding","defaults","operation","state","memory","ordering","faults","reserved"]} // NDF-BEGIN: PTO-TMATMUL-BIAS-CONTRACT-001 // ndf: kind=contract level=L1 layer=tile status=accepted @@ -12,6 +12,18 @@ // [K,group_M] for TransA=1; Shared B MUST have exact physical valid shape // [N,K] for TransB=0 or [K,N] for TransB=1; physical columns MAY be padded // only within legal descriptor capacity. +// Cooperative Shared forms MUST use group_M in 1..128 and N/K in 1..65535; +// cooperative N/K MUST not have power-of-two restrictions. Validate Local +// CUBE roles with existing descriptor/capacity rules and Shared roles against +// the original legal Shared descriptors. Internal read views MUST preserve +// original pitch and typed logical element/carrier/lane mapping without a +// transient Local descriptor or 64 KiB capacity limit. +// If a supported packed-four-bit Shared primary is present (E2M1X2, +// E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such +// original parent physical `columns` pitch MUST be even under every +// transpose combination. Valid M/group_M and N have no added parity rule. +// This restriction MUST not affect Local-only TMATMUL, TGEMV, generic Shared +// allocation, or Local packed A when Shared B is not packed. // AType and BType must be supported ordinary Matrix types from one numeric // class. Bias uses one Local CUBE_N8 logical 1xN accumulator-type source (FP32 for MX), broadcast by logical output column. Published // Shared operands may replace the right group or both matrix groups; diff --git a/asl/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX.asl b/asl/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX.asl index 27541fbe8..16914c31d 100644 --- a/asl/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX.asl +++ b/asl/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX.asl @@ -1,4 +1,4 @@ -// PTO-INSTRUCTION: {"assembly":["TMATMUL_MX "],"block":["BSTART.TMATMULMX AType","B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType)","B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one)","B.DIM LB0 M or cooperative group_M (optional, default 1)","B.DIM LB1 N (optional, default 1)","B.DIM LB2 K (optional, default 1)","B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111)","B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, optional A scale, B CUBE_N8 primary, optional B scale","B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations","B.IOT/B.IOR postprocess operands selected by B.FPATR","BSTOP or the next BSTART completion boundary"],"catalog_indices":[85],"catalog_records":[{"arguments":[{"operand":"destination0"},{"operand":"source0"},{"operand":"source1"},{"operand":"source2"},{"operand":"source3"}],"command_mnemonic":"BSTART.TMATMULMX","contract_status":"reviewed-complete","datr_contract":{"allowed_nonzero_fields":["DataType","RMode","Sat","PadValueOrByteId"],"pad_union":"matrix-cctrl"},"disposition":"accepted-direct-operation","effect_contract":"TMATMUL_MX","family":"CUBE","fault_contract":"ExecuteTileInstruction","function":4,"legality_handler":"TileOperandsLegal_TMATMUL_MX","name":"TMATMUL_MX","operands":[{"field":"destination0","role":"destination"},{"field":"source0","role":"left"},{"field":"source1","role":"row-scale"},{"field":"source2","role":"right"},{"field":"source3","role":"column-scale"}],"restart_contract":"CompleteBundleAtWithAcceptedApplicabilityRules","semantic_handler":"TMATMUL_MX","state_effects":["operand:destination0:destination","operand:source0:left","operand:source1:row-scale","operand:source2:right","operand:source3:column-scale","runtime:CurrentBundleCCTRL:raw-partial-and-transparent-cache-hints"]}],"classification":["matrix-and-matrix-vector","matrix-matrix"],"contract":{"block_composition":["BSTART.TMATMULMX AType","B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType)","B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one)","B.DIM LB0 M or cooperative group_M (optional, default 1)","B.DIM LB1 N (optional, default 1)","B.DIM LB2 K (optional, default 1)","B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111)","B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, optional A scale, B CUBE_N8 primary, optional B scale","B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations","B.IOT/B.IOR postprocess operands selected by B.FPATR","BSTOP or the next BSTART completion boundary"],"canonical_assembly":["TMATMUL_MX "],"defaults":["Encoded DataType is always AType. Omitted B.DATR preserves AType as BType, selects RNE, and disables saturation.","Omitted LB0 defaults Local M or cooperative group_M to one; omitted LB1 and LB2 default N and K to one.","Exactly one all-zero B.FPATR selects no conversion, activation, or reduction; B.IOR and auxiliary B.IOT operands exist only when a selected postprocess mode requires them.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize; when a Local Matrix-MX scale is required, its M/N major is at most 32 because Local scales use one-block CUBE_M32, while Shared scales remain ordinary Tiles. Each side uses group-32 E8M0 or HiF4X2 group-64 U32 scale; Local scales use CUBE_M32 and Shared scales remain ordinary Tiles.","TransA=0 and TransB=0 select no logical transpose. Each nonzero control is legal only when the corresponding primary is Shared.","Omitted CCTRL selects 00: final D output and no transparent-cache hint."],"encoding_class":"selector-encoded-block-operation","examples":["BSTART.TMATMULMX AType; B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType); B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one); B.DIM LB0 M or cooperative group_M (optional, default 1); B.DIM LB1 N (optional, default 1); B.DIM LB2 K (optional, default 1); B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111); B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, optional A scale, B CUBE_N8 primary, optional B scale; B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations; B.IOT/B.IOR postprocess operands selected by B.FPATR; BSTOP or the next BSTART completion boundary"],"exceptions":["A reserved DataType or fixed-bit mismatch raises Fault_IllegalInstruction before block state changes.","Missing, duplicate, or non-Matrix B.FPATR use raises Fault_BundleControl before allocation or payload effects.","Illegal types, dimensions, masks, binding streams, descriptors, shapes, capacities, aliases, readiness, or postprocess values raise Fault_TileLegality before source snapshots and effects."],"field_contracts":{},"field_zero_meanings":{},"legality":["The carrier selects exactly CUBE Function 4 and TileOperation_TMATMUL_MX.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize; when a Local Matrix-MX scale is required, its M/N major is at most 32 because Local scales use one-block CUBE_M32, while Shared scales remain ordinary Tiles. Each side uses group-32 E8M0 or HiF4X2 group-64 U32 scale; Local scales use CUBE_M32 and Shared scales remain ordinary Tiles.","A Shared primary must satisfy hardware-maintained whole-parent readiness and publication before payload access; fixed-quarter allocation or initialization masks are not a prerequisite. Any cooperative Local-A/Shared-B or Shared-A/Shared-B TMATMUL interprets LB0 as Core-total group_M in 1..128; Shared A has exact physical valid shape [group_M,K] with physical index m*pitch+k (K-major) for TransA=0 or [K,group_M] with physical index k*pitch+m (M-major) for TransA=1; Shared B has exact physical valid shape [N,K] with physical index n*pitch+k (K-major, ordinary dense column-major/DN-equivalent) for TransB=0 or [K,N] with physical index k*pitch+n (N-major, ordinary dense row-major) for TransB=1; physical columns may be legally padded, and PE i uses valid_M=clamp(group_M-i*M_per_PE,0,M_per_PE) with M_per_PE 16 for group_M<=64 and 32 for group_M>=65. TransA and TransB apply only to their corresponding Shared primary. Right-only Shared inherits Local A layout; all-Shared ACC inherits C layout; all-Shared non-ACC selects M16 through M=16 and M32 through M=32.","Each non-FP16/BF16 side requires its assigned scale: group-32 E8M0 for MX FP8/FP4 or group-64 U32 for HiF4X2. Published Shared operands may replace the right group or both matrix groups; supplementary operands and destinations remain Local.","Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects.","B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema.","For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D."],"memory_effects":["none"],"operands":[{"field":"destination0","role":"destination"},{"field":"source0","role":"left"},{"field":"source1","role":"row-scale"},{"field":"source2","role":"right"},{"field":"source3","role":"column-scale"}],"ordering":["Complete schema, field, type, dimension, descriptor, shape, capacity, readiness, alias, and allocation preflight precedes every source snapshot and destination effect.","D and every enabled reduction output publish as one atomic group; rejection publishes none and successful sources persist.","Transparent-cache hints occur only after complete preflight and cannot alter source snapshots, D allocation or publication, faults, or numeric status."],"standalone_opcode":false,"state_effects":["Multiply matrices using row and column scale Tiles.","After complete preflight, execute TMATMUL_MX with the operand bindings listed above; destination definedness changes only as specified by that handler.","For Local execution, publish D with A's CUBE_M16 or CUBE_M32 layout and final output dtype; Bias uses Local CUBE_N8; RowMaxIn/Out and GroupMaxOut use the resolved M layout; vector quant/PReLU parameters use Local CUBE_N8/U64; MX scales keep their operation-owned layouts.","Successful Shared primary reads leave every Shared descriptor, mask, publication state, payload, and lifetime unchanged.","Always publish D; CCTRL[0]=1 publishes raw accumulator-type D and may hint cache replacement, while ACC CCTRL[1]=1 may hint cache use or prefetch of explicit C. Hint handling is not architecturally observable."]},"depends_on":["PTO-BLOCK-MODEL-SCHEMA-BUNDLE-ENCODING"],"engine":"CUBE","id":"PTO-TILE-TMATMUL-MX","mnemonic":"TMATMUL_MX","summary":"Multiply matrices using row and column scale Tiles.","surface":"tile"} +// PTO-INSTRUCTION: {"assembly":["TMATMUL_MX "],"block":["BSTART.TMATMULMX AType","B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType)","B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one)","B.DIM LB0 M or cooperative group_M (optional, default 1)","B.DIM LB1 N (optional, default 1)","B.DIM LB2 K (optional, default 1)","B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111)","B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, optional A scale, B CUBE_N8 primary, optional B scale","B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations","B.IOT/B.IOR postprocess operands selected by B.FPATR","BSTOP or the next BSTART completion boundary"],"catalog_indices":[85],"catalog_records":[{"arguments":[{"operand":"destination0"},{"operand":"source0"},{"operand":"source1"},{"operand":"source2"},{"operand":"source3"}],"command_mnemonic":"BSTART.TMATMULMX","contract_status":"reviewed-complete","datr_contract":{"allowed_nonzero_fields":["DataType","RMode","Sat","PadValueOrByteId"],"pad_union":"matrix-cctrl"},"disposition":"accepted-direct-operation","effect_contract":"TMATMUL_MX","family":"CUBE","fault_contract":"ExecuteTileInstruction","function":4,"legality_handler":"TileOperandsLegal_TMATMUL_MX","name":"TMATMUL_MX","operands":[{"field":"destination0","role":"destination"},{"field":"source0","role":"left"},{"field":"source1","role":"row-scale"},{"field":"source2","role":"right"},{"field":"source3","role":"column-scale"}],"restart_contract":"CompleteBundleAtWithAcceptedApplicabilityRules","semantic_handler":"TMATMUL_MX","state_effects":["operand:destination0:destination","operand:source0:left","operand:source1:row-scale","operand:source2:right","operand:source3:column-scale","runtime:CurrentBundleCCTRL:raw-partial-and-transparent-cache-hints"]}],"classification":["matrix-and-matrix-vector","matrix-matrix"],"contract":{"block_composition":["BSTART.TMATMULMX AType","B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType)","B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one)","B.DIM LB0 M or cooperative group_M (optional, default 1)","B.DIM LB1 N (optional, default 1)","B.DIM LB2 K (optional, default 1)","B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111)","B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, optional A scale, B CUBE_N8 primary, optional B scale","B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations","B.IOT/B.IOR postprocess operands selected by B.FPATR","BSTOP or the next BSTART completion boundary"],"canonical_assembly":["TMATMUL_MX "],"defaults":["Encoded DataType is always AType. Omitted B.DATR preserves AType as BType, selects RNE, and disables saturation.","Omitted LB0 defaults Local M or cooperative group_M to one; omitted LB1 and LB2 default N and K to one.","Exactly one all-zero B.FPATR selects no conversion, activation, or reduction; B.IOR and auxiliary B.IOT operands exist only when a selected postprocess mode requires them.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize; when a Local Matrix-MX scale is required, its M/N major is at most 32 because Local scales use one-block CUBE_M32, while Shared scales remain ordinary Tiles. Each side uses group-32 E8M0 or HiF4X2 group-64 U32 scale; Local scales use CUBE_M32 and Shared scales remain ordinary Tiles.","TransA=0 and TransB=0 select no logical transpose. Each nonzero control is legal only when the corresponding primary is Shared.","Omitted CCTRL selects 00: final D output and no transparent-cache hint."],"encoding_class":"selector-encoded-block-operation","examples":["BSTART.TMATMULMX AType; B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType); B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one); B.DIM LB0 M or cooperative group_M (optional, default 1); B.DIM LB1 N (optional, default 1); B.DIM LB2 K (optional, default 1); B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111); B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, optional A scale, B CUBE_N8 primary, optional B scale; B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations; B.IOT/B.IOR postprocess operands selected by B.FPATR; BSTOP or the next BSTART completion boundary"],"exceptions":["A reserved DataType or fixed-bit mismatch raises Fault_IllegalInstruction before block state changes.","Missing, duplicate, or non-Matrix B.FPATR use raises Fault_BundleControl before allocation or payload effects.","Illegal types, dimensions, masks, binding streams, descriptors, shapes, capacities, aliases, readiness, or postprocess values raise Fault_TileLegality before source snapshots and effects."],"field_contracts":{},"field_zero_meanings":{},"legality":["The carrier selects exactly CUBE Function 4 and TileOperation_TMATMUL_MX.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize; when a Local Matrix-MX scale is required, its M/N major is at most 32 because Local scales use one-block CUBE_M32, while Shared scales remain ordinary Tiles. Each side uses group-32 E8M0 or HiF4X2 group-64 U32 scale; Local scales use CUBE_M32 and Shared scales remain ordinary Tiles.","A Shared primary must satisfy hardware-maintained whole-parent readiness and publication before payload access; fixed-quarter allocation or initialization masks are not a prerequisite. Any cooperative Local-A/Shared-B or Shared-A/Shared-B TMATMUL interprets LB0 as Core-total group_M in 1..128; Shared A has exact physical valid shape [group_M,K] with physical index m*pitch+k (K-major) for TransA=0 or [K,group_M] with physical index k*pitch+m (M-major) for TransA=1; Shared B has exact physical valid shape [N,K] with physical index n*pitch+k (K-major, ordinary dense column-major/DN-equivalent) for TransB=0 or [K,N] with physical index k*pitch+n (N-major, ordinary dense row-major) for TransB=1; physical columns may be legally padded, and PE i uses valid_M=clamp(group_M-i*M_per_PE,0,M_per_PE) with M_per_PE 16 for group_M<=64 and 32 for group_M>=65. TransA and TransB apply only to their corresponding Shared primary. Right-only Shared inherits Local A layout; all-Shared ACC inherits C layout; all-Shared non-ACC selects M16 through M=16 and M32 through M=32.","Each non-FP16/BF16 side requires its assigned scale: group-32 E8M0 for MX FP8/FP4 or group-64 U32 for HiF4X2. Published Shared operands may replace the right group or both matrix groups; supplementary operands and destinations remain Local.","Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects.","B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema.","For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D.","Cooperative Shared Matrix forms accept group_M in 1..128 and N/K in 1..65535 without power-of-two restrictions. Validate Local CUBE roles with existing descriptor and capacity rules; validate Shared roles against the original legal Shared descriptor and physical pitch. Internal read views preserve original pitch and use typed logical element/carrier/lane reads without a transient Local descriptor or 64 KiB capacity limit.","If any supported four-bit Shared primary is present (E2M1X2, E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such original parent physical columns pitch are even under every transpose combination. Valid M/group_M and N gain no parity restriction. This does not affect Local-only TMATMUL, TGEMV, generic Shared allocation, or Local packed A when Shared B is not packed.","Shared Matrix-MX ScaleA has exact stored-valid shape [group_M,G_A] and ScaleB [N,G_B], with each G equal to ceil(K/group_size) for its side (group-32 E8M0 or group-64 U32), independent of TransA/TransB; valid k selects floor(k/group_size)."],"memory_effects":["none"],"operands":[{"field":"destination0","role":"destination"},{"field":"source0","role":"left"},{"field":"source1","role":"row-scale"},{"field":"source2","role":"right"},{"field":"source3","role":"column-scale"}],"ordering":["Complete schema, field, type, dimension, descriptor, shape, capacity, readiness, alias, and allocation preflight precedes every source snapshot and destination effect.","D and every enabled reduction output publish as one atomic group; rejection publishes none and successful sources persist.","Transparent-cache hints occur only after complete preflight and cannot alter source snapshots, D allocation or publication, faults, or numeric status."],"standalone_opcode":false,"state_effects":["Multiply matrices using row and column scale Tiles.","After complete preflight, execute TMATMUL_MX with the operand bindings listed above; destination definedness changes only as specified by that handler.","For Local execution, publish D with A's CUBE_M16 or CUBE_M32 layout and final output dtype; Bias uses Local CUBE_N8; RowMaxIn/Out and GroupMaxOut use the resolved M layout; vector quant/PReLU parameters use Local CUBE_N8/U64; MX scales keep their operation-owned layouts.","Successful Shared primary reads leave every Shared descriptor, mask, publication state, payload, and lifetime unchanged.","Always publish D; CCTRL[0]=1 publishes raw accumulator-type D and may hint cache replacement, while ACC CCTRL[1]=1 may hint cache use or prefetch of explicit C. Hint handling is not architecturally observable."]},"depends_on":["PTO-BLOCK-MODEL-SCHEMA-BUNDLE-ENCODING"],"engine":"CUBE","id":"PTO-TILE-TMATMUL-MX","mnemonic":"TMATMUL_MX","summary":"Multiply matrices using row and column scale Tiles.","surface":"tile"} // PTO-REVIEW: {"review_method":"formal-definition-read","outcome":"FORMAL-COMPLETE","reviewed_fields":["assembly","encoding","defaults","operation","state","memory","ordering","faults","reserved"]} // NDF-BEGIN: PTO-TMATMUL-MX-CONTRACT-001 // ndf: kind=contract level=L1 layer=tile status=accepted @@ -12,6 +12,18 @@ // [K,group_M] for TransA=1; Shared B MUST have exact physical valid shape // [N,K] for TransB=0 or [K,N] for TransB=1; physical columns MAY be padded // only within legal descriptor capacity. +// Cooperative Shared forms MUST use group_M in 1..128 and N/K in 1..65535; +// cooperative N/K MUST not have power-of-two restrictions. Validate Local +// CUBE roles with existing descriptor/capacity rules and Shared roles against +// the original legal Shared descriptors. Internal read views MUST preserve +// original pitch and typed logical element/carrier/lane mapping without a +// transient Local descriptor or 64 KiB capacity limit. +// If a supported packed-four-bit Shared primary is present (E2M1X2, +// E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such +// original parent physical `columns` pitch MUST be even under every +// transpose combination. Valid M/group_M and N have no added parity rule. +// This restriction MUST not affect Local-only TMATMUL, TGEMV, generic Shared +// allocation, or Local packed A when Shared B is not packed. // Each matrix side independently requires an E8M0 scale exactly when its MX // input type is not FP16 or BF16. Published Shared operands may replace the // right group or both matrix groups; supplementary operands and destinations @@ -19,6 +31,10 @@ // Local A/B/C scales use one physical CUBE_M32 row block, so their valid major // dimension is at most 32; a Local B-scale with N>32 is illegal without a // replacement representation. Shared scales remain ordinary Tiles. +// For Shared Matrix-MX, ScaleA MUST have exact stored-valid shape +// [group_M,G_A] and ScaleB [N,G_B], where each G is ceil(K/group_size) +// for its own primary type (group-32 E8M0 or group-64 U32). Transpose MUST +// not change scale shape or indexing; each valid k selects floor(k/group_size). // Shared primaries MUST satisfy hardware-maintained whole-parent readiness and publication before payload access; fixed-quarter allocation or initialization masks are not prerequisites. // TransA/TransB MUST apply only to the corresponding Shared primary. Every // cooperative nonzero PE mask MUST be 1111; zero-row PEs MUST have no Local effect. diff --git a/asl/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX_ACC.asl b/asl/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX_ACC.asl index 49c10af0a..53891b311 100644 --- a/asl/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX_ACC.asl +++ b/asl/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX_ACC.asl @@ -1,4 +1,4 @@ -// PTO-INSTRUCTION: {"assembly":["TMATMUL_MX_ACC "],"block":["BSTART.TMATMULMX.ACC AType","B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType)","B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one)","B.DIM LB0 M or cooperative group_M (optional, default 1)","B.DIM LB1 N (optional, default 1)","B.DIM LB2 K (optional, default 1)","B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111)","B.IOT ordered Local mathematical sources: C CUBE_M16/M32 accumulator matching A with encoded selector distinct from DstTile, A CUBE_M16/M32 primary, optional A scale, B CUBE_N8 primary, optional B scale, optional U8 CScale CUBE_M32 [M,1]","B.IOT D matching A's CUBE_M16/M32 layout with a distinct encoded destination index, optional RowMaxOut, optional GroupMaxOut destinations","B.IOT/B.IOR postprocess operands selected by B.FPATR","BSTOP or the next BSTART completion boundary"],"catalog_indices":[87],"catalog_records":[{"arguments":[{"operand":"destination0"},{"operand":"source0"},{"operand":"source1"},{"operand":"source2"},{"operand":"source3"},{"operand":"source4"}],"command_mnemonic":"BSTART.TMATMULMX.ACC","contract_status":"reviewed-complete","datr_contract":{"allowed_nonzero_fields":["DataType","RMode","Sat","PadValueOrByteId"],"pad_union":"matrix-cctrl"},"disposition":"accepted-direct-operation","effect_contract":"TMATMUL_MX_ACC","family":"CUBE","fault_contract":"ExecuteTileInstruction","function":6,"legality_handler":"TileOperandsLegal_TMATMUL_MX_ACC","name":"TMATMUL_MX_ACC","operands":[{"field":"destination0","role":"destination"},{"field":"source0","role":"accumulator"},{"field":"source1","role":"left"},{"field":"source2","role":"row-scale"},{"field":"source3","role":"right"},{"field":"source4","role":"column-scale"}],"restart_contract":"CompleteBundleAtWithAcceptedApplicabilityRules","semantic_handler":"TMATMUL_MX_ACC","state_effects":["operand:destination0:destination","operand:source0:accumulator","operand:source1:left","operand:source2:row-scale","operand:source3:right","operand:source4:column-scale","runtime:CurrentBundleCCTRL:raw-partial-and-transparent-cache-hints"]}],"classification":["matrix-and-matrix-vector","matrix-matrix"],"contract":{"block_composition":["BSTART.TMATMULMX.ACC AType","B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType)","B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one)","B.DIM LB0 M or cooperative group_M (optional, default 1)","B.DIM LB1 N (optional, default 1)","B.DIM LB2 K (optional, default 1)","B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111)","B.IOT ordered Local mathematical sources: C CUBE_M16/M32 accumulator matching A with encoded selector distinct from DstTile, A CUBE_M16/M32 primary, optional A scale, B CUBE_N8 primary, optional B scale, optional U8 CScale CUBE_M32 [M,1]","B.IOT D matching A's CUBE_M16/M32 layout with a distinct encoded destination index, optional RowMaxOut, optional GroupMaxOut destinations","B.IOT/B.IOR postprocess operands selected by B.FPATR","BSTOP or the next BSTART completion boundary"],"canonical_assembly":["TMATMUL_MX_ACC "],"defaults":["Encoded DataType is always AType. Omitted B.DATR preserves AType as BType, selects RNE, and disables saturation.","Omitted LB0 defaults Local M or cooperative group_M to one; omitted LB1 and LB2 default N and K to one.","Exactly one all-zero B.FPATR selects no conversion, activation, or reduction; B.IOR and auxiliary B.IOT operands exist only when a selected postprocess mode requires them.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout; Local C also uses A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize; when a Local Matrix-MX scale is required, its M/N major is at most 32 because Local scales use one-block CUBE_M32, while Shared scales remain ordinary Tiles. Each side uses group-32 E8M0 or HiF4X2 group-64 U32 scale; Local scales use CUBE_M32 and Shared scales remain ordinary Tiles.","TransA=0 and TransB=0 select no logical transpose. Each nonzero control is legal only when the corresponding primary is Shared.","C and D are both mandatory. CScaleEn accepts one final U8 CUBE_M32 [M,1] Local mathematical source only with FP32 C; omission defaults CScaleEn to zero. In decoded blocks C's six-bit relative selector must differ from zero-extended DstTile before rename; direct Tile calls require destination TileIndex to differ from accumulator TileIndex.","Omitted CCTRL selects 00: final D output and no transparent-cache hint."],"encoding_class":"selector-encoded-block-operation","examples":["BSTART.TMATMULMX.ACC AType; B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType); B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one); B.DIM LB0 M or cooperative group_M (optional, default 1); B.DIM LB1 N (optional, default 1); B.DIM LB2 K (optional, default 1); B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111); B.IOT ordered Local mathematical sources: C CUBE_M16/M32 accumulator matching A with encoded selector distinct from DstTile, A CUBE_M16/M32 primary, optional A scale, B CUBE_N8 primary, optional B scale; B.IOT D matching A's CUBE_M16/M32 layout with a distinct encoded destination index, optional RowMaxOut, optional GroupMaxOut destinations; B.IOT/B.IOR postprocess operands selected by B.FPATR; BSTOP or the next BSTART completion boundary"],"exceptions":["A reserved DataType or fixed-bit mismatch raises Fault_IllegalInstruction before block state changes.","Missing, duplicate, or non-Matrix B.FPATR use raises Fault_BundleControl before allocation or payload effects.","Illegal types, dimensions, masks, binding streams, descriptors, shapes, capacities, aliases, readiness, or postprocess values raise Fault_TileLegality before source snapshots and effects."],"field_contracts":{},"field_zero_meanings":{},"legality":["The carrier selects exactly CUBE Function 6 and TileOperation_TMATMUL_MX_ACC.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout; Local C also uses A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize; when a Local Matrix-MX scale is required, its M/N major is at most 32 because Local scales use one-block CUBE_M32, while Shared scales remain ordinary Tiles. Each side uses group-32 E8M0 or HiF4X2 group-64 U32 scale; Local scales use CUBE_M32 and Shared scales remain ordinary Tiles.","C and D are both mandatory. CScaleEn accepts one final U8 CUBE_M32 [M,1] Local mathematical source only with FP32 C; omission defaults CScaleEn to zero. In decoded blocks C's six-bit relative selector must differ from zero-extended DstTile before rename; direct Tile calls require destination TileIndex to differ from accumulator TileIndex.","A Shared primary must satisfy hardware-maintained whole-parent readiness and publication before payload access; fixed-quarter allocation or initialization masks are not a prerequisite. Any cooperative Local-A/Shared-B or Shared-A/Shared-B TMATMUL interprets LB0 as Core-total group_M in 1..128; Shared A has exact physical valid shape [group_M,K] with physical index m*pitch+k (K-major) for TransA=0 or [K,group_M] with physical index k*pitch+m (M-major) for TransA=1; Shared B has exact physical valid shape [N,K] with physical index n*pitch+k (K-major, ordinary dense column-major/DN-equivalent) for TransB=0 or [K,N] with physical index k*pitch+n (N-major, ordinary dense row-major) for TransB=1; physical columns may be legally padded, and PE i uses valid_M=clamp(group_M-i*M_per_PE,0,M_per_PE) with M_per_PE 16 for group_M<=64 and 32 for group_M>=65. TransA and TransB apply only to their corresponding Shared primary. Right-only Shared inherits Local A layout; all-Shared ACC inherits C layout; all-Shared non-ACC selects M16 through M=16 and M32 through M=32.","Each non-FP16/BF16 side requires its assigned scale: group-32 E8M0 for MX FP8/FP4 or group-64 U32 for HiF4X2. C is one explicit Local MxN accumulator source and D is a distinct newly published destination; C's encoded relative selector and D's zero-extended DstTile hand must differ before rename. Published Shared operands may replace the right group or both matrix groups; supplementary operands and destinations remain Local.","Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects.","B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema.","For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D."],"memory_effects":["none"],"operands":[{"field":"destination0","role":"destination"},{"field":"source0","role":"accumulator"},{"field":"source1","role":"left"},{"field":"source2","role":"row-scale"},{"field":"source3","role":"right"},{"field":"source4","role":"column-scale"}],"ordering":["Complete schema, field, type, dimension, descriptor, shape, capacity, readiness, alias, and allocation preflight precedes every source snapshot and destination effect.","D and every enabled reduction output publish as one atomic group; rejection publishes none and successful sources persist.","Transparent-cache hints occur only after complete preflight and cannot alter source snapshots, D allocation or publication, faults, or numeric status."],"standalone_opcode":false,"state_effects":["Multiply scaled matrices and accumulate into the supplied accumulator Tile.","After complete preflight, execute TMATMUL_MX_ACC with the operand bindings listed above; destination definedness changes only as specified by that handler.","For Local execution, publish D with A's CUBE_M16 or CUBE_M32 layout and final output dtype; Bias uses Local CUBE_N8; RowMaxIn/Out and GroupMaxOut use the resolved M layout; vector quant/PReLU parameters use Local CUBE_N8/U64; MX scales keep their operation-owned layouts.","Successful Shared primary reads leave every Shared descriptor, mask, publication state, payload, and lifetime unchanged.","C is snapshotted before multiplication and remains descriptor-and-payload unchanged after success or rejection.","Always publish D; CCTRL[0]=1 publishes raw accumulator-type D and may hint cache replacement, while ACC CCTRL[1]=1 may hint cache use or prefetch of explicit C. Hint handling is not architecturally observable."]},"depends_on":["PTO-BLOCK-MODEL-SCHEMA-BUNDLE-ENCODING"],"engine":"CUBE","id":"PTO-TILE-TMATMUL-MX-ACC","mnemonic":"TMATMUL_MX_ACC","summary":"Multiply scaled matrices and accumulate into the supplied accumulator Tile.","surface":"tile"} +// PTO-INSTRUCTION: {"assembly":["TMATMUL_MX_ACC "],"block":["BSTART.TMATMULMX.ACC AType","B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType)","B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one)","B.DIM LB0 M or cooperative group_M (optional, default 1)","B.DIM LB1 N (optional, default 1)","B.DIM LB2 K (optional, default 1)","B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111)","B.IOT ordered Local mathematical sources: C CUBE_M16/M32 accumulator matching A with encoded selector distinct from DstTile, A CUBE_M16/M32 primary, optional A scale, B CUBE_N8 primary, optional B scale, optional U8 CScale CUBE_M32 [M,1]","B.IOT D matching A's CUBE_M16/M32 layout with a distinct encoded destination index, optional RowMaxOut, optional GroupMaxOut destinations","B.IOT/B.IOR postprocess operands selected by B.FPATR","BSTOP or the next BSTART completion boundary"],"catalog_indices":[87],"catalog_records":[{"arguments":[{"operand":"destination0"},{"operand":"source0"},{"operand":"source1"},{"operand":"source2"},{"operand":"source3"},{"operand":"source4"}],"command_mnemonic":"BSTART.TMATMULMX.ACC","contract_status":"reviewed-complete","datr_contract":{"allowed_nonzero_fields":["DataType","RMode","Sat","PadValueOrByteId"],"pad_union":"matrix-cctrl"},"disposition":"accepted-direct-operation","effect_contract":"TMATMUL_MX_ACC","family":"CUBE","fault_contract":"ExecuteTileInstruction","function":6,"legality_handler":"TileOperandsLegal_TMATMUL_MX_ACC","name":"TMATMUL_MX_ACC","operands":[{"field":"destination0","role":"destination"},{"field":"source0","role":"accumulator"},{"field":"source1","role":"left"},{"field":"source2","role":"row-scale"},{"field":"source3","role":"right"},{"field":"source4","role":"column-scale"}],"restart_contract":"CompleteBundleAtWithAcceptedApplicabilityRules","semantic_handler":"TMATMUL_MX_ACC","state_effects":["operand:destination0:destination","operand:source0:accumulator","operand:source1:left","operand:source2:row-scale","operand:source3:right","operand:source4:column-scale","runtime:CurrentBundleCCTRL:raw-partial-and-transparent-cache-hints"]}],"classification":["matrix-and-matrix-vector","matrix-matrix"],"contract":{"block_composition":["BSTART.TMATMULMX.ACC AType","B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType)","B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one)","B.DIM LB0 M or cooperative group_M (optional, default 1)","B.DIM LB1 N (optional, default 1)","B.DIM LB2 K (optional, default 1)","B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111)","B.IOT ordered Local mathematical sources: C CUBE_M16/M32 accumulator matching A with encoded selector distinct from DstTile, A CUBE_M16/M32 primary, optional A scale, B CUBE_N8 primary, optional B scale, optional U8 CScale CUBE_M32 [M,1]","B.IOT D matching A's CUBE_M16/M32 layout with a distinct encoded destination index, optional RowMaxOut, optional GroupMaxOut destinations","B.IOT/B.IOR postprocess operands selected by B.FPATR","BSTOP or the next BSTART completion boundary"],"canonical_assembly":["TMATMUL_MX_ACC "],"defaults":["Encoded DataType is always AType. Omitted B.DATR preserves AType as BType, selects RNE, and disables saturation.","Omitted LB0 defaults Local M or cooperative group_M to one; omitted LB1 and LB2 default N and K to one.","Exactly one all-zero B.FPATR selects no conversion, activation, or reduction; B.IOR and auxiliary B.IOT operands exist only when a selected postprocess mode requires them.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout; Local C also uses A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize; when a Local Matrix-MX scale is required, its M/N major is at most 32 because Local scales use one-block CUBE_M32, while Shared scales remain ordinary Tiles. Each side uses group-32 E8M0 or HiF4X2 group-64 U32 scale; Local scales use CUBE_M32 and Shared scales remain ordinary Tiles.","TransA=0 and TransB=0 select no logical transpose. Each nonzero control is legal only when the corresponding primary is Shared.","C and D are both mandatory. CScaleEn accepts one final U8 CUBE_M32 [M,1] Local mathematical source only with FP32 C; omission defaults CScaleEn to zero. In decoded blocks C's six-bit relative selector must differ from zero-extended DstTile before rename; direct Tile calls require destination TileIndex to differ from accumulator TileIndex.","Omitted CCTRL selects 00: final D output and no transparent-cache hint."],"encoding_class":"selector-encoded-block-operation","examples":["BSTART.TMATMULMX.ACC AType; B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType); B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one); B.DIM LB0 M or cooperative group_M (optional, default 1); B.DIM LB1 N (optional, default 1); B.DIM LB2 K (optional, default 1); B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111); B.IOT ordered Local mathematical sources: C CUBE_M16/M32 accumulator matching A with encoded selector distinct from DstTile, A CUBE_M16/M32 primary, optional A scale, B CUBE_N8 primary, optional B scale; B.IOT D matching A's CUBE_M16/M32 layout with a distinct encoded destination index, optional RowMaxOut, optional GroupMaxOut destinations; B.IOT/B.IOR postprocess operands selected by B.FPATR; BSTOP or the next BSTART completion boundary"],"exceptions":["A reserved DataType or fixed-bit mismatch raises Fault_IllegalInstruction before block state changes.","Missing, duplicate, or non-Matrix B.FPATR use raises Fault_BundleControl before allocation or payload effects.","Illegal types, dimensions, masks, binding streams, descriptors, shapes, capacities, aliases, readiness, or postprocess values raise Fault_TileLegality before source snapshots and effects."],"field_contracts":{},"field_zero_meanings":{},"legality":["The carrier selects exactly CUBE Function 6 and TileOperation_TMATMUL_MX_ACC.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout; Local C also uses A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize; when a Local Matrix-MX scale is required, its M/N major is at most 32 because Local scales use one-block CUBE_M32, while Shared scales remain ordinary Tiles. Each side uses group-32 E8M0 or HiF4X2 group-64 U32 scale; Local scales use CUBE_M32 and Shared scales remain ordinary Tiles.","C and D are both mandatory. CScaleEn accepts one final U8 CUBE_M32 [M,1] Local mathematical source only with FP32 C; omission defaults CScaleEn to zero. In decoded blocks C's six-bit relative selector must differ from zero-extended DstTile before rename; direct Tile calls require destination TileIndex to differ from accumulator TileIndex.","A Shared primary must satisfy hardware-maintained whole-parent readiness and publication before payload access; fixed-quarter allocation or initialization masks are not a prerequisite. Any cooperative Local-A/Shared-B or Shared-A/Shared-B TMATMUL interprets LB0 as Core-total group_M in 1..128; Shared A has exact physical valid shape [group_M,K] with physical index m*pitch+k (K-major) for TransA=0 or [K,group_M] with physical index k*pitch+m (M-major) for TransA=1; Shared B has exact physical valid shape [N,K] with physical index n*pitch+k (K-major, ordinary dense column-major/DN-equivalent) for TransB=0 or [K,N] with physical index k*pitch+n (N-major, ordinary dense row-major) for TransB=1; physical columns may be legally padded, and PE i uses valid_M=clamp(group_M-i*M_per_PE,0,M_per_PE) with M_per_PE 16 for group_M<=64 and 32 for group_M>=65. TransA and TransB apply only to their corresponding Shared primary. Right-only Shared inherits Local A layout; all-Shared ACC inherits C layout; all-Shared non-ACC selects M16 through M=16 and M32 through M=32.","Each non-FP16/BF16 side requires its assigned scale: group-32 E8M0 for MX FP8/FP4 or group-64 U32 for HiF4X2. C is one explicit Local MxN accumulator source and D is a distinct newly published destination; C's encoded relative selector and D's zero-extended DstTile hand must differ before rename. Published Shared operands may replace the right group or both matrix groups; supplementary operands and destinations remain Local.","Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects.","B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema.","For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D.","Cooperative Shared Matrix forms accept group_M in 1..128 and N/K in 1..65535 without power-of-two restrictions. Validate Local CUBE roles with existing descriptor and capacity rules; validate Shared roles against the original legal Shared descriptor and physical pitch. Internal read views preserve original pitch and use typed logical element/carrier/lane reads without a transient Local descriptor or 64 KiB capacity limit.","If any supported four-bit Shared primary is present (E2M1X2, E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such original parent physical columns pitch are even under every transpose combination. Valid M/group_M and N gain no parity restriction. This does not affect Local-only TMATMUL, TGEMV, generic Shared allocation, or Local packed A when Shared B is not packed.","Shared Matrix-MX ScaleA has exact stored-valid shape [group_M,G_A] and ScaleB [N,G_B], with each G equal to ceil(K/group_size) for its side (group-32 E8M0 or group-64 U32), independent of TransA/TransB; valid k selects floor(k/group_size)."],"memory_effects":["none"],"operands":[{"field":"destination0","role":"destination"},{"field":"source0","role":"accumulator"},{"field":"source1","role":"left"},{"field":"source2","role":"row-scale"},{"field":"source3","role":"right"},{"field":"source4","role":"column-scale"}],"ordering":["Complete schema, field, type, dimension, descriptor, shape, capacity, readiness, alias, and allocation preflight precedes every source snapshot and destination effect.","D and every enabled reduction output publish as one atomic group; rejection publishes none and successful sources persist.","Transparent-cache hints occur only after complete preflight and cannot alter source snapshots, D allocation or publication, faults, or numeric status."],"standalone_opcode":false,"state_effects":["Multiply scaled matrices and accumulate into the supplied accumulator Tile.","After complete preflight, execute TMATMUL_MX_ACC with the operand bindings listed above; destination definedness changes only as specified by that handler.","For Local execution, publish D with A's CUBE_M16 or CUBE_M32 layout and final output dtype; Bias uses Local CUBE_N8; RowMaxIn/Out and GroupMaxOut use the resolved M layout; vector quant/PReLU parameters use Local CUBE_N8/U64; MX scales keep their operation-owned layouts.","Successful Shared primary reads leave every Shared descriptor, mask, publication state, payload, and lifetime unchanged.","C is snapshotted before multiplication and remains descriptor-and-payload unchanged after success or rejection.","Always publish D; CCTRL[0]=1 publishes raw accumulator-type D and may hint cache replacement, while ACC CCTRL[1]=1 may hint cache use or prefetch of explicit C. Hint handling is not architecturally observable."]},"depends_on":["PTO-BLOCK-MODEL-SCHEMA-BUNDLE-ENCODING"],"engine":"CUBE","id":"PTO-TILE-TMATMUL-MX-ACC","mnemonic":"TMATMUL_MX_ACC","summary":"Multiply scaled matrices and accumulate into the supplied accumulator Tile.","surface":"tile"} // PTO-REVIEW: {"review_method":"formal-definition-read","outcome":"FORMAL-COMPLETE","reviewed_fields":["assembly","encoding","defaults","operation","state","memory","ordering","faults","reserved"]} // NDF-BEGIN: PTO-TMATMUL-MX-ACC-CONTRACT-001 // ndf: kind=contract level=L1 layer=tile status=accepted @@ -12,6 +12,18 @@ // [K,group_M] for TransA=1; Shared B MUST have exact physical valid shape // [N,K] for TransB=0 or [K,N] for TransB=1; physical columns MAY be padded // only within legal descriptor capacity. +// Cooperative Shared forms MUST use group_M in 1..128 and N/K in 1..65535; +// cooperative N/K MUST not have power-of-two restrictions. Validate Local +// CUBE roles with existing descriptor/capacity rules and Shared roles against +// the original legal Shared descriptors. Internal read views MUST preserve +// original pitch and typed logical element/carrier/lane mapping without a +// transient Local descriptor or 64 KiB capacity limit. +// If a supported packed-four-bit Shared primary is present (E2M1X2, +// E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such +// original parent physical `columns` pitch MUST be even under every +// transpose combination. Valid M/group_M and N have no added parity rule. +// This restriction MUST not affect Local-only TMATMUL, TGEMV, generic Shared +// allocation, or Local packed A when Shared B is not packed. // Each matrix side independently requires an E8M0 scale exactly when its MX // input type is not FP16 or BF16. C is one explicit Local MxN accumulator // source and D is a distinct newly published destination. C's encoded relative @@ -21,6 +33,10 @@ // Local A/B/C scales use one physical CUBE_M32 row block, so their valid major // dimension is at most 32; a Local B-scale with N>32 is illegal without a // replacement representation. Shared scales remain ordinary Tiles. +// For Shared Matrix-MX, ScaleA MUST have exact stored-valid shape +// [group_M,G_A] and ScaleB [N,G_B], where each G is ceil(K/group_size) +// for its own primary type (group-32 E8M0 or group-64 U32). Transpose MUST +// not change scale shape or indexing; each valid k selects floor(k/group_size). // Shared primaries MUST satisfy hardware-maintained whole-parent readiness and publication before payload access; fixed-quarter allocation or initialization masks are not prerequisites. // TransA/TransB MUST apply only to the corresponding Shared primary. Every // cooperative nonzero PE mask MUST be 1111; zero-row PEs MUST have no Local effect. diff --git a/asl/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX_BIAS.asl b/asl/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX_BIAS.asl index d6df57490..9a8afcdc0 100644 --- a/asl/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX_BIAS.asl +++ b/asl/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX_BIAS.asl @@ -1,4 +1,4 @@ -// PTO-INSTRUCTION: {"assembly":["TMATMUL_MX_BIAS "],"block":["BSTART.TMATMULMX.BIAS AType","B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType)","B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one)","B.DIM LB0 M or cooperative group_M (optional, default 1)","B.DIM LB1 N (optional, default 1)","B.DIM LB2 K (optional, default 1)","B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111)","B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, optional A scale, B CUBE_N8 primary, optional B scale, CUBE_N8 1xN Bias","B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations","B.IOT/B.IOR postprocess operands selected by B.FPATR","BSTOP or the next BSTART completion boundary"],"catalog_indices":[86],"catalog_records":[{"arguments":[{"operand":"destination0"},{"operand":"source0"},{"operand":"source1"},{"operand":"source2"},{"operand":"source3"},{"operand":"source4"}],"command_mnemonic":"BSTART.TMATMULMX.BIAS","contract_status":"reviewed-complete","datr_contract":{"allowed_nonzero_fields":["DataType","RMode","Sat","PadValueOrByteId"],"pad_union":"matrix-cctrl"},"disposition":"accepted-direct-operation","effect_contract":"TMATMUL_MX_BIAS","family":"CUBE","fault_contract":"ExecuteTileInstruction","function":5,"legality_handler":"TileOperandsLegal_TMATMUL_MX_BIAS","name":"TMATMUL_MX_BIAS","operands":[{"field":"destination0","role":"destination"},{"field":"source0","role":"left"},{"field":"source1","role":"row-scale"},{"field":"source2","role":"right"},{"field":"source3","role":"column-scale"},{"field":"source4","role":"bias"}],"restart_contract":"CompleteBundleAtWithAcceptedApplicabilityRules","semantic_handler":"TMATMUL_MX_BIAS","state_effects":["operand:destination0:destination","operand:source0:left","operand:source1:row-scale","operand:source2:right","operand:source3:column-scale","operand:source4:bias","runtime:CurrentBundleCCTRL:raw-partial-and-transparent-cache-hints"]}],"classification":["matrix-and-matrix-vector","matrix-matrix"],"contract":{"block_composition":["BSTART.TMATMULMX.BIAS AType","B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType)","B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one)","B.DIM LB0 M or cooperative group_M (optional, default 1)","B.DIM LB1 N (optional, default 1)","B.DIM LB2 K (optional, default 1)","B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111)","B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, optional A scale, B CUBE_N8 primary, optional B scale, CUBE_N8 1xN Bias","B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations","B.IOT/B.IOR postprocess operands selected by B.FPATR","BSTOP or the next BSTART completion boundary"],"canonical_assembly":["TMATMUL_MX_BIAS "],"defaults":["Encoded DataType is always AType. Omitted B.DATR preserves AType as BType, selects RNE, and disables saturation.","Omitted LB0 defaults Local M or cooperative group_M to one; omitted LB1 and LB2 default N and K to one.","Exactly one all-zero B.FPATR selects no conversion, activation, or reduction; B.IOR and auxiliary B.IOT operands exist only when a selected postprocess mode requires them.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize; when a Local Matrix-MX scale is required, its M/N major is at most 32 because Local scales use one-block CUBE_M32, while Shared scales remain ordinary Tiles. Bias uses Local CUBE_N8; it is a logical 1xN accumulator-type source (FP32 for MX) broadcast by logical output column. Each side uses group-32 E8M0 or HiF4X2 group-64 U32 scale; Local scales use CUBE_M32 and Shared scales remain ordinary Tiles.","TransA=0 and TransB=0 select no logical transpose. Each nonzero control is legal only when the corresponding primary is Shared.","Omitted CCTRL selects 00: final D output and no transparent-cache hint."],"encoding_class":"selector-encoded-block-operation","examples":["BSTART.TMATMULMX.BIAS AType; B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType); B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one); B.DIM LB0 M or cooperative group_M (optional, default 1); B.DIM LB1 N (optional, default 1); B.DIM LB2 K (optional, default 1); B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111); B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, optional A scale, B CUBE_N8 primary, optional B scale, CUBE_N8 1xN Bias; B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations; B.IOT/B.IOR postprocess operands selected by B.FPATR; BSTOP or the next BSTART completion boundary"],"exceptions":["A reserved DataType or fixed-bit mismatch raises Fault_IllegalInstruction before block state changes.","Missing, duplicate, or non-Matrix B.FPATR use raises Fault_BundleControl before allocation or payload effects.","Illegal types, dimensions, masks, binding streams, descriptors, shapes, capacities, aliases, readiness, or postprocess values raise Fault_TileLegality before source snapshots and effects."],"field_contracts":{},"field_zero_meanings":{},"legality":["The carrier selects exactly CUBE Function 5 and TileOperation_TMATMUL_MX_BIAS.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize; when a Local Matrix-MX scale is required, its M/N major is at most 32 because Local scales use one-block CUBE_M32, while Shared scales remain ordinary Tiles. Bias uses Local CUBE_N8; it is a logical 1xN accumulator-type source (FP32 for MX) broadcast by logical output column. Each side uses group-32 E8M0 or HiF4X2 group-64 U32 scale; Local scales use CUBE_M32 and Shared scales remain ordinary Tiles.","A Shared primary must satisfy hardware-maintained whole-parent readiness and publication before payload access; fixed-quarter allocation or initialization masks are not a prerequisite. Any cooperative Local-A/Shared-B or Shared-A/Shared-B TMATMUL interprets LB0 as Core-total group_M in 1..128; Shared A has exact physical valid shape [group_M,K] with physical index m*pitch+k (K-major) for TransA=0 or [K,group_M] with physical index k*pitch+m (M-major) for TransA=1; Shared B has exact physical valid shape [N,K] with physical index n*pitch+k (K-major, ordinary dense column-major/DN-equivalent) for TransB=0 or [K,N] with physical index k*pitch+n (N-major, ordinary dense row-major) for TransB=1; physical columns may be legally padded, and PE i uses valid_M=clamp(group_M-i*M_per_PE,0,M_per_PE) with M_per_PE 16 for group_M<=64 and 32 for group_M>=65. TransA and TransB apply only to their corresponding Shared primary. Right-only Shared inherits Local A layout; all-Shared ACC inherits C layout; all-Shared non-ACC selects M16 through M=16 and M32 through M=32.","Each non-FP16/BF16 side requires its assigned scale: group-32 E8M0 for MX FP8/FP4 or group-64 U32 for HiF4X2. Bias uses one Local CUBE_N8 logical 1xN accumulator-type source (FP32 for MX), broadcast by logical output column. Published Shared operands may replace the right group or both matrix groups; supplementary operands and destinations remain Local.","Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects.","B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema.","For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D."],"memory_effects":["none"],"operands":[{"field":"destination0","role":"destination"},{"field":"source0","role":"left"},{"field":"source1","role":"row-scale"},{"field":"source2","role":"right"},{"field":"source3","role":"column-scale"},{"field":"source4","role":"bias"}],"ordering":["Complete schema, field, type, dimension, descriptor, shape, capacity, readiness, alias, and allocation preflight precedes every source snapshot and destination effect.","D and every enabled reduction output publish as one atomic group; rejection publishes none and successful sources persist.","Transparent-cache hints occur only after complete preflight and cannot alter source snapshots, D allocation or publication, faults, or numeric status."],"standalone_opcode":false,"state_effects":["Multiply scaled matrices and add the bias Tile.","After complete preflight, execute TMATMUL_MX_BIAS with the operand bindings listed above; destination definedness changes only as specified by that handler.","For Local execution, publish D with A's CUBE_M16 or CUBE_M32 layout and final output dtype; Bias uses Local CUBE_N8; RowMaxIn/Out and GroupMaxOut use the resolved M layout; vector quant/PReLU parameters use Local CUBE_N8/U64; MX scales keep their operation-owned layouts.","Successful Shared primary reads leave every Shared descriptor, mask, publication state, payload, and lifetime unchanged.","Always publish D; CCTRL[0]=1 publishes raw accumulator-type D and may hint cache replacement, while ACC CCTRL[1]=1 may hint cache use or prefetch of explicit C. Hint handling is not architecturally observable."]},"depends_on":["PTO-BLOCK-MODEL-SCHEMA-BUNDLE-ENCODING"],"engine":"CUBE","id":"PTO-TILE-TMATMUL-MX-BIAS","mnemonic":"TMATMUL_MX_BIAS","summary":"Multiply scaled matrices and add the bias Tile.","surface":"tile"} +// PTO-INSTRUCTION: {"assembly":["TMATMUL_MX_BIAS "],"block":["BSTART.TMATMULMX.BIAS AType","B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType)","B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one)","B.DIM LB0 M or cooperative group_M (optional, default 1)","B.DIM LB1 N (optional, default 1)","B.DIM LB2 K (optional, default 1)","B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111)","B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, optional A scale, B CUBE_N8 primary, optional B scale, CUBE_N8 1xN Bias","B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations","B.IOT/B.IOR postprocess operands selected by B.FPATR","BSTOP or the next BSTART completion boundary"],"catalog_indices":[86],"catalog_records":[{"arguments":[{"operand":"destination0"},{"operand":"source0"},{"operand":"source1"},{"operand":"source2"},{"operand":"source3"},{"operand":"source4"}],"command_mnemonic":"BSTART.TMATMULMX.BIAS","contract_status":"reviewed-complete","datr_contract":{"allowed_nonzero_fields":["DataType","RMode","Sat","PadValueOrByteId"],"pad_union":"matrix-cctrl"},"disposition":"accepted-direct-operation","effect_contract":"TMATMUL_MX_BIAS","family":"CUBE","fault_contract":"ExecuteTileInstruction","function":5,"legality_handler":"TileOperandsLegal_TMATMUL_MX_BIAS","name":"TMATMUL_MX_BIAS","operands":[{"field":"destination0","role":"destination"},{"field":"source0","role":"left"},{"field":"source1","role":"row-scale"},{"field":"source2","role":"right"},{"field":"source3","role":"column-scale"},{"field":"source4","role":"bias"}],"restart_contract":"CompleteBundleAtWithAcceptedApplicabilityRules","semantic_handler":"TMATMUL_MX_BIAS","state_effects":["operand:destination0:destination","operand:source0:left","operand:source1:row-scale","operand:source2:right","operand:source3:column-scale","operand:source4:bias","runtime:CurrentBundleCCTRL:raw-partial-and-transparent-cache-hints"]}],"classification":["matrix-and-matrix-vector","matrix-matrix"],"contract":{"block_composition":["BSTART.TMATMULMX.BIAS AType","B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType)","B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one)","B.DIM LB0 M or cooperative group_M (optional, default 1)","B.DIM LB1 N (optional, default 1)","B.DIM LB2 K (optional, default 1)","B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111)","B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, optional A scale, B CUBE_N8 primary, optional B scale, CUBE_N8 1xN Bias","B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations","B.IOT/B.IOR postprocess operands selected by B.FPATR","BSTOP or the next BSTART completion boundary"],"canonical_assembly":["TMATMUL_MX_BIAS "],"defaults":["Encoded DataType is always AType. Omitted B.DATR preserves AType as BType, selects RNE, and disables saturation.","Omitted LB0 defaults Local M or cooperative group_M to one; omitted LB1 and LB2 default N and K to one.","Exactly one all-zero B.FPATR selects no conversion, activation, or reduction; B.IOR and auxiliary B.IOT operands exist only when a selected postprocess mode requires them.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize; when a Local Matrix-MX scale is required, its M/N major is at most 32 because Local scales use one-block CUBE_M32, while Shared scales remain ordinary Tiles. Bias uses Local CUBE_N8; it is a logical 1xN accumulator-type source (FP32 for MX) broadcast by logical output column. Each side uses group-32 E8M0 or HiF4X2 group-64 U32 scale; Local scales use CUBE_M32 and Shared scales remain ordinary Tiles.","TransA=0 and TransB=0 select no logical transpose. Each nonzero control is legal only when the corresponding primary is Shared.","Omitted CCTRL selects 00: final D output and no transparent-cache hint."],"encoding_class":"selector-encoded-block-operation","examples":["BSTART.TMATMULMX.BIAS AType; B.DATR BType, PadValueOrByteId/CCTRL, RMode, Sat (optional; BType defaults to AType); B.FPATR PreQuantMode, ReluMode, GroupNCode, RowMaxEn, GroupMaxEn, RowMaxInit, MaxAbsEn, TransA, TransB, CScaleEn (exactly one); B.DIM LB0 M or cooperative group_M (optional, default 1); B.DIM LB1 N (optional, default 1); B.DIM LB2 K (optional, default 1); B.IOS complete right or both matrix operand groups (optional; cooperative mask 1111); B.IOT ordered Local mathematical sources: A CUBE_M16/M32 primary, optional A scale, B CUBE_N8 primary, optional B scale, CUBE_N8 1xN Bias; B.IOT D matching A's CUBE_M16/M32 layout, optional RowMaxOut, optional GroupMaxOut destinations; B.IOT/B.IOR postprocess operands selected by B.FPATR; BSTOP or the next BSTART completion boundary"],"exceptions":["A reserved DataType or fixed-bit mismatch raises Fault_IllegalInstruction before block state changes.","Missing, duplicate, or non-Matrix B.FPATR use raises Fault_BundleControl before allocation or payload effects.","Illegal types, dimensions, masks, binding streams, descriptors, shapes, capacities, aliases, readiness, or postprocess values raise Fault_TileLegality before source snapshots and effects."],"field_contracts":{},"field_zero_meanings":{},"legality":["The carrier selects exactly CUBE Function 5 and TileOperation_TMATMUL_MX_BIAS.","Local A uses persistent CUBE_M16 or CUBE_M32, Local B uses persistent CUBE_N8, and D is newly allocated in A's M layout. M, N, and K are arbitrary positive values independent of per-PE TSize; when a Local Matrix-MX scale is required, its M/N major is at most 32 because Local scales use one-block CUBE_M32, while Shared scales remain ordinary Tiles. Bias uses Local CUBE_N8; it is a logical 1xN accumulator-type source (FP32 for MX) broadcast by logical output column. Each side uses group-32 E8M0 or HiF4X2 group-64 U32 scale; Local scales use CUBE_M32 and Shared scales remain ordinary Tiles.","A Shared primary must satisfy hardware-maintained whole-parent readiness and publication before payload access; fixed-quarter allocation or initialization masks are not a prerequisite. Any cooperative Local-A/Shared-B or Shared-A/Shared-B TMATMUL interprets LB0 as Core-total group_M in 1..128; Shared A has exact physical valid shape [group_M,K] with physical index m*pitch+k (K-major) for TransA=0 or [K,group_M] with physical index k*pitch+m (M-major) for TransA=1; Shared B has exact physical valid shape [N,K] with physical index n*pitch+k (K-major, ordinary dense column-major/DN-equivalent) for TransB=0 or [K,N] with physical index k*pitch+n (N-major, ordinary dense row-major) for TransB=1; physical columns may be legally padded, and PE i uses valid_M=clamp(group_M-i*M_per_PE,0,M_per_PE) with M_per_PE 16 for group_M<=64 and 32 for group_M>=65. TransA and TransB apply only to their corresponding Shared primary. Right-only Shared inherits Local A layout; all-Shared ACC inherits C layout; all-Shared non-ACC selects M16 through M=16 and M32 through M=32.","Each non-FP16/BF16 side requires its assigned scale: group-32 E8M0 for MX FP8/FP4 or group-64 U32 for HiF4X2. Bias uses one Local CUBE_N8 logical 1xN accumulator-type source (FP32 for MX), broadcast by logical output column. Published Shared operands may replace the right group or both matrix groups; supplementary operands and destinations remain Local.","Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects.","B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema.","For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D.","Cooperative Shared Matrix forms accept group_M in 1..128 and N/K in 1..65535 without power-of-two restrictions. Validate Local CUBE roles with existing descriptor and capacity rules; validate Shared roles against the original legal Shared descriptor and physical pitch. Internal read views preserve original pitch and use typed logical element/carrier/lane reads without a transient Local descriptor or 64 KiB capacity limit.","If any supported four-bit Shared primary is present (E2M1X2, E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such original parent physical columns pitch are even under every transpose combination. Valid M/group_M and N gain no parity restriction. This does not affect Local-only TMATMUL, TGEMV, generic Shared allocation, or Local packed A when Shared B is not packed.","Shared Matrix-MX ScaleA has exact stored-valid shape [group_M,G_A] and ScaleB [N,G_B], with each G equal to ceil(K/group_size) for its side (group-32 E8M0 or group-64 U32), independent of TransA/TransB; valid k selects floor(k/group_size)."],"memory_effects":["none"],"operands":[{"field":"destination0","role":"destination"},{"field":"source0","role":"left"},{"field":"source1","role":"row-scale"},{"field":"source2","role":"right"},{"field":"source3","role":"column-scale"},{"field":"source4","role":"bias"}],"ordering":["Complete schema, field, type, dimension, descriptor, shape, capacity, readiness, alias, and allocation preflight precedes every source snapshot and destination effect.","D and every enabled reduction output publish as one atomic group; rejection publishes none and successful sources persist.","Transparent-cache hints occur only after complete preflight and cannot alter source snapshots, D allocation or publication, faults, or numeric status."],"standalone_opcode":false,"state_effects":["Multiply scaled matrices and add the bias Tile.","After complete preflight, execute TMATMUL_MX_BIAS with the operand bindings listed above; destination definedness changes only as specified by that handler.","For Local execution, publish D with A's CUBE_M16 or CUBE_M32 layout and final output dtype; Bias uses Local CUBE_N8; RowMaxIn/Out and GroupMaxOut use the resolved M layout; vector quant/PReLU parameters use Local CUBE_N8/U64; MX scales keep their operation-owned layouts.","Successful Shared primary reads leave every Shared descriptor, mask, publication state, payload, and lifetime unchanged.","Always publish D; CCTRL[0]=1 publishes raw accumulator-type D and may hint cache replacement, while ACC CCTRL[1]=1 may hint cache use or prefetch of explicit C. Hint handling is not architecturally observable."]},"depends_on":["PTO-BLOCK-MODEL-SCHEMA-BUNDLE-ENCODING"],"engine":"CUBE","id":"PTO-TILE-TMATMUL-MX-BIAS","mnemonic":"TMATMUL_MX_BIAS","summary":"Multiply scaled matrices and add the bias Tile.","surface":"tile"} // PTO-REVIEW: {"review_method":"formal-definition-read","outcome":"FORMAL-COMPLETE","reviewed_fields":["assembly","encoding","defaults","operation","state","memory","ordering","faults","reserved"]} // NDF-BEGIN: PTO-TMATMUL-MX-BIAS-CONTRACT-001 // ndf: kind=contract level=L1 layer=tile status=accepted @@ -12,12 +12,28 @@ // [K,group_M] for TransA=1; Shared B MUST have exact physical valid shape // [N,K] for TransB=0 or [K,N] for TransB=1; physical columns MAY be padded // only within legal descriptor capacity. +// Cooperative Shared forms MUST use group_M in 1..128 and N/K in 1..65535; +// cooperative N/K MUST not have power-of-two restrictions. Validate Local +// CUBE roles with existing descriptor/capacity rules and Shared roles against +// the original legal Shared descriptors. Internal read views MUST preserve +// original pitch and typed logical element/carrier/lane mapping without a +// transient Local descriptor or 64 KiB capacity limit. +// If a supported packed-four-bit Shared primary is present (E2M1X2, +// E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such +// original parent physical `columns` pitch MUST be even under every +// transpose combination. Valid M/group_M and N have no added parity rule. +// This restriction MUST not affect Local-only TMATMUL, TGEMV, generic Shared +// allocation, or Local packed A when Shared B is not packed. // Each matrix side independently requires an E8M0 scale exactly when its MX // input type is not FP16 or BF16. Bias uses one Local CUBE_N8 logical 1xN accumulator-type source (FP32 for MX), broadcast by logical output column. Published Shared operands may replace the right group or both // matrix groups; supplementary operands and destinations remain Local. // Local A/B/C scales use one physical CUBE_M32 row block, so their valid major // dimension is at most 32; a Local B-scale with N>32 is illegal without a // replacement representation. Shared scales remain ordinary Tiles. +// For Shared Matrix-MX, ScaleA MUST have exact stored-valid shape +// [group_M,G_A] and ScaleB [N,G_B], where each G is ceil(K/group_size) +// for its own primary type (group-32 E8M0 or group-64 U32). Transpose MUST +// not change scale shape or indexing; each valid k selects floor(k/group_size). // Shared primaries MUST satisfy hardware-maintained whole-parent readiness and publication before payload access; fixed-quarter allocation or initialization masks are not prerequisites. // TransA/TransB MUST apply only to the corresponding Shared primary. Every // cooperative nonzero PE mask MUST be 1111; zero-row PEs MUST have no Local effect. diff --git a/asl/tile/model/execution/cube.asl b/asl/tile/model/execution/cube.asl index 68493a31e..081518b4d 100644 --- a/asl/tile/model/execution/cube.asl +++ b/asl/tile/model/execution/cube.asl @@ -65,8 +65,6 @@ begin c_scale, left_tile.valid_rows as integer {1..65535}); end; - let left_payload = left_tile.payload; - let right_payload = right_tile.payload; var result: TileInfo = destination_tile; result.contents_defined = FALSE; result.defined_elements = Zeros{PTO_MODEL_TILE_ELEMENTS}; @@ -87,12 +85,13 @@ begin row as integer {0..65535}, column as integer {0..65535}, c_scale, c_scale_present); for inner = 0 to left_tile.valid_columns - 1 looplimit 65536 do - let left_element = TileStorageIndex(left_tile, - row as integer {0..65535}, inner as integer {0..65535}); - let right_element = TileStorageIndex(right_tile, - inner as integer {0..65535}, column as integer {0..65535}); sum = TileProfileMatrixAccumulate(sum, - left_payload[[left_element]], right_payload[[right_element]], + MatrixReadLogicalElement(left_tile, + row as integer {0..65535}, + inner as integer {0..65535}), + MatrixReadLogicalElement(right_tile, + inner as integer {0..65535}, + column as integer {0..65535}), accumulator_data_type, left_tile.data_type, right_tile.data_type, control); end; @@ -188,10 +187,6 @@ begin c_scale, left_tile.valid_rows as integer {1..65535}); end; - let left_payload = left_tile.payload; - let right_payload = right_tile.payload; - let left_scale_payload = left_scale_tile.payload; - let right_scale_payload = right_scale_tile.payload; var result: TileInfo = destination_tile; result.contents_defined = FALSE; result.defined_elements = Zeros{PTO_MODEL_TILE_ELEMENTS}; @@ -207,10 +202,6 @@ begin row as integer {0..65535}, column as integer {0..65535}, c_scale, c_scale_present); for inner = 0 to left_tile.valid_columns - 1 looplimit 65536 do - let left_element = TileStorageIndex(left_tile, - row as integer {0..65535}, inner as integer {0..65535}); - let right_element = TileStorageIndex(right_tile, - inner as integer {0..65535}, column as integer {0..65535}); let left_scale_element = if left_scale_present then MatrixLeftScaleElement( left_scale_tile, left_tile.data_type, @@ -226,16 +217,22 @@ begin else 0; let left_scale_value = if left_scale_present then - left_scale_payload[[left_scale_element]] + TileReadLogicalElement( + left_scale_tile, left_scale_element) else Zeros{PTO_XLEN}; let right_scale_value = if right_scale_present then - right_scale_payload[[right_scale_element]] + TileReadLogicalElement( + right_scale_tile, right_scale_element) else Zeros{PTO_XLEN}; sum = TileProfileMatrixScaledAccumulate( - sum, left_payload[[left_element]], - right_payload[[right_element]], + sum, MatrixReadLogicalElement(left_tile, + row as integer {0..65535}, + inner as integer {0..65535}), + MatrixReadLogicalElement(right_tile, + inner as integer {0..65535}, + column as integer {0..65535}), left_scale_value, right_scale_value, left_scale_present, right_scale_present, accumulator_data_type, left_tile.data_type, diff --git a/asl/tile/model/execution/matrix-scale.asl b/asl/tile/model/execution/matrix-scale.asl index a80f400cc..4d35cdb93 100644 --- a/asl/tile/model/execution/matrix-scale.asl +++ b/asl/tile/model/execution/matrix-scale.asl @@ -38,29 +38,38 @@ begin value, _Tiles[[c_scale]].payload[[scale_element]][7:0]); end; +readonly func MatrixReadLogicalElement( + tile: TileInfo, + row: integer {0..65535}, + column: integer {0..65535}) => Word +begin + let element = TileLogicalLinearIndex(tile, row, column); + return TileReadLogicalElement(tile, element); +end; + readonly func MatrixLeftScaleElement( scale: TileInfo, primary_type: TileDataType, row: integer {0..65535}, - inner: integer {0..65535}) => ModelTileElementIndex + inner: integer {0..65535}) => PackedTileElementIndex begin let group = (inner DIVRM TileMXScaleGroupSize(primary_type)) as integer {0..65535}; - return TileStorageIndex(scale, row, group); + return TileLogicalLinearIndex(scale, row, group); end; readonly func MatrixRightScaleElement( scale: TileInfo, primary_type: TileDataType, column: integer {0..65535}, - inner: integer {0..65535}) => ModelTileElementIndex + inner: integer {0..65535}) => PackedTileElementIndex begin let group = (inner DIVRM TileMXScaleGroupSize(primary_type)) as integer {0..65535}; if scale.layout == TileLayout_CUBE_M32 then - return TileStorageIndex(scale, column, group); + return TileLogicalLinearIndex(scale, column, group); end; - return TileStorageIndex(scale, group, column); + return TileLogicalLinearIndex(scale, group, column); end; func TileProfileMatrixAccumulate( diff --git a/asl/tile/model/legality/matrix-functions.asl b/asl/tile/model/legality/matrix-functions.asl index 49f34c378..caa6dc525 100644 --- a/asl/tile/model/legality/matrix-functions.asl +++ b/asl/tile/model/legality/matrix-functions.asl @@ -9,13 +9,15 @@ // be accepted only by Matrix-MX input roles; ordinary Matrix MUST not gain it. // Each Local scale MUST use one-block CUBE_M32 storage with a valid major no // greater than 32, while each Shared scale MUST remain an independently bound -// ordinary Tile with the corresponding primary location. -// For Shared Matrix-MX, ScaleA has semantic shape [M,G_A] and always uses -// the K-group-major physical shape [M,G_A]; ScaleB has semantic shape -// [G_B,N] and always uses the K-group-major physical shape [N,G_B]. -// TransA and TransB affect only the corresponding primary data operand; -// each physical shape is exact while physical columns MAY use legal capacity -// padding. +// ordinary Tile with the corresponding primary location. Shared ScaleA MUST +// have exact stored-valid shape [group_M,G_A] and ScaleB [N,G_B], where each G +// equals ceil(K/group_size) for its own primary type. TransA and TransB affect +// only their primary data operand; neither changes scale shape/indexing, and +// each valid k selects floor(k/group_size). Cooperative Shared Matrix-MX MUST +// accept positive bounded N/K without power-of-two restrictions. A supported +// packed-four-bit Shared primary requires even K and even original parent +// physical `columns` pitch under every transpose; M/group_M and N have no added +// parity rule. Local CUBE rules and generic Shared legality remain unchanged. // NDF-END: PTO-CUBE-MATRIX-SCALE-001 pure func TileMXInputTypeSupported(data_type: TileDataType) => boolean diff --git a/asl/tile/model/legality/matrix-shape.asl b/asl/tile/model/legality/matrix-shape.asl index ea34f3d7b..eb92bc732 100644 --- a/asl/tile/model/legality/matrix-shape.asl +++ b/asl/tile/model/legality/matrix-shape.asl @@ -73,8 +73,7 @@ begin if shared_count == 0 then return m != 0 && n != 0 && k != 0; end; - return m >= 1 && m <= 128 && IsNonzeroPowerOfTwo(n) && - IsNonzeroPowerOfTwo(k); + return m >= 1 && m <= 128 && n != 0 && k != 0; end; readonly func TileMatrixInfosMatchDimensions( diff --git a/docs/block/execution/BSTART.TMATMUL.ACC.md b/docs/block/execution/BSTART.TMATMUL.ACC.md index 573f9aa5c..ed7c0d642 100644 --- a/docs/block/execution/BSTART.TMATMUL.ACC.md +++ b/docs/block/execution/BSTART.TMATMUL.ACC.md @@ -282,6 +282,8 @@ end; - Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects. - B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema. - For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D. +- Cooperative Shared Matrix forms accept group_M in 1..128 and N/K in 1..65535 without power-of-two restrictions. Validate Local CUBE roles with existing descriptor and capacity rules; validate Shared roles against the original legal Shared descriptor and physical pitch. Internal read views preserve original pitch and use typed logical element/carrier/lane reads without a transient Local descriptor or 64 KiB capacity limit. +- If any supported four-bit Shared primary is present (E2M1X2, E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such original parent physical columns pitch are even under every transpose combination. Valid M/group_M and N gain no parity restriction. This does not affect Local-only TMATMUL, TGEMV, generic Shared allocation, or Local packed A when Shared B is not packed. ## State effects diff --git a/docs/block/execution/BSTART.TMATMUL.BIAS.md b/docs/block/execution/BSTART.TMATMUL.BIAS.md index 1b154d5a1..ff4289f5d 100644 --- a/docs/block/execution/BSTART.TMATMUL.BIAS.md +++ b/docs/block/execution/BSTART.TMATMUL.BIAS.md @@ -280,6 +280,8 @@ end; - Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects. - B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema. - For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D. +- Cooperative Shared Matrix forms accept group_M in 1..128 and N/K in 1..65535 without power-of-two restrictions. Validate Local CUBE roles with existing descriptor and capacity rules; validate Shared roles against the original legal Shared descriptor and physical pitch. Internal read views preserve original pitch and use typed logical element/carrier/lane reads without a transient Local descriptor or 64 KiB capacity limit. +- If any supported four-bit Shared primary is present (E2M1X2, E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such original parent physical columns pitch are even under every transpose combination. Valid M/group_M and N gain no parity restriction. This does not affect Local-only TMATMUL, TGEMV, generic Shared allocation, or Local packed A when Shared B is not packed. ## State effects diff --git a/docs/block/execution/BSTART.TMATMUL.md b/docs/block/execution/BSTART.TMATMUL.md index 0ed1ee29b..831db8967 100644 --- a/docs/block/execution/BSTART.TMATMUL.md +++ b/docs/block/execution/BSTART.TMATMUL.md @@ -277,6 +277,8 @@ end; - Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects. - B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema. - For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D. +- Cooperative Shared Matrix forms accept group_M in 1..128 and N/K in 1..65535 without power-of-two restrictions. Validate Local CUBE roles with existing descriptor and capacity rules; validate Shared roles against the original legal Shared descriptor and physical pitch. Internal read views preserve original pitch and use typed logical element/carrier/lane reads without a transient Local descriptor or 64 KiB capacity limit. +- If any supported four-bit Shared primary is present (E2M1X2, E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such original parent physical columns pitch are even under every transpose combination. Valid M/group_M and N gain no parity restriction. This does not affect Local-only TMATMUL, TGEMV, generic Shared allocation, or Local packed A when Shared B is not packed. ## State effects diff --git a/docs/block/execution/BSTART.TMATMULMX.ACC.md b/docs/block/execution/BSTART.TMATMULMX.ACC.md index 904fc0779..b92559f9f 100644 --- a/docs/block/execution/BSTART.TMATMULMX.ACC.md +++ b/docs/block/execution/BSTART.TMATMULMX.ACC.md @@ -285,6 +285,9 @@ end; - Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects. - B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema. - For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D. +- Cooperative Shared Matrix forms accept group_M in 1..128 and N/K in 1..65535 without power-of-two restrictions. Validate Local CUBE roles with existing descriptor and capacity rules; validate Shared roles against the original legal Shared descriptor and physical pitch. Internal read views preserve original pitch and use typed logical element/carrier/lane reads without a transient Local descriptor or 64 KiB capacity limit. +- If any supported four-bit Shared primary is present (E2M1X2, E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such original parent physical columns pitch are even under every transpose combination. Valid M/group_M and N gain no parity restriction. This does not affect Local-only TMATMUL, TGEMV, generic Shared allocation, or Local packed A when Shared B is not packed. +- Shared Matrix-MX ScaleA has exact stored-valid shape [group_M,G_A] and ScaleB [N,G_B], with each G equal to ceil(K/group_size) for its side (group-32 E8M0 or group-64 U32), independent of TransA/TransB; valid k selects floor(k/group_size). ## State effects diff --git a/docs/block/execution/BSTART.TMATMULMX.BIAS.md b/docs/block/execution/BSTART.TMATMULMX.BIAS.md index 568aa10e0..b21230bcf 100644 --- a/docs/block/execution/BSTART.TMATMULMX.BIAS.md +++ b/docs/block/execution/BSTART.TMATMULMX.BIAS.md @@ -283,6 +283,9 @@ end; - Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects. - B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema. - For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D. +- Cooperative Shared Matrix forms accept group_M in 1..128 and N/K in 1..65535 without power-of-two restrictions. Validate Local CUBE roles with existing descriptor and capacity rules; validate Shared roles against the original legal Shared descriptor and physical pitch. Internal read views preserve original pitch and use typed logical element/carrier/lane reads without a transient Local descriptor or 64 KiB capacity limit. +- If any supported four-bit Shared primary is present (E2M1X2, E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such original parent physical columns pitch are even under every transpose combination. Valid M/group_M and N gain no parity restriction. This does not affect Local-only TMATMUL, TGEMV, generic Shared allocation, or Local packed A when Shared B is not packed. +- Shared Matrix-MX ScaleA has exact stored-valid shape [group_M,G_A] and ScaleB [N,G_B], with each G equal to ceil(K/group_size) for its side (group-32 E8M0 or group-64 U32), independent of TransA/TransB; valid k selects floor(k/group_size). ## State effects diff --git a/docs/block/execution/BSTART.TMATMULMX.md b/docs/block/execution/BSTART.TMATMULMX.md index 30bf57b1f..3d60810c1 100644 --- a/docs/block/execution/BSTART.TMATMULMX.md +++ b/docs/block/execution/BSTART.TMATMULMX.md @@ -280,6 +280,9 @@ end; - Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects. - B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema. - For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D. +- Cooperative Shared Matrix forms accept group_M in 1..128 and N/K in 1..65535 without power-of-two restrictions. Validate Local CUBE roles with existing descriptor and capacity rules; validate Shared roles against the original legal Shared descriptor and physical pitch. Internal read views preserve original pitch and use typed logical element/carrier/lane reads without a transient Local descriptor or 64 KiB capacity limit. +- If any supported four-bit Shared primary is present (E2M1X2, E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such original parent physical columns pitch are even under every transpose combination. Valid M/group_M and N gain no parity restriction. This does not affect Local-only TMATMUL, TGEMV, generic Shared allocation, or Local packed A when Shared B is not packed. +- Shared Matrix-MX ScaleA has exact stored-valid shape [group_M,G_A] and ScaleB [N,G_B], with each G equal to ceil(K/group_size) for its side (group-32 E8M0 or group-64 U32), independent of TransA/TransB; valid k selects floor(k/group_size). ## State effects diff --git a/docs/block/model/dispatch/cube-tmatmul.md b/docs/block/model/dispatch/cube-tmatmul.md index 44e240d94..05b4c21d6 100644 --- a/docs/block/model/dispatch/cube-tmatmul.md +++ b/docs/block/model/dispatch/cube-tmatmul.md @@ -503,34 +503,37 @@ begin shared_ordinal = (shared_ordinal + 1) as integer {0..4}; end; end; - if TileMatrixFunctionUsesBias(function) then bias = BundleMatrixSourceAt( local_ordinal as integer {0..8}); local_ordinal = (local_ordinal + 1) as integer {0..6}; end; - if _BundleFixedPointAttributes.c_scale_en then c_scale = BundleMatrixSourceAt( local_ordinal as integer {0..8}); end; - let right_group = TileMatrixRightGroupSourceCount( function, right_type); + let left_shared = shared_count != 0 && shared_count != right_group; let shape_legal = if shared_count == 0 then TileMatrixCubeInfosMatchDimensions(left, right, pe_m, n, k) - else if shared_count == right_group then - TileMatrixMixedInfosMatchDimensions(left, right, pe_m, n, k) else - TileMatrixInfosMatchDimensions(left, right, pe_m, n, k); + BundleMatrixCooperativeInfosMatchDimensions( + left, right, pe_m, n, k, left_shared, + left_type, right_type); let operand_types_legal = left.data_type == left_type && right.data_type == right_type; let scales_legal = !TileMatrixFunctionUsesMX(function) || - TileMatrixInfoOptionalScalesLegal( - left, left_scale, left_scale_present, - right, right_scale, right_scale_present); + if shared_count == 0 then + TileMatrixInfoOptionalScalesLegal( + left, left_scale, left_scale_present, + right, right_scale, right_scale_present) + else + BundleMatrixCooperativeScalesLegal( + left, left_scale, left_scale_present, left_shared, + right, right_scale, right_scale_present, + left_type, right_type); assert shape_legal && operand_types_legal && scales_legal; - let accumulator_legal = !TileMatrixFunctionUsesAccumulator(function) || TileMatrixLocalCubeAccumulatorSchemaLegal( accumulator, pe_m, n, result_type, primary_layout, diff --git a/docs/block/model/dispatch/matrix-scale.md b/docs/block/model/dispatch/matrix-scale.md index 9143aed6a..39272b735 100644 --- a/docs/block/model/dispatch/matrix-scale.md +++ b/docs/block/model/dispatch/matrix-scale.md @@ -75,7 +75,7 @@ The accumulator `C` is `T#1`, the left matrix is `T#2`, the right matrix is `T#3 ```asl -// PTO-UNIT: {"id":"PTO-BLOCK-MODEL-DISPATCH-MATRIX-SCALE","surface":"block","classification":["model","dispatch","matrix-scale"],"depends_on":["PTO-TILE-MODEL-LEGALITY-MATRIX-POSTPROCESS"]} +// PTO-UNIT: {"id":"PTO-BLOCK-MODEL-DISPATCH-MATRIX-SCALE","surface":"block","classification":["model","dispatch","matrix-scale"],"depends_on":["PTO-BLOCK-MODEL-DISPATCH-SHARED-CUBE-MATRIX","PTO-TILE-MODEL-LEGALITY-MATRIX-FUNCTIONS","PTO-TILE-MODEL-LEGALITY-MATRIX-POSTPROCESS"]} readonly func BundleMatrixCScaleDestinationIndicesDistinct( c_scale_ordinal: integer {0..8}) => boolean @@ -90,5 +90,73 @@ begin end; return TRUE; end; + +readonly func BundleMatrixCooperativeInfosMatchDimensions( + left: TileInfo, + right: TileInfo, + m: integer {1..65535}, + n: integer {1..65535}, + k: integer {1..65535}, + left_shared: boolean, + left_type: TileDataType, + right_type: TileDataType) => boolean +begin + let left_legal = if left_shared then + BundleMatrixPrivateSharedViewLegal( + left, m, k, left_type, FALSE) + else + TileCubeDescriptorLegal(left) && left.contents_defined && + left.valid_rows == m && left.valid_columns == k; + return left_legal && BundleMatrixPrivateSharedViewLegal( + right, k, n, right_type, TRUE); +end; + +readonly func BundleMatrixCooperativeScalesLegal( + left: TileInfo, + left_scale: TileInfo, + left_scale_present: boolean, + left_scale_shared: boolean, + right: TileInfo, + right_scale: TileInfo, + right_scale_present: boolean, + left_type: TileDataType, + right_type: TileDataType) => boolean +begin + if !TileMXOperandPairLegal(left_type, right_type) || + left_scale_present != TileMXInputTypeNeedsScale(left_type) || + right_scale_present != TileMXInputTypeNeedsScale(right_type) then + return FALSE; + end; + let left_groups = if left_scale_present then + TileMXScaleGroupCount( + left.valid_columns as integer {1..65535}, left_type) + else 1; + let right_groups = if right_scale_present then + TileMXScaleGroupCount( + left.valid_columns as integer {1..65535}, right_type) + else 1; + let left_scale_type = if left_scale_present then + TileMXScaleCarrierType(left_type) else left_type; + let right_scale_type = if right_scale_present then + TileMXScaleCarrierType(right_type) else right_type; + let left_scale_legal = !left_scale_present || + (left_scale_shared && BundleMatrixPrivateSharedViewLegal( + left_scale, left.valid_rows as integer {1..65535}, + left_groups, left_scale_type, FALSE)) || + (!left_scale_shared && + ((left_scale.layout == TileLayout_CUBE_M32 && + TileCubeDescriptorLegal(left_scale)) || + (left_scale.layout == TileLayout_RowMajor && + TileInfoDescriptorLegal(left_scale))) && + left_scale.data_type == left_scale_type && + left_scale.valid_rows == left.valid_rows && + left_scale.valid_columns == left_groups); + let right_scale_legal = !right_scale_present || + BundleMatrixPrivateSharedViewLegal( + right_scale, right_groups, + right.valid_columns as integer {1..65535}, + right_scale_type, FALSE); + return left_scale_legal && right_scale_legal; +end; ``` diff --git a/docs/block/model/dispatch/shared-cube-matrix.md b/docs/block/model/dispatch/shared-cube-matrix.md index e24cc367c..c5232556a 100644 --- a/docs/block/model/dispatch/shared-cube-matrix.md +++ b/docs/block/model/dispatch/shared-cube-matrix.md @@ -83,7 +83,6 @@ PE3 consumes the Shared bindings and allocates nothing. PE0 to PE2 use `CUBE_M16 ```asl // PTO-UNIT: {"id":"PTO-BLOCK-MODEL-DISPATCH-SHARED-CUBE-MATRIX","surface":"block","classification":["model","dispatch","shared-cube-matrix"],"depends_on":["PTO-BLOCK-MODEL-OPERANDS-SHARED-GENERATION","PTO-TILE-MODEL-LEGALITY-MATRIX-FUNCTIONS","PTO-TILE-MODEL-STATE-SHARED-REGISTERS"]} - readonly func BundleMatrixSharedSourceSchemaLegal( ordinal: integer {0..3}, valid_rows: integer {1..65535}, @@ -114,10 +113,11 @@ begin shared.tile.valid_rows == valid_rows && shared.tile.valid_columns == valid_columns && shared.tile.columns >= columns && + (!TileDataTypeIsFourBit(data_type) || + shared.tile.columns MOD 2 == 0) && shared.tile.data_type == data_type && shared.tile.layout == TileLayout_RowMajor; end; - // Matrix schema preflight derives Shared CELL views without reading payload. readonly func BundleSharedSubviewMatrixMetadataLegalForPE( binding: BundleSharedBindingIndex, pe_identity: MemoryAgentId, @@ -139,6 +139,9 @@ begin modifier.size_code as integer {1..12}); let element_bits = TileElementBits(parent.data_type); let bounded_columns = parent.columns as integer {1..65535}; + if TileDataTypeIsFourBit(data_type) && bounded_columns MOD 2 != 0 then + return FALSE; + end; let raw_offset = UInt(BundleSharedSubviewOffsetRawForPE( binding, pe_identity)); if raw_offset > 2047 then return FALSE; end; @@ -179,7 +182,6 @@ begin return clipped_rows == valid_rows && clipped_columns == valid_columns && selected_columns >= minimum_columns; end; - readonly func BundleMatrixSharedSourcesReady( shared_count: integer {0..4}) => boolean begin @@ -194,7 +196,6 @@ begin end; return TRUE; end; - readonly func BundleMatrixSharedPrimarySchemaLegal( ordinal: integer {0..3}, logical_rows: integer {1..65535}, @@ -208,7 +209,6 @@ begin ordinal, stored_rows, stored_columns, stored_columns, data_type); end; - readonly func BundleMatrixSharedBPrimarySchemaLegal( ordinal: integer {0..3}, logical_rows: integer {1..65535}, @@ -232,7 +232,6 @@ begin else return 0; end; end; - pure func BundleMatrixCooperativeValidM( group_m: integer {1..65535}, pe_identity: MemoryAgentId) => integer {0..32} @@ -245,7 +244,6 @@ begin if remaining < m_per_pe then return remaining as integer {1..31}; end; return m_per_pe as integer {16,32}; end; - pure func BundleMatrixCooperativeCurrentPEMask( group_m: integer {1..65535}, pe_identity: MemoryAgentId) => bits(4) @@ -256,7 +254,6 @@ begin end; return mask; end; - readonly func BundleMatrixSharedLeftPrimarySchemaLegal( ordinal: integer {0..3}, group_m: integer {1..65535}, @@ -268,7 +265,6 @@ begin return BundleMatrixSharedPrimarySchemaLegal( ordinal, group_m, k, data_type, transpose); end; - readonly func BundleMatrixSharedSchemasLegal( function: integer {0..31}, left_type: TileDataType, @@ -293,11 +289,15 @@ begin let right_group = TileMatrixRightGroupSourceCount( function, right_type); let left_shared = shared_count != right_group; + if !TileMatrixFunctionIsGEMV(function) && + ((left_shared && TileDataTypeIsFourBit(left_type)) || + TileDataTypeIsFourBit(right_type)) && k MOD 2 != 0 then + return FALSE; + end; if _BundleFixedPointAttributes.trans_a && !left_shared then return FALSE; end; var ordinal: integer {0..4} = 0; - if left_shared then if !BundleMatrixSharedLeftPrimarySchemaLegal( ordinal as integer {0..3}, @@ -316,7 +316,6 @@ begin ordinal = (ordinal + 1) as integer {0..4}; end; end; - if !BundleMatrixSharedBPrimarySchemaLegal( ordinal as integer {0..3}, k, n, right_type, @@ -335,6 +334,25 @@ begin end; return ordinal == shared_count; end; +readonly func BundleMatrixPrivateSharedViewLegal( + tile: TileInfo, + rows: integer {1..65535}, + columns: integer {1..65535}, + data_type: TileDataType, + allow_column_major_packed: boolean) => boolean +begin + return tile.allocated && tile.contents_defined && + SharedTileCapacityIsLegal(tile.capacity_bytes) && + (tile.layout == TileLayout_RowMajor || + (allow_column_major_packed && + tile.layout == TileLayout_ColumnMajor && + TileDataTypeIsFourBit(data_type))) && + tile.rows == rows && tile.columns == columns && + tile.valid_rows == rows && tile.valid_columns == columns && + tile.data_type == data_type && + rows * columns <= TileLogicalElementCapacity( + tile.capacity_bytes, data_type); +end; readonly func MaterializeBundleSharedMatrixLeftPrimary( ordinal: integer {0..3}, @@ -354,14 +372,14 @@ begin let shared_tile_id = BundleSharedBindingId(ordinal); let source = if _BundleSharedBindings[[ordinal]].source0_subview.valid then - MaterializeBundleSharedSubview(ordinal) + MaterializeBundleSharedSubviewForPE(ordinal, pe_identity) else SharedTileRecord(shared_tile_id).tile; var tile = source; tile.contents_defined = FALSE; tile.defined_elements = Zeros{PTO_MODEL_TILE_ELEMENTS}; tile.packed_defined_elements = zero_packed_tile_elements; tile.defined_valid_elements = 0; - tile.rows = DerivedTileRows(tile.capacity_bytes, k, data_type); + tile.rows = pe_m; tile.columns = k; tile.valid_rows = pe_m; tile.valid_columns = k; @@ -394,7 +412,6 @@ begin tile.defined_valid_elements = (pe_m * k) as integer {0..524288}; return tile; end; - readonly func MaterializeBundleSharedMatrixLeftScale( ordinal: integer {0..3}, group_m: integer {1..65535}, @@ -412,7 +429,7 @@ begin let shared_tile_id = BundleSharedBindingId(ordinal); let source = if _BundleSharedBindings[[ordinal]].source0_subview.valid then - MaterializeBundleSharedSubview(ordinal) + MaterializeBundleSharedSubviewForPE(ordinal, pe_identity) else SharedTileRecord(shared_tile_id).tile; assert BundleMatrixSharedPrimarySchemaLegal( ordinal, group_m, scale_groups, scale_type, FALSE); @@ -421,8 +438,7 @@ begin tile.defined_elements = Zeros{PTO_MODEL_TILE_ELEMENTS}; tile.packed_defined_elements = zero_packed_tile_elements; tile.defined_valid_elements = 0; - tile.rows = DerivedTileRows( - tile.capacity_bytes, scale_groups, scale_type); + tile.rows = pe_m; tile.columns = scale_groups; tile.valid_rows = pe_m; tile.valid_columns = scale_groups; @@ -455,7 +471,6 @@ begin (pe_m * scale_groups) as integer {0..524288}; return tile; end; - readonly func MaterializeBundleSharedMatrixSource( ordinal: integer {0..3}, valid_rows: integer {1..65535}, @@ -481,7 +496,6 @@ begin (valid_rows * valid_columns) as integer {0..524288}; return tile; end; - readonly func MaterializeBundleSharedMatrixPrimary( ordinal: integer {0..3}, logical_rows: integer {1..65535}, @@ -503,14 +517,15 @@ begin tile.defined_elements = Zeros{PTO_MODEL_TILE_ELEMENTS}; tile.packed_defined_elements = zero_packed_tile_elements; tile.defined_valid_elements = 0; - tile.rows = DerivedTileRows( - tile.capacity_bytes, logical_columns, data_type); + tile.rows = logical_rows; tile.columns = logical_columns; tile.valid_rows = logical_rows; tile.valid_columns = logical_columns; tile.data_type = data_type; tile.predicate_basis_type = data_type; - tile.layout = TileLayout_RowMajor; + // Four-bit right primaries use dense ColumnMajor private views; source pitches stay architectural. + tile.layout = if TileDataTypeIsFourBit(data_type) then + TileLayout_ColumnMajor else TileLayout_RowMajor; tile.cube_k_repeat = 0; tile.cube_n_repeat = 0; tile.cube_cell_count = 0; @@ -536,7 +551,6 @@ begin (logical_rows * logical_columns) as integer {0..524288}; return tile; end; - readonly func BundleMatrixCooperativeMLayout( function: integer {0..31}, right_type: TileDataType, diff --git a/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/block/execution/BSTART.TMATMUL.ACC.md b/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/block/execution/BSTART.TMATMUL.ACC.md index 2183d480f..676423d21 100644 --- a/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/block/execution/BSTART.TMATMUL.ACC.md +++ b/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/block/execution/BSTART.TMATMUL.ACC.md @@ -282,6 +282,8 @@ end; - Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects. - B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema. - For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D. +- Cooperative Shared Matrix forms accept group_M in 1..128 and N/K in 1..65535 without power-of-two restrictions. Validate Local CUBE roles with existing descriptor and capacity rules; validate Shared roles against the original legal Shared descriptor and physical pitch. Internal read views preserve original pitch and use typed logical element/carrier/lane reads without a transient Local descriptor or 64 KiB capacity limit. +- If any supported four-bit Shared primary is present (E2M1X2, E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such original parent physical columns pitch are even under every transpose combination. Valid M/group_M and N gain no parity restriction. This does not affect Local-only TMATMUL, TGEMV, generic Shared allocation, or Local packed A when Shared B is not packed. ## State effects diff --git a/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/block/execution/BSTART.TMATMUL.BIAS.md b/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/block/execution/BSTART.TMATMUL.BIAS.md index ea1f47225..19205d58f 100644 --- a/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/block/execution/BSTART.TMATMUL.BIAS.md +++ b/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/block/execution/BSTART.TMATMUL.BIAS.md @@ -280,6 +280,8 @@ end; - Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects. - B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema. - For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D. +- Cooperative Shared Matrix forms accept group_M in 1..128 and N/K in 1..65535 without power-of-two restrictions. Validate Local CUBE roles with existing descriptor and capacity rules; validate Shared roles against the original legal Shared descriptor and physical pitch. Internal read views preserve original pitch and use typed logical element/carrier/lane reads without a transient Local descriptor or 64 KiB capacity limit. +- If any supported four-bit Shared primary is present (E2M1X2, E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such original parent physical columns pitch are even under every transpose combination. Valid M/group_M and N gain no parity restriction. This does not affect Local-only TMATMUL, TGEMV, generic Shared allocation, or Local packed A when Shared B is not packed. ## State effects diff --git a/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/block/execution/BSTART.TMATMUL.md b/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/block/execution/BSTART.TMATMUL.md index 33e2f0e51..bb5e76d13 100644 --- a/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/block/execution/BSTART.TMATMUL.md +++ b/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/block/execution/BSTART.TMATMUL.md @@ -277,6 +277,8 @@ end; - Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects. - B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema. - For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D. +- Cooperative Shared Matrix forms accept group_M in 1..128 and N/K in 1..65535 without power-of-two restrictions. Validate Local CUBE roles with existing descriptor and capacity rules; validate Shared roles against the original legal Shared descriptor and physical pitch. Internal read views preserve original pitch and use typed logical element/carrier/lane reads without a transient Local descriptor or 64 KiB capacity limit. +- If any supported four-bit Shared primary is present (E2M1X2, E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such original parent physical columns pitch are even under every transpose combination. Valid M/group_M and N gain no parity restriction. This does not affect Local-only TMATMUL, TGEMV, generic Shared allocation, or Local packed A when Shared B is not packed. ## State effects diff --git a/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/block/execution/BSTART.TMATMULMX.ACC.md b/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/block/execution/BSTART.TMATMULMX.ACC.md index ef5eafe16..8a77245b4 100644 --- a/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/block/execution/BSTART.TMATMULMX.ACC.md +++ b/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/block/execution/BSTART.TMATMULMX.ACC.md @@ -285,6 +285,9 @@ end; - Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects. - B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema. - For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D. +- Cooperative Shared Matrix forms accept group_M in 1..128 and N/K in 1..65535 without power-of-two restrictions. Validate Local CUBE roles with existing descriptor and capacity rules; validate Shared roles against the original legal Shared descriptor and physical pitch. Internal read views preserve original pitch and use typed logical element/carrier/lane reads without a transient Local descriptor or 64 KiB capacity limit. +- If any supported four-bit Shared primary is present (E2M1X2, E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such original parent physical columns pitch are even under every transpose combination. Valid M/group_M and N gain no parity restriction. This does not affect Local-only TMATMUL, TGEMV, generic Shared allocation, or Local packed A when Shared B is not packed. +- Shared Matrix-MX ScaleA has exact stored-valid shape [group_M,G_A] and ScaleB [N,G_B], with each G equal to ceil(K/group_size) for its side (group-32 E8M0 or group-64 U32), independent of TransA/TransB; valid k selects floor(k/group_size). ## State effects diff --git a/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/block/execution/BSTART.TMATMULMX.BIAS.md b/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/block/execution/BSTART.TMATMULMX.BIAS.md index f259b050c..e046a7223 100644 --- a/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/block/execution/BSTART.TMATMULMX.BIAS.md +++ b/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/block/execution/BSTART.TMATMULMX.BIAS.md @@ -283,6 +283,9 @@ end; - Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects. - B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema. - For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D. +- Cooperative Shared Matrix forms accept group_M in 1..128 and N/K in 1..65535 without power-of-two restrictions. Validate Local CUBE roles with existing descriptor and capacity rules; validate Shared roles against the original legal Shared descriptor and physical pitch. Internal read views preserve original pitch and use typed logical element/carrier/lane reads without a transient Local descriptor or 64 KiB capacity limit. +- If any supported four-bit Shared primary is present (E2M1X2, E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such original parent physical columns pitch are even under every transpose combination. Valid M/group_M and N gain no parity restriction. This does not affect Local-only TMATMUL, TGEMV, generic Shared allocation, or Local packed A when Shared B is not packed. +- Shared Matrix-MX ScaleA has exact stored-valid shape [group_M,G_A] and ScaleB [N,G_B], with each G equal to ceil(K/group_size) for its side (group-32 E8M0 or group-64 U32), independent of TransA/TransB; valid k selects floor(k/group_size). ## State effects diff --git a/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/block/execution/BSTART.TMATMULMX.md b/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/block/execution/BSTART.TMATMULMX.md index 5190e834f..77ce1e416 100644 --- a/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/block/execution/BSTART.TMATMULMX.md +++ b/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/block/execution/BSTART.TMATMULMX.md @@ -280,6 +280,9 @@ end; - Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects. - B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema. - For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D. +- Cooperative Shared Matrix forms accept group_M in 1..128 and N/K in 1..65535 without power-of-two restrictions. Validate Local CUBE roles with existing descriptor and capacity rules; validate Shared roles against the original legal Shared descriptor and physical pitch. Internal read views preserve original pitch and use typed logical element/carrier/lane reads without a transient Local descriptor or 64 KiB capacity limit. +- If any supported four-bit Shared primary is present (E2M1X2, E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such original parent physical columns pitch are even under every transpose combination. Valid M/group_M and N gain no parity restriction. This does not affect Local-only TMATMUL, TGEMV, generic Shared allocation, or Local packed A when Shared B is not packed. +- Shared Matrix-MX ScaleA has exact stored-valid shape [group_M,G_A] and ScaleB [N,G_B], with each G equal to ceil(K/group_size) for its side (group-32 E8M0 or group-64 U32), independent of TransA/TransB; valid k selects floor(k/group_size). ## State effects diff --git a/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/block/model/dispatch/cube-tmatmul.md b/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/block/model/dispatch/cube-tmatmul.md index e9ff749bd..3ae155fba 100644 --- a/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/block/model/dispatch/cube-tmatmul.md +++ b/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/block/model/dispatch/cube-tmatmul.md @@ -503,34 +503,37 @@ begin shared_ordinal = (shared_ordinal + 1) as integer {0..4}; end; end; - if TileMatrixFunctionUsesBias(function) then bias = BundleMatrixSourceAt( local_ordinal as integer {0..8}); local_ordinal = (local_ordinal + 1) as integer {0..6}; end; - if _BundleFixedPointAttributes.c_scale_en then c_scale = BundleMatrixSourceAt( local_ordinal as integer {0..8}); end; - let right_group = TileMatrixRightGroupSourceCount( function, right_type); + let left_shared = shared_count != 0 && shared_count != right_group; let shape_legal = if shared_count == 0 then TileMatrixCubeInfosMatchDimensions(left, right, pe_m, n, k) - else if shared_count == right_group then - TileMatrixMixedInfosMatchDimensions(left, right, pe_m, n, k) else - TileMatrixInfosMatchDimensions(left, right, pe_m, n, k); + BundleMatrixCooperativeInfosMatchDimensions( + left, right, pe_m, n, k, left_shared, + left_type, right_type); let operand_types_legal = left.data_type == left_type && right.data_type == right_type; let scales_legal = !TileMatrixFunctionUsesMX(function) || - TileMatrixInfoOptionalScalesLegal( - left, left_scale, left_scale_present, - right, right_scale, right_scale_present); + if shared_count == 0 then + TileMatrixInfoOptionalScalesLegal( + left, left_scale, left_scale_present, + right, right_scale, right_scale_present) + else + BundleMatrixCooperativeScalesLegal( + left, left_scale, left_scale_present, left_shared, + right, right_scale, right_scale_present, + left_type, right_type); assert shape_legal && operand_types_legal && scales_legal; - let accumulator_legal = !TileMatrixFunctionUsesAccumulator(function) || TileMatrixLocalCubeAccumulatorSchemaLegal( accumulator, pe_m, n, result_type, primary_layout, diff --git a/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/block/model/dispatch/matrix-scale.md b/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/block/model/dispatch/matrix-scale.md index e8ec5637d..d263c7aaf 100644 --- a/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/block/model/dispatch/matrix-scale.md +++ b/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/block/model/dispatch/matrix-scale.md @@ -75,7 +75,7 @@ TMATMUL_ACC , T#1, T#2, T#3, T#4, ->T<1KB> ```asl -// PTO-UNIT: {"id":"PTO-BLOCK-MODEL-DISPATCH-MATRIX-SCALE","surface":"block","classification":["model","dispatch","matrix-scale"],"depends_on":["PTO-TILE-MODEL-LEGALITY-MATRIX-POSTPROCESS"]} +// PTO-UNIT: {"id":"PTO-BLOCK-MODEL-DISPATCH-MATRIX-SCALE","surface":"block","classification":["model","dispatch","matrix-scale"],"depends_on":["PTO-BLOCK-MODEL-DISPATCH-SHARED-CUBE-MATRIX","PTO-TILE-MODEL-LEGALITY-MATRIX-FUNCTIONS","PTO-TILE-MODEL-LEGALITY-MATRIX-POSTPROCESS"]} readonly func BundleMatrixCScaleDestinationIndicesDistinct( c_scale_ordinal: integer {0..8}) => boolean @@ -90,5 +90,73 @@ begin end; return TRUE; end; + +readonly func BundleMatrixCooperativeInfosMatchDimensions( + left: TileInfo, + right: TileInfo, + m: integer {1..65535}, + n: integer {1..65535}, + k: integer {1..65535}, + left_shared: boolean, + left_type: TileDataType, + right_type: TileDataType) => boolean +begin + let left_legal = if left_shared then + BundleMatrixPrivateSharedViewLegal( + left, m, k, left_type, FALSE) + else + TileCubeDescriptorLegal(left) && left.contents_defined && + left.valid_rows == m && left.valid_columns == k; + return left_legal && BundleMatrixPrivateSharedViewLegal( + right, k, n, right_type, TRUE); +end; + +readonly func BundleMatrixCooperativeScalesLegal( + left: TileInfo, + left_scale: TileInfo, + left_scale_present: boolean, + left_scale_shared: boolean, + right: TileInfo, + right_scale: TileInfo, + right_scale_present: boolean, + left_type: TileDataType, + right_type: TileDataType) => boolean +begin + if !TileMXOperandPairLegal(left_type, right_type) || + left_scale_present != TileMXInputTypeNeedsScale(left_type) || + right_scale_present != TileMXInputTypeNeedsScale(right_type) then + return FALSE; + end; + let left_groups = if left_scale_present then + TileMXScaleGroupCount( + left.valid_columns as integer {1..65535}, left_type) + else 1; + let right_groups = if right_scale_present then + TileMXScaleGroupCount( + left.valid_columns as integer {1..65535}, right_type) + else 1; + let left_scale_type = if left_scale_present then + TileMXScaleCarrierType(left_type) else left_type; + let right_scale_type = if right_scale_present then + TileMXScaleCarrierType(right_type) else right_type; + let left_scale_legal = !left_scale_present || + (left_scale_shared && BundleMatrixPrivateSharedViewLegal( + left_scale, left.valid_rows as integer {1..65535}, + left_groups, left_scale_type, FALSE)) || + (!left_scale_shared && + ((left_scale.layout == TileLayout_CUBE_M32 && + TileCubeDescriptorLegal(left_scale)) || + (left_scale.layout == TileLayout_RowMajor && + TileInfoDescriptorLegal(left_scale))) && + left_scale.data_type == left_scale_type && + left_scale.valid_rows == left.valid_rows && + left_scale.valid_columns == left_groups); + let right_scale_legal = !right_scale_present || + BundleMatrixPrivateSharedViewLegal( + right_scale, right_groups, + right.valid_columns as integer {1..65535}, + right_scale_type, FALSE); + return left_scale_legal && right_scale_legal; +end; ``` diff --git a/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/block/model/dispatch/shared-cube-matrix.md b/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/block/model/dispatch/shared-cube-matrix.md index d54973a16..2cb618ecf 100644 --- a/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/block/model/dispatch/shared-cube-matrix.md +++ b/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/block/model/dispatch/shared-cube-matrix.md @@ -83,7 +83,6 @@ PE3 消费 Shared 绑定且不分配任何内容。PE0 到 PE2 使用 `CUBE_M16` ```asl // PTO-UNIT: {"id":"PTO-BLOCK-MODEL-DISPATCH-SHARED-CUBE-MATRIX","surface":"block","classification":["model","dispatch","shared-cube-matrix"],"depends_on":["PTO-BLOCK-MODEL-OPERANDS-SHARED-GENERATION","PTO-TILE-MODEL-LEGALITY-MATRIX-FUNCTIONS","PTO-TILE-MODEL-STATE-SHARED-REGISTERS"]} - readonly func BundleMatrixSharedSourceSchemaLegal( ordinal: integer {0..3}, valid_rows: integer {1..65535}, @@ -114,10 +113,11 @@ begin shared.tile.valid_rows == valid_rows && shared.tile.valid_columns == valid_columns && shared.tile.columns >= columns && + (!TileDataTypeIsFourBit(data_type) || + shared.tile.columns MOD 2 == 0) && shared.tile.data_type == data_type && shared.tile.layout == TileLayout_RowMajor; end; - // Matrix schema preflight derives Shared CELL views without reading payload. readonly func BundleSharedSubviewMatrixMetadataLegalForPE( binding: BundleSharedBindingIndex, pe_identity: MemoryAgentId, @@ -139,6 +139,9 @@ begin modifier.size_code as integer {1..12}); let element_bits = TileElementBits(parent.data_type); let bounded_columns = parent.columns as integer {1..65535}; + if TileDataTypeIsFourBit(data_type) && bounded_columns MOD 2 != 0 then + return FALSE; + end; let raw_offset = UInt(BundleSharedSubviewOffsetRawForPE( binding, pe_identity)); if raw_offset > 2047 then return FALSE; end; @@ -179,7 +182,6 @@ begin return clipped_rows == valid_rows && clipped_columns == valid_columns && selected_columns >= minimum_columns; end; - readonly func BundleMatrixSharedSourcesReady( shared_count: integer {0..4}) => boolean begin @@ -194,7 +196,6 @@ begin end; return TRUE; end; - readonly func BundleMatrixSharedPrimarySchemaLegal( ordinal: integer {0..3}, logical_rows: integer {1..65535}, @@ -208,7 +209,6 @@ begin ordinal, stored_rows, stored_columns, stored_columns, data_type); end; - readonly func BundleMatrixSharedBPrimarySchemaLegal( ordinal: integer {0..3}, logical_rows: integer {1..65535}, @@ -232,7 +232,6 @@ begin else return 0; end; end; - pure func BundleMatrixCooperativeValidM( group_m: integer {1..65535}, pe_identity: MemoryAgentId) => integer {0..32} @@ -245,7 +244,6 @@ begin if remaining < m_per_pe then return remaining as integer {1..31}; end; return m_per_pe as integer {16,32}; end; - pure func BundleMatrixCooperativeCurrentPEMask( group_m: integer {1..65535}, pe_identity: MemoryAgentId) => bits(4) @@ -256,7 +254,6 @@ begin end; return mask; end; - readonly func BundleMatrixSharedLeftPrimarySchemaLegal( ordinal: integer {0..3}, group_m: integer {1..65535}, @@ -268,7 +265,6 @@ begin return BundleMatrixSharedPrimarySchemaLegal( ordinal, group_m, k, data_type, transpose); end; - readonly func BundleMatrixSharedSchemasLegal( function: integer {0..31}, left_type: TileDataType, @@ -293,11 +289,15 @@ begin let right_group = TileMatrixRightGroupSourceCount( function, right_type); let left_shared = shared_count != right_group; + if !TileMatrixFunctionIsGEMV(function) && + ((left_shared && TileDataTypeIsFourBit(left_type)) || + TileDataTypeIsFourBit(right_type)) && k MOD 2 != 0 then + return FALSE; + end; if _BundleFixedPointAttributes.trans_a && !left_shared then return FALSE; end; var ordinal: integer {0..4} = 0; - if left_shared then if !BundleMatrixSharedLeftPrimarySchemaLegal( ordinal as integer {0..3}, @@ -316,7 +316,6 @@ begin ordinal = (ordinal + 1) as integer {0..4}; end; end; - if !BundleMatrixSharedBPrimarySchemaLegal( ordinal as integer {0..3}, k, n, right_type, @@ -335,6 +334,25 @@ begin end; return ordinal == shared_count; end; +readonly func BundleMatrixPrivateSharedViewLegal( + tile: TileInfo, + rows: integer {1..65535}, + columns: integer {1..65535}, + data_type: TileDataType, + allow_column_major_packed: boolean) => boolean +begin + return tile.allocated && tile.contents_defined && + SharedTileCapacityIsLegal(tile.capacity_bytes) && + (tile.layout == TileLayout_RowMajor || + (allow_column_major_packed && + tile.layout == TileLayout_ColumnMajor && + TileDataTypeIsFourBit(data_type))) && + tile.rows == rows && tile.columns == columns && + tile.valid_rows == rows && tile.valid_columns == columns && + tile.data_type == data_type && + rows * columns <= TileLogicalElementCapacity( + tile.capacity_bytes, data_type); +end; readonly func MaterializeBundleSharedMatrixLeftPrimary( ordinal: integer {0..3}, @@ -354,14 +372,14 @@ begin let shared_tile_id = BundleSharedBindingId(ordinal); let source = if _BundleSharedBindings[[ordinal]].source0_subview.valid then - MaterializeBundleSharedSubview(ordinal) + MaterializeBundleSharedSubviewForPE(ordinal, pe_identity) else SharedTileRecord(shared_tile_id).tile; var tile = source; tile.contents_defined = FALSE; tile.defined_elements = Zeros{PTO_MODEL_TILE_ELEMENTS}; tile.packed_defined_elements = zero_packed_tile_elements; tile.defined_valid_elements = 0; - tile.rows = DerivedTileRows(tile.capacity_bytes, k, data_type); + tile.rows = pe_m; tile.columns = k; tile.valid_rows = pe_m; tile.valid_columns = k; @@ -394,7 +412,6 @@ begin tile.defined_valid_elements = (pe_m * k) as integer {0..524288}; return tile; end; - readonly func MaterializeBundleSharedMatrixLeftScale( ordinal: integer {0..3}, group_m: integer {1..65535}, @@ -412,7 +429,7 @@ begin let shared_tile_id = BundleSharedBindingId(ordinal); let source = if _BundleSharedBindings[[ordinal]].source0_subview.valid then - MaterializeBundleSharedSubview(ordinal) + MaterializeBundleSharedSubviewForPE(ordinal, pe_identity) else SharedTileRecord(shared_tile_id).tile; assert BundleMatrixSharedPrimarySchemaLegal( ordinal, group_m, scale_groups, scale_type, FALSE); @@ -421,8 +438,7 @@ begin tile.defined_elements = Zeros{PTO_MODEL_TILE_ELEMENTS}; tile.packed_defined_elements = zero_packed_tile_elements; tile.defined_valid_elements = 0; - tile.rows = DerivedTileRows( - tile.capacity_bytes, scale_groups, scale_type); + tile.rows = pe_m; tile.columns = scale_groups; tile.valid_rows = pe_m; tile.valid_columns = scale_groups; @@ -455,7 +471,6 @@ begin (pe_m * scale_groups) as integer {0..524288}; return tile; end; - readonly func MaterializeBundleSharedMatrixSource( ordinal: integer {0..3}, valid_rows: integer {1..65535}, @@ -481,7 +496,6 @@ begin (valid_rows * valid_columns) as integer {0..524288}; return tile; end; - readonly func MaterializeBundleSharedMatrixPrimary( ordinal: integer {0..3}, logical_rows: integer {1..65535}, @@ -503,14 +517,15 @@ begin tile.defined_elements = Zeros{PTO_MODEL_TILE_ELEMENTS}; tile.packed_defined_elements = zero_packed_tile_elements; tile.defined_valid_elements = 0; - tile.rows = DerivedTileRows( - tile.capacity_bytes, logical_columns, data_type); + tile.rows = logical_rows; tile.columns = logical_columns; tile.valid_rows = logical_rows; tile.valid_columns = logical_columns; tile.data_type = data_type; tile.predicate_basis_type = data_type; - tile.layout = TileLayout_RowMajor; + // Four-bit right primaries use dense ColumnMajor private views; source pitches stay architectural. + tile.layout = if TileDataTypeIsFourBit(data_type) then + TileLayout_ColumnMajor else TileLayout_RowMajor; tile.cube_k_repeat = 0; tile.cube_n_repeat = 0; tile.cube_cell_count = 0; @@ -536,7 +551,6 @@ begin (logical_rows * logical_columns) as integer {0..524288}; return tile; end; - readonly func BundleMatrixCooperativeMLayout( function: integer {0..31}, right_type: TileDataType, diff --git a/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL.md b/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL.md index 98263e4dd..14541cdf1 100644 --- a/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL.md +++ b/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL.md @@ -211,6 +211,8 @@ end; - Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects. - B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema. - For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D. +- Cooperative Shared Matrix forms accept group_M in 1..128 and N/K in 1..65535 without power-of-two restrictions. Validate Local CUBE roles with existing descriptor and capacity rules; validate Shared roles against the original legal Shared descriptor and physical pitch. Internal read views preserve original pitch and use typed logical element/carrier/lane reads without a transient Local descriptor or 64 KiB capacity limit. +- If any supported four-bit Shared primary is present (E2M1X2, E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such original parent physical columns pitch are even under every transpose combination. Valid M/group_M and N gain no parity restriction. This does not affect Local-only TMATMUL, TGEMV, generic Shared allocation, or Local packed A when Shared B is not packed. ## State effects diff --git a/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_ACC.md b/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_ACC.md index cca03b8e6..9a32a6bd8 100644 --- a/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_ACC.md +++ b/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_ACC.md @@ -223,6 +223,8 @@ end; - Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects. - B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema. - For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D. +- Cooperative Shared Matrix forms accept group_M in 1..128 and N/K in 1..65535 without power-of-two restrictions. Validate Local CUBE roles with existing descriptor and capacity rules; validate Shared roles against the original legal Shared descriptor and physical pitch. Internal read views preserve original pitch and use typed logical element/carrier/lane reads without a transient Local descriptor or 64 KiB capacity limit. +- If any supported four-bit Shared primary is present (E2M1X2, E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such original parent physical columns pitch are even under every transpose combination. Valid M/group_M and N gain no parity restriction. This does not affect Local-only TMATMUL, TGEMV, generic Shared allocation, or Local packed A when Shared B is not packed. ## State effects diff --git a/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_BIAS.md b/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_BIAS.md index 82d04eed4..909787012 100644 --- a/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_BIAS.md +++ b/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_BIAS.md @@ -219,6 +219,8 @@ end; - Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects. - B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema. - For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D. +- Cooperative Shared Matrix forms accept group_M in 1..128 and N/K in 1..65535 without power-of-two restrictions. Validate Local CUBE roles with existing descriptor and capacity rules; validate Shared roles against the original legal Shared descriptor and physical pitch. Internal read views preserve original pitch and use typed logical element/carrier/lane reads without a transient Local descriptor or 64 KiB capacity limit. +- If any supported four-bit Shared primary is present (E2M1X2, E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such original parent physical columns pitch are even under every transpose combination. Valid M/group_M and N gain no parity restriction. This does not affect Local-only TMATMUL, TGEMV, generic Shared allocation, or Local packed A when Shared B is not packed. ## State effects diff --git a/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX.md b/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX.md index dab02fa52..d4531e178 100644 --- a/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX.md +++ b/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX.md @@ -223,6 +223,9 @@ end; - Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects. - B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema. - For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D. +- Cooperative Shared Matrix forms accept group_M in 1..128 and N/K in 1..65535 without power-of-two restrictions. Validate Local CUBE roles with existing descriptor and capacity rules; validate Shared roles against the original legal Shared descriptor and physical pitch. Internal read views preserve original pitch and use typed logical element/carrier/lane reads without a transient Local descriptor or 64 KiB capacity limit. +- If any supported four-bit Shared primary is present (E2M1X2, E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such original parent physical columns pitch are even under every transpose combination. Valid M/group_M and N gain no parity restriction. This does not affect Local-only TMATMUL, TGEMV, generic Shared allocation, or Local packed A when Shared B is not packed. +- Shared Matrix-MX ScaleA has exact stored-valid shape [group_M,G_A] and ScaleB [N,G_B], with each G equal to ceil(K/group_size) for its side (group-32 E8M0 or group-64 U32), independent of TransA/TransB; valid k selects floor(k/group_size). ## State effects diff --git a/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX_ACC.md b/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX_ACC.md index aa2b1563d..ef67f0305 100644 --- a/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX_ACC.md +++ b/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX_ACC.md @@ -233,6 +233,9 @@ end; - Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects. - B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema. - For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D. +- Cooperative Shared Matrix forms accept group_M in 1..128 and N/K in 1..65535 without power-of-two restrictions. Validate Local CUBE roles with existing descriptor and capacity rules; validate Shared roles against the original legal Shared descriptor and physical pitch. Internal read views preserve original pitch and use typed logical element/carrier/lane reads without a transient Local descriptor or 64 KiB capacity limit. +- If any supported four-bit Shared primary is present (E2M1X2, E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such original parent physical columns pitch are even under every transpose combination. Valid M/group_M and N gain no parity restriction. This does not affect Local-only TMATMUL, TGEMV, generic Shared allocation, or Local packed A when Shared B is not packed. +- Shared Matrix-MX ScaleA has exact stored-valid shape [group_M,G_A] and ScaleB [N,G_B], with each G equal to ceil(K/group_size) for its side (group-32 E8M0 or group-64 U32), independent of TransA/TransB; valid k selects floor(k/group_size). ## State effects diff --git a/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX_BIAS.md b/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX_BIAS.md index 0601c5496..879f0825d 100644 --- a/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX_BIAS.md +++ b/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX_BIAS.md @@ -229,6 +229,9 @@ end; - Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects. - B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema. - For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D. +- Cooperative Shared Matrix forms accept group_M in 1..128 and N/K in 1..65535 without power-of-two restrictions. Validate Local CUBE roles with existing descriptor and capacity rules; validate Shared roles against the original legal Shared descriptor and physical pitch. Internal read views preserve original pitch and use typed logical element/carrier/lane reads without a transient Local descriptor or 64 KiB capacity limit. +- If any supported four-bit Shared primary is present (E2M1X2, E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such original parent physical columns pitch are even under every transpose combination. Valid M/group_M and N gain no parity restriction. This does not affect Local-only TMATMUL, TGEMV, generic Shared allocation, or Local packed A when Shared B is not packed. +- Shared Matrix-MX ScaleA has exact stored-valid shape [group_M,G_A] and ScaleB [N,G_B], with each G equal to ceil(K/group_size) for its side (group-32 E8M0 or group-64 U32), independent of TransA/TransB; valid k selects floor(k/group_size). ## State effects diff --git a/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/model/execution/cube.md b/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/model/execution/cube.md index 44535ec8b..f7e638c9c 100644 --- a/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/model/execution/cube.md +++ b/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/model/execution/cube.md @@ -151,8 +151,6 @@ begin c_scale, left_tile.valid_rows as integer {1..65535}); end; - let left_payload = left_tile.payload; - let right_payload = right_tile.payload; var result: TileInfo = destination_tile; result.contents_defined = FALSE; result.defined_elements = Zeros{PTO_MODEL_TILE_ELEMENTS}; @@ -173,12 +171,13 @@ begin row as integer {0..65535}, column as integer {0..65535}, c_scale, c_scale_present); for inner = 0 to left_tile.valid_columns - 1 looplimit 65536 do - let left_element = TileStorageIndex(left_tile, - row as integer {0..65535}, inner as integer {0..65535}); - let right_element = TileStorageIndex(right_tile, - inner as integer {0..65535}, column as integer {0..65535}); sum = TileProfileMatrixAccumulate(sum, - left_payload[[left_element]], right_payload[[right_element]], + MatrixReadLogicalElement(left_tile, + row as integer {0..65535}, + inner as integer {0..65535}), + MatrixReadLogicalElement(right_tile, + inner as integer {0..65535}, + column as integer {0..65535}), accumulator_data_type, left_tile.data_type, right_tile.data_type, control); end; @@ -274,10 +273,6 @@ begin c_scale, left_tile.valid_rows as integer {1..65535}); end; - let left_payload = left_tile.payload; - let right_payload = right_tile.payload; - let left_scale_payload = left_scale_tile.payload; - let right_scale_payload = right_scale_tile.payload; var result: TileInfo = destination_tile; result.contents_defined = FALSE; result.defined_elements = Zeros{PTO_MODEL_TILE_ELEMENTS}; @@ -293,10 +288,6 @@ begin row as integer {0..65535}, column as integer {0..65535}, c_scale, c_scale_present); for inner = 0 to left_tile.valid_columns - 1 looplimit 65536 do - let left_element = TileStorageIndex(left_tile, - row as integer {0..65535}, inner as integer {0..65535}); - let right_element = TileStorageIndex(right_tile, - inner as integer {0..65535}, column as integer {0..65535}); let left_scale_element = if left_scale_present then MatrixLeftScaleElement( left_scale_tile, left_tile.data_type, @@ -312,16 +303,22 @@ begin else 0; let left_scale_value = if left_scale_present then - left_scale_payload[[left_scale_element]] + TileReadLogicalElement( + left_scale_tile, left_scale_element) else Zeros{PTO_XLEN}; let right_scale_value = if right_scale_present then - right_scale_payload[[right_scale_element]] + TileReadLogicalElement( + right_scale_tile, right_scale_element) else Zeros{PTO_XLEN}; sum = TileProfileMatrixScaledAccumulate( - sum, left_payload[[left_element]], - right_payload[[right_element]], + sum, MatrixReadLogicalElement(left_tile, + row as integer {0..65535}, + inner as integer {0..65535}), + MatrixReadLogicalElement(right_tile, + inner as integer {0..65535}, + column as integer {0..65535}), left_scale_value, right_scale_value, left_scale_present, right_scale_present, accumulator_data_type, left_tile.data_type, diff --git a/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/model/execution/matrix-scale.md b/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/model/execution/matrix-scale.md index e98978021..c4075691f 100644 --- a/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/model/execution/matrix-scale.md +++ b/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/model/execution/matrix-scale.md @@ -119,29 +119,38 @@ begin value, _Tiles[[c_scale]].payload[[scale_element]][7:0]); end; +readonly func MatrixReadLogicalElement( + tile: TileInfo, + row: integer {0..65535}, + column: integer {0..65535}) => Word +begin + let element = TileLogicalLinearIndex(tile, row, column); + return TileReadLogicalElement(tile, element); +end; + readonly func MatrixLeftScaleElement( scale: TileInfo, primary_type: TileDataType, row: integer {0..65535}, - inner: integer {0..65535}) => ModelTileElementIndex + inner: integer {0..65535}) => PackedTileElementIndex begin let group = (inner DIVRM TileMXScaleGroupSize(primary_type)) as integer {0..65535}; - return TileStorageIndex(scale, row, group); + return TileLogicalLinearIndex(scale, row, group); end; readonly func MatrixRightScaleElement( scale: TileInfo, primary_type: TileDataType, column: integer {0..65535}, - inner: integer {0..65535}) => ModelTileElementIndex + inner: integer {0..65535}) => PackedTileElementIndex begin let group = (inner DIVRM TileMXScaleGroupSize(primary_type)) as integer {0..65535}; if scale.layout == TileLayout_CUBE_M32 then - return TileStorageIndex(scale, column, group); + return TileLogicalLinearIndex(scale, column, group); end; - return TileStorageIndex(scale, group, column); + return TileLogicalLinearIndex(scale, group, column); end; func TileProfileMatrixAccumulate( diff --git a/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/model/legality/matrix-functions.md b/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/model/legality/matrix-functions.md index dd7214a9b..8f16c9101 100644 --- a/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/model/legality/matrix-functions.md +++ b/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/model/legality/matrix-functions.md @@ -113,13 +113,15 @@ MX 输入是 FP16、BF16、E4M3、E5M2、E2M1X2、E1M2X2 或 HiF4X2 之一。FP1 // be accepted only by Matrix-MX input roles; ordinary Matrix MUST not gain it. // Each Local scale MUST use one-block CUBE_M32 storage with a valid major no // greater than 32, while each Shared scale MUST remain an independently bound -// ordinary Tile with the corresponding primary location. -// For Shared Matrix-MX, ScaleA has semantic shape [M,G_A] and always uses -// the K-group-major physical shape [M,G_A]; ScaleB has semantic shape -// [G_B,N] and always uses the K-group-major physical shape [N,G_B]. -// TransA and TransB affect only the corresponding primary data operand; -// each physical shape is exact while physical columns MAY use legal capacity -// padding. +// ordinary Tile with the corresponding primary location. Shared ScaleA MUST +// have exact stored-valid shape [group_M,G_A] and ScaleB [N,G_B], where each G +// equals ceil(K/group_size) for its own primary type. TransA and TransB affect +// only their primary data operand; neither changes scale shape/indexing, and +// each valid k selects floor(k/group_size). Cooperative Shared Matrix-MX MUST +// accept positive bounded N/K without power-of-two restrictions. A supported +// packed-four-bit Shared primary requires even K and even original parent +// physical `columns` pitch under every transpose; M/group_M and N have no added +// parity rule. Local CUBE rules and generic Shared legality remain unchanged. // NDF-END: PTO-CUBE-MATRIX-SCALE-001 pure func TileMXInputTypeSupported(data_type: TileDataType) => boolean diff --git a/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/model/legality/matrix-shape.md b/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/model/legality/matrix-shape.md index ff41d88ff..b2e6b3562 100644 --- a/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/model/legality/matrix-shape.md +++ b/docs/site/i18n/zh-CN/docusaurus-plugin-content-docs-reference/current/tile/model/legality/matrix-shape.md @@ -167,8 +167,7 @@ begin if shared_count == 0 then return m != 0 && n != 0 && k != 0; end; - return m >= 1 && m <= 128 && IsNonzeroPowerOfTwo(n) && - IsNonzeroPowerOfTwo(k); + return m >= 1 && m <= 128 && n != 0 && k != 0; end; readonly func TileMatrixInfosMatchDimensions( diff --git a/docs/status/decisions/ADR-CUBE-0003-cube-matrix-family-contract.md b/docs/status/decisions/ADR-CUBE-0003-cube-matrix-family-contract.md index 9a316f5be..d248d8107 100644 --- a/docs/status/decisions/ADR-CUBE-0003-cube-matrix-family-contract.md +++ b/docs/status/decisions/ADR-CUBE-0003-cube-matrix-family-contract.md @@ -266,3 +266,31 @@ its payload is broadcast by logical output column. Vector quant and vector ReLU/PReLU parameters use `CUBE_N8/U64` with logical `[1,N]`; their carrier bits and numeric legality are unchanged. This amendment has required release impact and is owned by the ASL/NDF clauses named in the front matter. + +## Amendment — 2026-10-10 (Issue #374) + +Cooperative Shared TMATMUL-family forms no longer have a uniform power-of-two +requirement for `N` and `K`; `group_M` is 1..128 and `N/K` are positive values +through 65535, subject to each original Shared descriptor, Local CUBE operand, +capacity, and destination rule. Local-only TMATMUL and Local-only TGEMV keep +their existing positive-dimension and physical descriptor domains. Issue #374 +also assigns the packed Shared-primary parity restriction to ADR-CUBE-0007; +this family inventory does not widen generic Shared, TGEMV, or arithmetic +semantics. + + +Current normative details are owned by `asl/block/model/dispatch/cube-tmatmul.asl` +(`PTO-CUBE-GROUP-M-DISTRIBUTION-001`), +`asl/block/model/dispatch/shared-cube-matrix.asl`, and +`asl/block/model/dispatch/matrix-scale.asl`; this amendment records decision +history only. + +中文:协作式 Shared TMATMUL 不再对 `N/K` 施加统一幂二限制;`group_M` 为 1..128, +`N/K` 为 1..65535 内正值,并继续分别受原始 Shared 描述符、Local CUBE 操作数、 +容量和目的布局约束。Local-only TMATMUL 与 TGEMV 保留原有正维度及物理描述符范围。 +Issue #374 的 Shared packed 主操作数奇偶约束归 ADR-CUBE-0007,本家族记录不扩展通用 +Shared、TGEMV 或算术语义。 + +当前规范细节以 `asl/block/model/dispatch/cube-tmatmul.asl` +(`PTO-CUBE-GROUP-M-DISTRIBUTION-001`)、`asl/block/model/dispatch/shared-cube-matrix.asl` +和 `asl/block/model/dispatch/matrix-scale.asl` 为准;本修订仅记录决策历史。 diff --git a/docs/status/decisions/ADR-CUBE-0007-cooperative-shared-cube-transpose.md b/docs/status/decisions/ADR-CUBE-0007-cooperative-shared-cube-transpose.md index 7b6ffb501..8715ce429 100644 --- a/docs/status/decisions/ADR-CUBE-0007-cooperative-shared-cube-transpose.md +++ b/docs/status/decisions/ADR-CUBE-0007-cooperative-shared-cube-transpose.md @@ -325,3 +325,58 @@ descriptor/state/payload/lifetime、Local-A 转置拒绝及后处理、数值、 语义保持不变;不引入 legacy selector、任意非零 mask、Shared TGEMV 或新 descriptor。 方阵在任一控制下都可能满足 shape 合法性,因此旧布局可能无 fault 而发生数值重解释; 迁移时必须明确安排 physical payload 或选择匹配控制,本修订不承诺检测此情形。 + + +## 2026-10-10 accepted amendment: cooperative logical shapes and packed Shared operands (Issue #374) + +This amendment is evaluated from the frozen Issue #374 contract at baseline +`e145c45c674fdc41b0b71564abf0e0433a6be29b`. It supersedes the cooperative +Shared `N/K` power-of-two restriction and any transient Local shape/capacity +restriction for the six TMATMUL-family Shared forms. Cooperative `group_M` is +1..128 and `N/K` are 1..65535; all descriptor, physical pitch, Local CUBE, +capacity, and destination rules remain independent checks. Shared data is read +from its original published physical descriptor with its original pitch and +typed logical element/carrier/lane semantics. Internal logical views are +private reference-model read mechanisms and carry no separate Local descriptor +or 64 KiB capacity requirement. Valid-region tails and padded physical columns +are not mathematical operands. + +If any actual Shared primary uses a supported packed-four-bit Matrix type +(`E2M1X2`, `E1M2X2`, `HiF4X2` for Matrix-MX only, `S4X2`, or `U4X2`), `K` +and each such original source parent's physical `columns` pitch MUST be even +under every legal transpose combination. `valid_columns` MAY be smaller than +that even pitch. `M/group_M` and `N` have no new parity rule. This applies at +the Matrix-use boundary, including selected `B.SUBVIEW` views, while generic +Shared descriptor legality, Local-only TMATMUL, TGEMV, and Local packed A with +non-packed Shared B remain unchanged. The new restriction is breaking for +Matrix uses of active odd `K` or odd-pitch packed Shared parents; no odd-pitch +positive Matrix witness or generic Shared restriction is introduced. + +For Shared Matrix-MX, ScaleA remains fixed at stored-valid `[group_M,G_A]` +and ScaleB at `[N,G_B]`, where each side computes +`G=ceil(K/group_size)` independently (group-32 E8M0 or group-64 U32). The +transpose controls do not affect scale shape or indexing; valid `k` selects +`floor(k/group_size)`. Scale values, numerical interpretation, encodings, +C/D distinction, readiness, group_M distribution, atomic publication, and +zero-mask behavior remain unchanged. The amendment adds no arithmetic oracle. + +中文:本修订基于 Issue #374 冻结合同与 baseline +`e145c45c674fdc41b0b71564abf0e0433a6be29b`。六种 cooperative Shared TMATMUL 不再受 +`N/K` 幂二限制,也不再受临时 Local 形状/容量约束;`group_M` 为 1..128,`N/K` 为 +1..65535,描述符、物理 pitch、Local CUBE、容量与目的布局仍分别校验。Shared 数据按原始 +published 物理描述符、原始 pitch 及类型化逻辑 element/carrier/lane 读取。内部逻辑视图 +仅是模型私有读取机制,不引入额外 Local 描述符或 64 KiB 容量要求;valid-region 尾部及 +物理 padding 不参与计算。 + +若实际 Shared primary 使用已支持的 packed 四位类型(`E2M1X2`、`E1M2X2`、仅 Matrix-MX +支持的 `HiF4X2`、`S4X2` 或 `U4X2`),则所有转置组合下 `K` 与每个此类原始源 parent 的 +物理 `columns` pitch 均须为偶数;`valid_columns` 可小于偶数 pitch。`M/group_M` 与 `N` +不增加奇偶约束。该规则在 Matrix 使用边界生效,包括选择 `B.SUBVIEW` 时;通用 Shared +描述符、Local-only TMATMUL、TGEMV 及 Local packed A 搭配非 packed Shared B 均保持不变。 +使用 active 奇数 K 或奇数 pitch packed Shared parent 的 Matrix 程序存在 breaking 变化; +不新增 odd-pitch 正例或通用 Shared 限制。 + +Shared Matrix-MX ScaleA 固定 stored-valid `[group_M,G_A]`,ScaleB 固定 `[N,G_B]`,每侧按 +自身 group-size 独立计算 `G=ceil(K/group_size)`(group-32 E8M0 或 group-64 U32)。转置不 +改变 scale 形状或索引;有效 `k` 选取 `floor(k/group_size)`。scale 数值解释、编码、C/D +区分、就绪、group_M 分布、原子发布和零 mask 行为不变,本修订不添加算术 oracle。 diff --git a/docs/status/decisions/ADR-CUBE-0009-cube-and-matrix-operations.md b/docs/status/decisions/ADR-CUBE-0009-cube-and-matrix-operations.md index 01ead29b1..89e3ce233 100644 --- a/docs/status/decisions/ADR-CUBE-0009-cube-and-matrix-operations.md +++ b/docs/status/decisions/ADR-CUBE-0009-cube-and-matrix-operations.md @@ -367,3 +367,35 @@ explicitly name; current meaning remains in affected ASL/NDF owners. authorize behavior beyond the individual decisions and their later amendments. **中文。** 此历史整合本身不改变编码,也不授权逐项决策及后续修订之外的行为。 + +## 2026-10-10 accepted amendment: cooperative Shared shapes (Issue #374) + +This amendment supersedes the uniform power-of-two Matrix dimension wording +in Decisions 049 and 055 only where cooperative Shared TMATMUL is selected. +Cooperative `group_M` is 1..128 and `N/K` are 1..65535; cooperative `N/K` +need not be powers of two. Local-only TMATMUL and TGEMV retain their positive +dimension domain and existing Local CUBE descriptor/capacity checks. A Shared +source is checked in its original descriptor and physical pitch; internal +logical read views do not introduce Local limits. The packed Shared-primary +K-even and original-pitch-even rule is owned by the Issue #374 amendment to +ADR-CUBE-0007. Encodings, arithmetic, and unrelated family decisions remain +unchanged. + + +Current normative details are owned by `asl/block/execution/BSTART.TMATMUL.asl` +(`PTO-BSTART-TMATMUL-CONTRACT-001`), +`asl/block/model/dispatch/cube-tmatmul.asl` (`PTO-CUBE-GROUP-M-DISTRIBUTION-001`), +and `asl/block/attributes/B.FPATR.asl` (`PTO-CUBE-SHARED-TRANSPOSE-001`); +this amendment records decision history only. + +中文:本修订仅在 cooperative Shared TMATMUL 范围内取代 Decision 049 和 055 的 +统一幂二维度措辞。`group_M` 为 1..128,`N/K` 为 1..65535 正值,不要求幂二; +Local-only TMATMUL 与 TGEMV 保留原有正维度范围及 Local CUBE 描述符/容量检查。 +Shared 来源按原始描述符与物理 pitch 检查,内部逻辑读取视图不引入 Local 限制。 +Shared packed 主操作数的 K 偶数与原始 pitch 偶数规则由 ADR-CUBE-0007 的 Issue #374 +修订负责。编码、算术和其他家族决策保持不变。 + +当前规范细节以 `asl/block/execution/BSTART.TMATMUL.asl` +(`PTO-BSTART-TMATMUL-CONTRACT-001`)、`asl/block/model/dispatch/cube-tmatmul.asl` +(`PTO-CUBE-GROUP-M-DISTRIBUTION-001`)和 `asl/block/attributes/B.FPATR.asl` +(`PTO-CUBE-SHARED-TRANSPOSE-001`)为准;本修订仅记录决策历史。 diff --git a/docs/status/decisions/ADR-CUBE-0012-matrix-scale-and-cscale.md b/docs/status/decisions/ADR-CUBE-0012-matrix-scale-and-cscale.md index 776e4584c..8847bae35 100644 --- a/docs/status/decisions/ADR-CUBE-0012-matrix-scale-and-cscale.md +++ b/docs/status/decisions/ADR-CUBE-0012-matrix-scale-and-cscale.md @@ -359,3 +359,25 @@ exact-valid-shape、capacity-padding 与数值规则保持不变。对应 transp Local scale layout、Local transpose 非法性、Shared primary A/B 映射、encoding、 opcode allocation 与 Matrix-MX operand order 均不变。 + + +## 2026-10-10 accepted amendment: non-power Shared MX scale groups (Issue #374) + +For the cooperative Shared Matrix-MX shapes accepted by Issue #374, each +scaled side computes its group count independently as +`G=ceil(K/group_size)`: group-32 E8M0 uses `ceil(K/32)` and group-64 U32 uses +`ceil(K/64)`. Shared ScaleA has exact stored-valid shape `[group_M,G_A]`; +Shared ScaleB has `[N,G_B]`, regardless of `TransA` or `TransB`. Thus K values +that are not multiples of a group size may produce G values such as 3, 6, or 7, +and K=194 produces G7/G4 for mixed group-32/group-64 sides. Valid `k` selects +only `floor(k/group_size)`. This amendment closes scale shape/address legality +for non-power dimensions; it does not change scale values, arithmetic, +rounding, special values, carriers, Local scale geometry, or CScale behavior. + +中文:Issue #374 接受的 cooperative Shared Matrix-MX 形状中,每个需 scale 的侧分别按 +`G=ceil(K/group_size)` 计算组数:group-32 E8M0 使用 `ceil(K/32)`,group-64 U32 使用 +`ceil(K/64)`。Shared ScaleA 的 exact stored-valid 形状为 `[group_M,G_A]`,ScaleB 为 +`[N,G_B]`,不受 `TransA/TransB` 影响。因此 K 不整除 group size 时可得到 G=3、6、7; +K=194 的 mixed group-32/group-64 得到 G7/G4。有效 `k` 仅选择 `floor(k/group_size)`。本修订 +闭合非幂二维度的 scale 形状/地址合法性,不改变 scale 数值、算术、舍入、特殊值、carrier、 +Local scale 几何或 CScale 行为。 diff --git a/docs/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL.md b/docs/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL.md index 8955d03e4..2d74b2086 100644 --- a/docs/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL.md +++ b/docs/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL.md @@ -211,6 +211,8 @@ end; - Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects. - B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema. - For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D. +- Cooperative Shared Matrix forms accept group_M in 1..128 and N/K in 1..65535 without power-of-two restrictions. Validate Local CUBE roles with existing descriptor and capacity rules; validate Shared roles against the original legal Shared descriptor and physical pitch. Internal read views preserve original pitch and use typed logical element/carrier/lane reads without a transient Local descriptor or 64 KiB capacity limit. +- If any supported four-bit Shared primary is present (E2M1X2, E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such original parent physical columns pitch are even under every transpose combination. Valid M/group_M and N gain no parity restriction. This does not affect Local-only TMATMUL, TGEMV, generic Shared allocation, or Local packed A when Shared B is not packed. ## State effects diff --git a/docs/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_ACC.md b/docs/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_ACC.md index 4560599a7..b29bd43f5 100644 --- a/docs/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_ACC.md +++ b/docs/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_ACC.md @@ -223,6 +223,8 @@ end; - Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects. - B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema. - For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D. +- Cooperative Shared Matrix forms accept group_M in 1..128 and N/K in 1..65535 without power-of-two restrictions. Validate Local CUBE roles with existing descriptor and capacity rules; validate Shared roles against the original legal Shared descriptor and physical pitch. Internal read views preserve original pitch and use typed logical element/carrier/lane reads without a transient Local descriptor or 64 KiB capacity limit. +- If any supported four-bit Shared primary is present (E2M1X2, E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such original parent physical columns pitch are even under every transpose combination. Valid M/group_M and N gain no parity restriction. This does not affect Local-only TMATMUL, TGEMV, generic Shared allocation, or Local packed A when Shared B is not packed. ## State effects diff --git a/docs/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_BIAS.md b/docs/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_BIAS.md index 779178d34..7a33e7df6 100644 --- a/docs/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_BIAS.md +++ b/docs/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_BIAS.md @@ -219,6 +219,8 @@ end; - Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects. - B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema. - For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D. +- Cooperative Shared Matrix forms accept group_M in 1..128 and N/K in 1..65535 without power-of-two restrictions. Validate Local CUBE roles with existing descriptor and capacity rules; validate Shared roles against the original legal Shared descriptor and physical pitch. Internal read views preserve original pitch and use typed logical element/carrier/lane reads without a transient Local descriptor or 64 KiB capacity limit. +- If any supported four-bit Shared primary is present (E2M1X2, E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such original parent physical columns pitch are even under every transpose combination. Valid M/group_M and N gain no parity restriction. This does not affect Local-only TMATMUL, TGEMV, generic Shared allocation, or Local packed A when Shared B is not packed. ## State effects diff --git a/docs/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX.md b/docs/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX.md index 3885fdd84..455180055 100644 --- a/docs/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX.md +++ b/docs/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX.md @@ -223,6 +223,9 @@ end; - Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects. - B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema. - For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D. +- Cooperative Shared Matrix forms accept group_M in 1..128 and N/K in 1..65535 without power-of-two restrictions. Validate Local CUBE roles with existing descriptor and capacity rules; validate Shared roles against the original legal Shared descriptor and physical pitch. Internal read views preserve original pitch and use typed logical element/carrier/lane reads without a transient Local descriptor or 64 KiB capacity limit. +- If any supported four-bit Shared primary is present (E2M1X2, E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such original parent physical columns pitch are even under every transpose combination. Valid M/group_M and N gain no parity restriction. This does not affect Local-only TMATMUL, TGEMV, generic Shared allocation, or Local packed A when Shared B is not packed. +- Shared Matrix-MX ScaleA has exact stored-valid shape [group_M,G_A] and ScaleB [N,G_B], with each G equal to ceil(K/group_size) for its side (group-32 E8M0 or group-64 U32), independent of TransA/TransB; valid k selects floor(k/group_size). ## State effects diff --git a/docs/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX_ACC.md b/docs/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX_ACC.md index 9c388fbe5..80ba27a31 100644 --- a/docs/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX_ACC.md +++ b/docs/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX_ACC.md @@ -233,6 +233,9 @@ end; - Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects. - B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema. - For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D. +- Cooperative Shared Matrix forms accept group_M in 1..128 and N/K in 1..65535 without power-of-two restrictions. Validate Local CUBE roles with existing descriptor and capacity rules; validate Shared roles against the original legal Shared descriptor and physical pitch. Internal read views preserve original pitch and use typed logical element/carrier/lane reads without a transient Local descriptor or 64 KiB capacity limit. +- If any supported four-bit Shared primary is present (E2M1X2, E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such original parent physical columns pitch are even under every transpose combination. Valid M/group_M and N gain no parity restriction. This does not affect Local-only TMATMUL, TGEMV, generic Shared allocation, or Local packed A when Shared B is not packed. +- Shared Matrix-MX ScaleA has exact stored-valid shape [group_M,G_A] and ScaleB [N,G_B], with each G equal to ceil(K/group_size) for its side (group-32 E8M0 or group-64 U32), independent of TransA/TransB; valid k selects floor(k/group_size). ## State effects diff --git a/docs/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX_BIAS.md b/docs/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX_BIAS.md index e8dddfb47..6511585ef 100644 --- a/docs/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX_BIAS.md +++ b/docs/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX_BIAS.md @@ -229,6 +229,9 @@ end; - Every cooperative nonzero PE_MASK must be 1111; all four PEs complete Shared readiness, while zero-row PEs suppress every compute-only Local resolution and effect. Mask zero is a strict no-op before descriptor reads, faults, allocation, readiness checks, or lifetime effects. - B.DATR permits BType, matrix CCTRL via PadValueOrByteId, RMode, and Sat. Exactly one B.FPATR is mandatory and closes the conditional postprocess schema. - For init=1 forms CCTRL[1] must be zero. CCTRL[0]=1 selects raw accumulator-type D and forbids final-output post-processing and auxiliary outputs except legal CScale; CCTRL[1] is an ACC-only non-binding explicit-C cache-use or prefetch hint. Every successful form allocates and publishes D. +- Cooperative Shared Matrix forms accept group_M in 1..128 and N/K in 1..65535 without power-of-two restrictions. Validate Local CUBE roles with existing descriptor and capacity rules; validate Shared roles against the original legal Shared descriptor and physical pitch. Internal read views preserve original pitch and use typed logical element/carrier/lane reads without a transient Local descriptor or 64 KiB capacity limit. +- If any supported four-bit Shared primary is present (E2M1X2, E1M2X2, HiF4X2 for Matrix-MX only, S4X2, or U4X2), K and each such original parent physical columns pitch are even under every transpose combination. Valid M/group_M and N gain no parity restriction. This does not affect Local-only TMATMUL, TGEMV, generic Shared allocation, or Local packed A when Shared B is not packed. +- Shared Matrix-MX ScaleA has exact stored-valid shape [group_M,G_A] and ScaleB [N,G_B], with each G equal to ceil(K/group_size) for its side (group-32 E8M0 or group-64 U32), independent of TransA/TransB; valid k selects floor(k/group_size). ## State effects diff --git a/docs/tile/model/execution/cube.md b/docs/tile/model/execution/cube.md index 124db42e6..95c2f83bd 100644 --- a/docs/tile/model/execution/cube.md +++ b/docs/tile/model/execution/cube.md @@ -151,8 +151,6 @@ begin c_scale, left_tile.valid_rows as integer {1..65535}); end; - let left_payload = left_tile.payload; - let right_payload = right_tile.payload; var result: TileInfo = destination_tile; result.contents_defined = FALSE; result.defined_elements = Zeros{PTO_MODEL_TILE_ELEMENTS}; @@ -173,12 +171,13 @@ begin row as integer {0..65535}, column as integer {0..65535}, c_scale, c_scale_present); for inner = 0 to left_tile.valid_columns - 1 looplimit 65536 do - let left_element = TileStorageIndex(left_tile, - row as integer {0..65535}, inner as integer {0..65535}); - let right_element = TileStorageIndex(right_tile, - inner as integer {0..65535}, column as integer {0..65535}); sum = TileProfileMatrixAccumulate(sum, - left_payload[[left_element]], right_payload[[right_element]], + MatrixReadLogicalElement(left_tile, + row as integer {0..65535}, + inner as integer {0..65535}), + MatrixReadLogicalElement(right_tile, + inner as integer {0..65535}, + column as integer {0..65535}), accumulator_data_type, left_tile.data_type, right_tile.data_type, control); end; @@ -274,10 +273,6 @@ begin c_scale, left_tile.valid_rows as integer {1..65535}); end; - let left_payload = left_tile.payload; - let right_payload = right_tile.payload; - let left_scale_payload = left_scale_tile.payload; - let right_scale_payload = right_scale_tile.payload; var result: TileInfo = destination_tile; result.contents_defined = FALSE; result.defined_elements = Zeros{PTO_MODEL_TILE_ELEMENTS}; @@ -293,10 +288,6 @@ begin row as integer {0..65535}, column as integer {0..65535}, c_scale, c_scale_present); for inner = 0 to left_tile.valid_columns - 1 looplimit 65536 do - let left_element = TileStorageIndex(left_tile, - row as integer {0..65535}, inner as integer {0..65535}); - let right_element = TileStorageIndex(right_tile, - inner as integer {0..65535}, column as integer {0..65535}); let left_scale_element = if left_scale_present then MatrixLeftScaleElement( left_scale_tile, left_tile.data_type, @@ -312,16 +303,22 @@ begin else 0; let left_scale_value = if left_scale_present then - left_scale_payload[[left_scale_element]] + TileReadLogicalElement( + left_scale_tile, left_scale_element) else Zeros{PTO_XLEN}; let right_scale_value = if right_scale_present then - right_scale_payload[[right_scale_element]] + TileReadLogicalElement( + right_scale_tile, right_scale_element) else Zeros{PTO_XLEN}; sum = TileProfileMatrixScaledAccumulate( - sum, left_payload[[left_element]], - right_payload[[right_element]], + sum, MatrixReadLogicalElement(left_tile, + row as integer {0..65535}, + inner as integer {0..65535}), + MatrixReadLogicalElement(right_tile, + inner as integer {0..65535}, + column as integer {0..65535}), left_scale_value, right_scale_value, left_scale_present, right_scale_present, accumulator_data_type, left_tile.data_type, diff --git a/docs/tile/model/execution/matrix-scale.md b/docs/tile/model/execution/matrix-scale.md index 331da5541..27c0659c8 100644 --- a/docs/tile/model/execution/matrix-scale.md +++ b/docs/tile/model/execution/matrix-scale.md @@ -119,29 +119,38 @@ begin value, _Tiles[[c_scale]].payload[[scale_element]][7:0]); end; +readonly func MatrixReadLogicalElement( + tile: TileInfo, + row: integer {0..65535}, + column: integer {0..65535}) => Word +begin + let element = TileLogicalLinearIndex(tile, row, column); + return TileReadLogicalElement(tile, element); +end; + readonly func MatrixLeftScaleElement( scale: TileInfo, primary_type: TileDataType, row: integer {0..65535}, - inner: integer {0..65535}) => ModelTileElementIndex + inner: integer {0..65535}) => PackedTileElementIndex begin let group = (inner DIVRM TileMXScaleGroupSize(primary_type)) as integer {0..65535}; - return TileStorageIndex(scale, row, group); + return TileLogicalLinearIndex(scale, row, group); end; readonly func MatrixRightScaleElement( scale: TileInfo, primary_type: TileDataType, column: integer {0..65535}, - inner: integer {0..65535}) => ModelTileElementIndex + inner: integer {0..65535}) => PackedTileElementIndex begin let group = (inner DIVRM TileMXScaleGroupSize(primary_type)) as integer {0..65535}; if scale.layout == TileLayout_CUBE_M32 then - return TileStorageIndex(scale, column, group); + return TileLogicalLinearIndex(scale, column, group); end; - return TileStorageIndex(scale, group, column); + return TileLogicalLinearIndex(scale, group, column); end; func TileProfileMatrixAccumulate( diff --git a/docs/tile/model/legality/matrix-functions.md b/docs/tile/model/legality/matrix-functions.md index 4f0034836..3b9453227 100644 --- a/docs/tile/model/legality/matrix-functions.md +++ b/docs/tile/model/legality/matrix-functions.md @@ -113,13 +113,15 @@ This example illustrates the current ASL owner and does not replace the normativ // be accepted only by Matrix-MX input roles; ordinary Matrix MUST not gain it. // Each Local scale MUST use one-block CUBE_M32 storage with a valid major no // greater than 32, while each Shared scale MUST remain an independently bound -// ordinary Tile with the corresponding primary location. -// For Shared Matrix-MX, ScaleA has semantic shape [M,G_A] and always uses -// the K-group-major physical shape [M,G_A]; ScaleB has semantic shape -// [G_B,N] and always uses the K-group-major physical shape [N,G_B]. -// TransA and TransB affect only the corresponding primary data operand; -// each physical shape is exact while physical columns MAY use legal capacity -// padding. +// ordinary Tile with the corresponding primary location. Shared ScaleA MUST +// have exact stored-valid shape [group_M,G_A] and ScaleB [N,G_B], where each G +// equals ceil(K/group_size) for its own primary type. TransA and TransB affect +// only their primary data operand; neither changes scale shape/indexing, and +// each valid k selects floor(k/group_size). Cooperative Shared Matrix-MX MUST +// accept positive bounded N/K without power-of-two restrictions. A supported +// packed-four-bit Shared primary requires even K and even original parent +// physical `columns` pitch under every transpose; M/group_M and N have no added +// parity rule. Local CUBE rules and generic Shared legality remain unchanged. // NDF-END: PTO-CUBE-MATRIX-SCALE-001 pure func TileMXInputTypeSupported(data_type: TileDataType) => boolean diff --git a/docs/tile/model/legality/matrix-shape.md b/docs/tile/model/legality/matrix-shape.md index ae7ef247c..b4272eca1 100644 --- a/docs/tile/model/legality/matrix-shape.md +++ b/docs/tile/model/legality/matrix-shape.md @@ -167,8 +167,7 @@ begin if shared_count == 0 then return m != 0 && n != 0 && k != 0; end; - return m >= 1 && m <= 128 && IsNonzeroPowerOfTwo(n) && - IsNonzeroPowerOfTwo(k); + return m >= 1 && m <= 128 && n != 0 && k != 0; end; readonly func TileMatrixInfosMatchDimensions( diff --git a/scripts/layout_relation_census.py b/scripts/layout_relation_census.py index 5e6fdfaa3..52ab409b3 100755 --- a/scripts/layout_relation_census.py +++ b/scripts/layout_relation_census.py @@ -853,6 +853,63 @@ "Local CUBE ExecutionMask support (Issues #277/#349, ADR-TILE-0008, " "PTO-TILE-MODEL-EXECUTION-MASK-APPLICABILITY-001)" ) +# Issue #374 changes cooperative Shared Matrix execution views while preserving +# the portable Local layout inventory. The private right-primary view may use +# ColumnMajor only as an internal dense representation for packed four-bit +# data; published Shared descriptors remain RowMajor and Local operands keep +# their existing layout domains. Keep the helper owners, call sites, and +# internal layout footprint exact so this exception cannot widen operation +# layouts or authorize an unrelated ColumnMajor source. +ISSUE374_SHARED_MATRIX_CLASSIFICATION = ( + "Issue #374 cooperative Shared Matrix logical views and packed-even rule " + "(ADR-CUBE-0007/0003/0009/0012)" +) +ISSUE374_SHARED_MATRIX_HELPER_DEFINITION_DELTAS = { + "BundleMatrixCooperativeInfosMatchDimensions": { + "before": [], + "after": [( + "asl/block/model/dispatch/matrix-scale.asl", set(), + )], + "before_callers": set(), + "after_callers": { + ("ExecuteBundleTMATMULOperation", "asl/block/model/dispatch/cube-tmatmul.asl"), + }, + }, + "BundleMatrixCooperativeScalesLegal": { + "before": [], + "after": [( + "asl/block/model/dispatch/matrix-scale.asl", {"CUBE_M32", "RowMajor"}, + )], + "before_callers": set(), + "after_callers": { + ("ExecuteBundleTMATMULOperation", "asl/block/model/dispatch/cube-tmatmul.asl"), + }, + }, + "BundleMatrixPrivateSharedViewLegal": { + "before": [], + "after": [( + "asl/block/model/dispatch/shared-cube-matrix.asl", + {"ColumnMajor", "RowMajor"}, + )], + "before_callers": set(), + "after_callers": { + ("BundleMatrixCooperativeInfosMatchDimensions", + "asl/block/model/dispatch/matrix-scale.asl"), + ("BundleMatrixCooperativeScalesLegal", + "asl/block/model/dispatch/matrix-scale.asl"), + }, + }, + "TileMatrixInfosMatchDimensions": { + "before": [( + "asl/tile/model/legality/matrix-shape.asl", set(), + )], + "after": [], + "before_callers": { + ("ExecuteBundleTMATMULOperation", "asl/block/model/dispatch/cube-tmatmul.asl"), + }, + "after_callers": set(), + }, +} # Issue #207 adds the selected-CUBE row-expansion byte-offset selector. Keep # these helpers under their own classification so the census does not attribute # their provenance to the separate ExecutionMask decision above. @@ -2409,6 +2466,102 @@ def body(name: str, path: str = double_path) -> str: return errors +def _issue374_shared_matrix_closure( + after_defs: dict[str, list[dict[str, Any]]], +) -> list[str]: + """Keep ColumnMajor private to packed Shared-B canonical read views.""" + if "BundleMatrixPrivateSharedViewLegal" not in after_defs: + return [] + errors: list[str] = [] + shared_path = "asl/block/model/dispatch/shared-cube-matrix.asl" + scale_path = "asl/block/model/dispatch/matrix-scale.asl" + + def body(name: str, path: str) -> str: + rows = after_defs.get(name, []) + if len(rows) != 1 or rows[0].get("path") != path: + errors.append(f"Issue #374 Shared Matrix helper owner mismatch: {name}") + return "" + return rows[0].get("body", "") + + private_view = body("BundleMatrixPrivateSharedViewLegal", shared_path) + compact_view = re.sub(r"\s+", " ", private_view) + if not ( + "tile.layout == TileLayout_RowMajor || " + "(allow_column_major_packed && tile.layout == TileLayout_ColumnMajor && " + "TileDataTypeIsFourBit(data_type))" in compact_view and + "tile.data_type == data_type" in compact_view and + "SharedTileCapacityIsLegal(tile.capacity_bytes)" in compact_view + ): + errors.append( + "Issue #374 private ColumnMajor view is not guarded by packed-type and role permission" + ) + if set(LAYOUT_RE.findall(private_view)) != {"RowMajor", "ColumnMajor"}: + errors.append( + "Issue #374 private Shared view layout footprint is not exactly RowMajor/ColumnMajor" + ) + + expected_calls = { + ("BundleMatrixCooperativeInfosMatchDimensions", scale_path, + "left, m, k, left_type, FALSE"), + ("BundleMatrixCooperativeInfosMatchDimensions", scale_path, + "right, k, n, right_type, TRUE"), + ("BundleMatrixCooperativeScalesLegal", scale_path, + "left_scale, left.valid_rows as integer {1..65535}, left_groups, left_scale_type, FALSE"), + ("BundleMatrixCooperativeScalesLegal", scale_path, + "right_scale, right_groups, right.valid_columns as integer {1..65535}, right_scale_type, FALSE"), + } + actual_calls = { + (name, row["path"], re.sub(r"\s+", " ", args).strip()) + for name, rows in after_defs.items() + for row in rows + for call, args in row["calls"] + if call == "BundleMatrixPrivateSharedViewLegal" + } + if actual_calls != expected_calls: + errors.append( + "Issue #374 private ColumnMajor permission escaped the packed right-primary call site" + ) + + shared_source = body("BundleMatrixSharedSourceSchemaLegal", shared_path) + compact_source = re.sub(r"\s+", " ", shared_source) + if not ( + "shared.tile.layout == TileLayout_RowMajor" in compact_source and + "TileLayout_ColumnMajor" not in shared_source and + "!TileDataTypeIsFourBit(data_type) || shared.tile.columns MOD 2 == 0" in compact_source + ): + errors.append( + "Issue #374 original Shared descriptors must remain RowMajor with packed even pitch" + ) + + right_materializer = body("MaterializeBundleSharedMatrixPrimary", shared_path) + compact_right = re.sub(r"\s+", " ", right_materializer) + if not ( + "var tile = source;" in compact_right and + "tile.layout = if TileDataTypeIsFourBit(data_type) then " + "TileLayout_ColumnMajor else TileLayout_RowMajor;" in compact_right + ): + errors.append( + "Issue #374 private ColumnMajor storage is not limited to right-primary four-bit views" + ) + + left_materializer = body("MaterializeBundleSharedMatrixLeftPrimary", shared_path) + if "tile.layout = TileLayout_RowMajor;" not in left_materializer: + errors.append("Issue #374 Shared left-primary private layout changed") + + matrix_read = body( + "MatrixReadLogicalElement", "asl/tile/model/execution/matrix-scale.asl" + ) + compact_read = re.sub(r"\s+", " ", matrix_read) + if not ( + "TileLogicalLinearIndex(tile, row, column)" in compact_read and + "TileReadLogicalElement(tile, element)" in compact_read + ): + errors.append( + "Issue #374 Matrix coordinate reads must use typed logical indexing" + ) + return errors + + def _helper_deltas(before: dict[str, Any], after: dict[str, Any], before_defs: dict[str, list[dict[str, Any]]], after_defs: dict[str, list[dict[str, Any]]], authorized_helper_names: set[str], allow_texpdif_changes: bool = False, allow_tlea_changes: bool = False) -> tuple[list[dict[str, Any]], list[str]]: rows: list[dict[str, Any]] = [] errors: list[str] = [] @@ -2512,8 +2665,16 @@ def _helper_deltas(before: dict[str, Any], after: dict[str, Any], before_defs: d "owner_decision": ISSUE356_REDUCTION_CLASSIFICATION, }) continue + helper_spec = None if name in ISSUE360_GM_OBLIGATION_HELPERS: - spec = ISSUE360_GM_OBLIGATION_HELPERS[name] + helper_spec = ISSUE360_GM_OBLIGATION_HELPERS[name] + helper_classification = ISSUE360_GM_OBLIGATION_HELPER_CLASSIFICATION + helper_issue = "Issue #360 GM-obligation" + elif name in ISSUE374_SHARED_MATRIX_HELPER_DEFINITION_DELTAS: + helper_spec = ISSUE374_SHARED_MATRIX_HELPER_DEFINITION_DELTAS[name] + helper_classification = ISSUE374_SHARED_MATRIX_CLASSIFICATION + helper_issue = "Issue #374 Shared Matrix" + if helper_spec is not None: old_shape = sorted( (row["path"], tuple(sorted(row["layouts"]))) for row in old_defs @@ -2524,33 +2685,34 @@ def _helper_deltas(before: dict[str, Any], after: dict[str, Any], before_defs: d ) expected_old_shape = sorted( (path, tuple(sorted(layouts))) - for path, layouts in spec["before"] + for path, layouts in helper_spec["before"] ) expected_new_shape = sorted( (path, tuple(sorted(layouts))) - for path, layouts in spec["after"] + for path, layouts in helper_spec["after"] ) before_callers = _direct_callers(before_defs, name) after_callers = _direct_callers(after_defs, name) valid = ( old_shape == expected_old_shape and new_shape == expected_new_shape and - before_callers == spec["before_callers"] and - after_callers == spec["after_callers"] + before_callers == helper_spec["before_callers"] and + after_callers == helper_spec["after_callers"] ) if not valid: errors.append( - f"Issue #360 GM-obligation helper owner/layout/caller closure mismatch: {name}" + f"{helper_issue} helper owner/layout/caller closure mismatch: {name}" ) rows.append({ "name": name, - "classification": ISSUE360_GM_OBLIGATION_HELPER_CLASSIFICATION - if valid else "UNCLASSIFIED", + "classification": ( + helper_classification if valid else "UNCLASSIFIED" + ), "before": old_defs, "after": new_defs, "before_callers": sorted(before_callers), "after_callers": sorted(after_callers), - "owner_decision": ISSUE360_GM_OBLIGATION_HELPER_CLASSIFICATION, + "owner_decision": helper_classification, }) continue if name in EXECUTION_MASK_HELPER_DEFINITION_DELTAS: @@ -2998,6 +3160,7 @@ def _census_texts(before_map: dict[str, str], after_map: dict[str, str], baselin after_reach, e, after_defs = _helper_snapshot(after_map, after_meta) errors.extend(e) errors.extend(_issue371_b64_closure(after_map, after_defs)) + errors.extend(_issue374_shared_matrix_closure(after_defs)) baseline_fixture, fixture_errors, fixture_payload = _load_baseline_fixture(before_inventory, baseline) errors.extend(fixture_errors) old_rows, new_rows = _operation_key_rows(before_inventory), _operation_key_rows(after_inventory) @@ -3661,6 +3824,126 @@ def _execution_mask_support_mutation_canaries() -> None: raise AssertionError("ExecutionMask PredicateCell layout expansion did not fail closed") +def _issue374_shared_matrix_mutation_canaries() -> None: + """Keep Issue #374's packed ColumnMajor read view private and exact.""" + paths = source_paths(BASELINE_OBJECT, "working-tree") + baseline = _ref_texts(BASELINE_OBJECT, paths) + candidate = _ref_texts("working-tree", paths) + result = _census_texts( + baseline, candidate, BASELINE_OBJECT, + "real-issue374-shared-matrix-candidate", enforce_closure=True, + ) + classified = { + row["name"] for row in result["common_helper_deltas"] + if row.get("classification") == ISSUE374_SHARED_MATRIX_CLASSIFICATION + } + expected = set(ISSUE374_SHARED_MATRIX_HELPER_DEFINITION_DELTAS) + matrix_mnemonics = { + "TMATMUL", "TMATMUL_ACC", "TMATMUL_BIAS", "TMATMUL_MX", + "TMATMUL_MX_ACC", "TMATMUL_MX_BIAS", "TGEMV", "TGEMV_ACC", + "TGEMV_BIAS", "TGEMV_MX", "TGEMV_MX_ACC", "TGEMV_MX_BIAS", + } + has_portable_column_major = any( + row["mnemonic"] in matrix_mnemonics and + any("ColumnMajor" in layouts for layouts in row["L1"].values()) + for row in result["operation_signatures"] + ) + if not result["pass"] or classified != expected or has_portable_column_major: + raise AssertionError( + "Issue #374 Shared Matrix owner/layout closure is incomplete: " + + "; ".join(result["errors"][:12]) + ) + + shared_path = "asl/block/model/dispatch/shared-cube-matrix.asl" + scale_path = "asl/block/model/dispatch/matrix-scale.asl" + cube_path = "asl/block/model/dispatch/cube-tmatmul.asl" + + packed_guard = ( + "(allow_column_major_packed &&\n" + " tile.layout == TileLayout_ColumnMajor &&\n" + " TileDataTypeIsFourBit(data_type))" + ) + widened = dict(candidate) + if packed_guard not in candidate.get(shared_path, ""): + raise AssertionError("Issue #374 packed private-view guard canary source is missing") + widened[shared_path] = candidate[shared_path].replace( + packed_guard, + "(tile.layout == TileLayout_ColumnMajor)", + 1, + ) + result = _census_texts( + baseline, widened, BASELINE_OBJECT, + "real-mutated-issue374-private-column-major-guard", enforce_closure=False, + ) + if result["pass"] or not any( + "Issue #374 private ColumnMajor view is not guarded" in error + for error in result["errors"] + ): + raise AssertionError("Issue #374 private ColumnMajor type/role widening did not fail closed") + + wrong_owner = dict(candidate) + private_defs = _function_defs(candidate[shared_path], shared_path) + private_body = next( + (row["body"] for row in private_defs + if row["name"] == "BundleMatrixPrivateSharedViewLegal"), + "", + ) + if not private_body: + raise AssertionError("Issue #374 private-view owner canary source is missing") + wrong_owner[scale_path] = wrong_owner[scale_path] + "\n\n" + private_body + "\n" + result = _census_texts( + baseline, wrong_owner, BASELINE_OBJECT, + "real-mutated-issue374-private-view-duplicate-owner", enforce_closure=False, + ) + if result["pass"] or not any( + "Issue #374 Shared Matrix helper owner/layout/caller closure mismatch: " + "BundleMatrixPrivateSharedViewLegal" in error + for error in result["errors"] + ): + raise AssertionError("Issue #374 private-view relocation/duplication did not fail closed") + + extra_caller = dict(candidate) + anchor = " let shape_legal = if shared_count == 0 then" + probe = ( + " let issue374_private_view_probe = BundleMatrixPrivateSharedViewLegal(" + "left, m, k, left_type, TRUE);\n" + ) + if anchor not in candidate.get(cube_path, ""): + raise AssertionError("Issue #374 private-view caller canary source is missing") + extra_caller[cube_path] = candidate[cube_path].replace(anchor, probe + anchor, 1) + result = _census_texts( + baseline, extra_caller, BASELINE_OBJECT, + "real-mutated-issue374-private-view-extra-caller", enforce_closure=False, + ) + if result["pass"] or not any( + "Issue #374 private ColumnMajor permission escaped" in error or + "Issue #374 Shared Matrix helper owner/layout/caller closure mismatch: " + "BundleMatrixPrivateSharedViewLegal" in error + for error in result["errors"] + ): + raise AssertionError("Issue #374 private-view caller expansion did not fail closed") + + shared_source_widened = dict(candidate) + row_major = "shared.tile.layout == TileLayout_RowMajor" + if row_major not in candidate.get(shared_path, ""): + raise AssertionError("Issue #374 source-layout canary source is missing") + shared_source_widened[shared_path] = candidate[shared_path].replace( + row_major, + "(shared.tile.layout == TileLayout_RowMajor || " + "shared.tile.layout == TileLayout_ColumnMajor)", + 1, + ) + result = _census_texts( + baseline, shared_source_widened, BASELINE_OBJECT, + "real-mutated-issue374-original-shared-layout", enforce_closure=False, + ) + if result["pass"] or not any( + "Issue #374 original Shared descriptors must remain RowMajor" in error + for error in result["errors"] + ): + raise AssertionError("Issue #374 source-layout widening did not fail closed") + + def _issue371_b64_mutation_canaries() -> None: """Prove the M32-only double-CELL classification fails closed.""" paths = source_paths(BASELINE_OBJECT, "working-tree") @@ -3997,10 +4280,11 @@ def self_test() -> None: raise AssertionError("missing inventory owner canary failed closed") _real_relation_mutation_canaries() _execution_mask_support_mutation_canaries() + _issue374_shared_matrix_mutation_canaries() _issue371_b64_mutation_canaries() _issue360_gm_obligation_helper_mutation_canaries() _issue356_reduction_source_mutation_canaries() - print("layout-relation census end-to-end canaries passed: same-layout/Bias/helper/inventory/real-relation/indexed-domain/r4 owner, ExecutionMask, Issue #207 selector, Issue #371 M32 b64 double-CELL, Issue #360 GM-obligation helper owner/caller/layout, and bounded reduction-source mutations rejected") + print("layout-relation census end-to-end canaries passed: same-layout/Bias/helper/inventory/real-relation/indexed-domain/r4 owner, ExecutionMask, Issue #207 selector, Issue #371 M32 b64 double-CELL, Issue #360 GM-obligation helper owner/caller/layout, Issue #374 packed private Shared view, and bounded reduction-source mutations rejected") def main() -> int: diff --git a/spec/evidence/layout-relation-census.json b/spec/evidence/layout-relation-census.json index de2d450f3..50e0e204e 100644 --- a/spec/evidence/layout-relation-census.json +++ b/spec/evidence/layout-relation-census.json @@ -5097,7 +5097,7 @@ "TGEMV_MX_BIAS" ], "candidate": "HEAD", - "candidate_head": "4143ca1ff514b90901a47726177d6581ce6939d7", + "candidate_head": "693349d4a4ccc33818e05c6133413d20288748b6", "candidate_identity": "immutable-asl-tree", "candidate_only_authorized_against": "577e7b06422d87ec09c925401b477b4e524eded3", "changed_records": [ @@ -17181,6 +17181,67 @@ "name": "BundleMSCATTERMASKBindingsLegal", "path": "asl/block/model/dispatch/tlsu-mscatter-mask.asl" }, + { + "after": [ + { + "calls": [ + "BundleMatrixPrivateSharedViewLegal", + "BundleMatrixPrivateSharedViewLegal", + "TileCubeDescriptorLegal" + ], + "layouts": [], + "path": "asl/block/model/dispatch/matrix-scale.asl", + "sha256": "cd7218856ccaf02ffc9aa422d31939864c5e532dc8fb534581928aad1a8587c6" + } + ], + "after_callers": [ + [ + "ExecuteBundleTMATMULOperation", + "asl/block/model/dispatch/cube-tmatmul.asl" + ] + ], + "before": [], + "before_callers": [], + "classification": "Issue #374 cooperative Shared Matrix logical views and packed-even rule (ADR-CUBE-0007/0003/0009/0012)", + "name": "BundleMatrixCooperativeInfosMatchDimensions", + "owner_decision": "Issue #374 cooperative Shared Matrix logical views and packed-even rule (ADR-CUBE-0007/0003/0009/0012)" + }, + { + "after": [ + { + "calls": [ + "BundleMatrixPrivateSharedViewLegal", + "BundleMatrixPrivateSharedViewLegal", + "TileCubeDescriptorLegal", + "TileInfoDescriptorLegal", + "TileMXInputTypeNeedsScale", + "TileMXInputTypeNeedsScale", + "TileMXOperandPairLegal", + "TileMXScaleCarrierType", + "TileMXScaleCarrierType", + "TileMXScaleGroupCount", + "TileMXScaleGroupCount" + ], + "layouts": [ + "CUBE_M32", + "RowMajor" + ], + "path": "asl/block/model/dispatch/matrix-scale.asl", + "sha256": "353695605f5b4a831ec7a2c936f5a1ef7e0c29e9f8408fd262457c32ba2da067" + } + ], + "after_callers": [ + [ + "ExecuteBundleTMATMULOperation", + "asl/block/model/dispatch/cube-tmatmul.asl" + ] + ], + "before": [], + "before_callers": [], + "classification": "Issue #374 cooperative Shared Matrix logical views and packed-even rule (ADR-CUBE-0007/0003/0009/0012)", + "name": "BundleMatrixCooperativeScalesLegal", + "owner_decision": "Issue #374 cooperative Shared Matrix logical views and packed-even rule (ADR-CUBE-0007/0003/0009/0012)" + }, { "after_layouts": [ "CUBE_M16", @@ -17205,15 +17266,60 @@ "name": "BundleMatrixPostProcessSourcesLegal", "path": "asl/tile/model/legality/matrix-postprocess.asl" }, + { + "after": [ + { + "calls": [ + "SharedTileCapacityIsLegal", + "TileDataTypeIsFourBit", + "TileLogicalElementCapacity" + ], + "layouts": [ + "ColumnMajor", + "RowMajor" + ], + "path": "asl/block/model/dispatch/shared-cube-matrix.asl", + "sha256": "21479d534740059528edef4ffa650956a74f9c8598c18b56d5d39f48ad1b30cc" + } + ], + "after_callers": [ + [ + "BundleMatrixCooperativeInfosMatchDimensions", + "asl/block/model/dispatch/matrix-scale.asl" + ], + [ + "BundleMatrixCooperativeScalesLegal", + "asl/block/model/dispatch/matrix-scale.asl" + ] + ], + "before": [], + "before_callers": [], + "classification": "Issue #374 cooperative Shared Matrix logical views and packed-even rule (ADR-CUBE-0007/0003/0009/0012)", + "name": "BundleMatrixPrivateSharedViewLegal", + "owner_decision": "Issue #374 cooperative Shared Matrix logical views and packed-even rule (ADR-CUBE-0007/0003/0009/0012)" + }, { "after_layouts": [], - "after_sha256": "ed52e8a6f02ac122d18689b291104ce536638da116f7ab5875202da7d4999fb3", + "after_sha256": "8d1c077e98be68508b07f644617a4b6a096e4087c72896d20a4f5ec3ab7854d0", "before_layouts": [], "before_sha256": "4fcd6cc3e073cb92d7ebb1f88ef044d3305a5cd87faf53934b96884ca97dcf64", "classification": "operation-scoped accepted layout/relation owner", "name": "BundleMatrixSharedSchemasLegal", "path": "asl/block/model/dispatch/shared-cube-matrix.asl" }, + { + "after_layouts": [ + "RowMajor" + ], + "after_sha256": "498b06ccb8055a20821e74fe872f8aa6bc6b5ceb2958f3f01b821f092b576bf1", + "before_layouts": [ + "RowMajor" + ], + "before_sha256": "b78b472152f19988082f2238533bbcb1b49f36d116ca744ffc759202ee34bfc0", + "classification": "operation-scoped accepted layout/relation owner", + "name": "BundleMatrixSharedSourceSchemaLegal", + "path": "asl/block/model/dispatch/shared-cube-matrix.asl" + }, { "after_layouts": [], "after_sha256": "6e49586b1acd3e967eb8449bba0bd509ec9c8392befa4ccc18cca087eb132fe9", @@ -17333,6 +17439,19 @@ "name": "BundleSharedGenerationRequestWaiting", "owner_decision": "Issue #360 Core-scoped GM and Shared request plumbing (layout-neutral)" }, + { + "after_layouts": [ + "RowMajor" + ], + "after_sha256": "74406fab70a0d35442646e091048a5e72d4ec8af8f97a476fac02b7ebcfb5064", + "before_layouts": [ + "RowMajor" + ], + "before_sha256": "8cac8792e1dbe91571c11f78618834cb4d0a1d0397637100011f03dc5baee45e", + "classification": "operation-scoped accepted layout/relation owner", + "name": "BundleSharedSubviewMatrixMetadataLegalForPE", + "path": "asl/block/model/dispatch/shared-cube-matrix.asl" + }, { "after_layouts": [], "after_sha256": "80a1c23010cab43a816cf6e392a194743a60773212d318842107eb3caec10aff", @@ -17374,6 +17493,15 @@ "name": "BundleTIMG2COLStateLegal", "path": "asl/block/model/dispatch/timg2col-execution.asl" }, + { + "after_layouts": [], + "after_sha256": "38cf7662d1931de98e8df1303fe6c833b6e05cb33bb1c7f24afc94492c678bf8", + "before_layouts": [], + "before_sha256": "a4a113999cbd605cf4569d21319976ee73483867dcb22663065a3f3f8d383f37", + "classification": "operation-scoped accepted layout/relation owner", + "name": "BundleTMATMULDimensionsLegal", + "path": "asl/tile/model/legality/matrix-shape.asl" + }, { "after": [ { @@ -17700,7 +17828,7 @@ }, { "after_layouts": [], - "after_sha256": "0cc27e4d439ea68abb9bf3007324a225f04ecea0dc3609c0fd50bc692ecfceb4", + "after_sha256": "1dc22a691e23711bd16a33d9ac3d1346427d8b4fedea999231ef75605dd7d328", "before_layouts": [], "before_sha256": "f8dd5ca6309cdb3e15738a5f45b6395acb5312200d7ccc21981e7bc67febacbc", "classification": "operation-scoped accepted layout/relation owner", @@ -20289,6 +20417,34 @@ "name": "TileMatrixInfoOptionalScalesLegal", "path": "asl/tile/model/legality/matrix-shape.asl" }, + { + "after": [], + "after_callers": [], + "before": [ + { + "calls": [ + "IsNonzeroPowerOfTwo", + "IsNonzeroPowerOfTwo", + "IsNonzeroPowerOfTwo", + "IsNonzeroPowerOfTwo", + "TileInfoDescriptorLegal", + "TileInfoDescriptorLegal" + ], + "layouts": [], + "path": "asl/tile/model/legality/matrix-shape.asl", + "sha256": "cbf11eed4e0f70210c4b57b2b47a09cb9e6ada91f80fc6a4712bde03e5b8a62e" + } + ], + "before_callers": [ + [ + "ExecuteBundleTMATMULOperation", + "asl/block/model/dispatch/cube-tmatmul.asl" + ] + ], + "classification": "Issue #374 cooperative Shared Matrix logical views and packed-even rule (ADR-CUBE-0007/0003/0009/0012)", + "name": "TileMatrixInfosMatchDimensions", + "owner_decision": "Issue #374 cooperative Shared Matrix logical views and packed-even rule (ADR-CUBE-0007/0003/0009/0012)" + }, { "after_layouts": [ "CUBE_M32" @@ -48508,6 +48664,18 @@ "sha256": "7ab210a815106263ca7af98aad5781662bdf68569e313d7e40627006fe911947" } ], + "BundleMatrixCooperativeInfosMatchDimensions": [ + { + "calls": [ + "BundleMatrixPrivateSharedViewLegal", + "BundleMatrixPrivateSharedViewLegal", + "TileCubeDescriptorLegal" + ], + "layouts": [], + "path": "asl/block/model/dispatch/matrix-scale.asl", + "sha256": "cd7218856ccaf02ffc9aa422d31939864c5e532dc8fb534581928aad1a8587c6" + } + ], "BundleMatrixCooperativeMLayout": [ { "calls": [ @@ -48535,6 +48703,29 @@ "sha256": "c2d1fb165465d2a64ce00bcf43530efef149e3d7733c5376eae206e5adfd773f" } ], + "BundleMatrixCooperativeScalesLegal": [ + { + "calls": [ + "BundleMatrixPrivateSharedViewLegal", + "BundleMatrixPrivateSharedViewLegal", + "TileCubeDescriptorLegal", + "TileInfoDescriptorLegal", + "TileMXInputTypeNeedsScale", + "TileMXInputTypeNeedsScale", + "TileMXOperandPairLegal", + "TileMXScaleCarrierType", + "TileMXScaleCarrierType", + "TileMXScaleGroupCount", + "TileMXScaleGroupCount" + ], + "layouts": [ + "CUBE_M32", + "RowMajor" + ], + "path": "asl/block/model/dispatch/matrix-scale.asl", + "sha256": "353695605f5b4a831ec7a2c936f5a1ef7e0c29e9f8408fd262457c32ba2da067" + } + ], "BundleMatrixCooperativeValidM": [ { "calls": [ @@ -48673,6 +48864,21 @@ "sha256": "4d173937a2bad00c87a8bc91a46ebccd1e21566ddba9c5b2aa9802168c753a35" } ], + "BundleMatrixPrivateSharedViewLegal": [ + { + "calls": [ + "SharedTileCapacityIsLegal", + "TileDataTypeIsFourBit", + "TileLogicalElementCapacity" + ], + "layouts": [ + "ColumnMajor", + "RowMajor" + ], + "path": "asl/block/model/dispatch/shared-cube-matrix.asl", + "sha256": "21479d534740059528edef4ffa650956a74f9c8598c18b56d5d39f48ad1b30cc" + } + ], "BundleMatrixSharedBPrimarySchemaLegal": [ { "calls": [ @@ -48711,19 +48917,22 @@ "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", + "TileDataTypeIsFourBit", + "TileDataTypeIsFourBit", "TileMXInputTypeNeedsScale", "TileMXInputTypeNeedsScale", "TileMXScaleCarrierType", "TileMXScaleCarrierType", "TileMXScaleGroupCount", "TileMXScaleGroupCount", + "TileMatrixFunctionIsGEMV", "TileMatrixFunctionUsesMX", "TileMatrixFunctionUsesMX", "TileMatrixRightGroupSourceCount" ], "layouts": [], "path": "asl/block/model/dispatch/shared-cube-matrix.asl", - "sha256": "ed52e8a6f02ac122d18689b291104ce536638da116f7ab5875202da7d4999fb3" + "sha256": "8d1c077e98be68508b07f644617a4b6a096e4087c72896d20a4f5ec3ab7854d0" } ], "BundleMatrixSharedSourceSchemaLegal": [ @@ -48735,13 +48944,14 @@ "PTOPEMaskBitOfPEIdentity", "SharedTileCooperativeMatrixReady", "SharedTileDescriptorLegal", - "SharedTileRecord" + "SharedTileRecord", + "TileDataTypeIsFourBit" ], "layouts": [ "RowMajor" ], "path": "asl/block/model/dispatch/shared-cube-matrix.asl", - "sha256": "b78b472152f19988082f2238533bbcb1b49f36d116ca744ffc759202ee34bfc0" + "sha256": "498b06ccb8055a20821e74fe872f8aa6bc6b5ceb2958f3f01b821f092b576bf1" } ], "BundleMatrixSharedSourcesReady": [ @@ -49165,6 +49375,7 @@ "SharedTileDescriptorLegal", "SharedTilePublished", "SharedTileRecord", + "TileDataTypeIsFourBit", "TileElementBits", "TileSizeCodeBytes", "UInt", @@ -49175,7 +49386,7 @@ "RowMajor" ], "path": "asl/block/model/dispatch/shared-cube-matrix.asl", - "sha256": "8cac8792e1dbe91571c11f78618834cb4d0a1d0397637100011f03dc5baee45e" + "sha256": "74406fab70a0d35442646e091048a5e72d4ec8af8f97a476fac02b7ebcfb5064" } ], "BundleSharedSubviewOffsetRawForPE": [ @@ -49903,13 +50114,11 @@ "calls": [ "BundleCubeDimensionValue", "BundleCubeDimensionValue", - "BundleCubeDimensionValue", - "IsNonzeroPowerOfTwo", - "IsNonzeroPowerOfTwo" + "BundleCubeDimensionValue" ], "layouts": [], "path": "asl/tile/model/legality/matrix-shape.asl", - "sha256": "a4a113999cbd605cf4569d21319976ee73483867dcb22663065a3f3f8d383f37" + "sha256": "38cf7662d1931de98e8df1303fe6c833b6e05cb33bb1c7f24afc94492c678bf8" } ], "BundleTMATMULMasksAgree": [ @@ -51268,7 +51477,9 @@ "BundleMatrixAccumulatorDestinationIndicesDistinct", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDynamicBindingsComplete", @@ -51374,10 +51585,8 @@ "TileMatrixFunctionUsesMX", "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLocalCubeAccumulatorSchemaLegal", "TileMatrixLocalMathematicalSourceCount", - "TileMatrixMixedInfosMatchDimensions", "TileMatrixRightGroupSourceCount", "TileMatrixRightGroupSourceCount", "TileOrdinaryMatrixAccumulatorType", @@ -51390,7 +51599,7 @@ ], "layouts": [], "path": "asl/block/model/dispatch/cube-tmatmul.asl", - "sha256": "0cc27e4d439ea68abb9bf3007324a225f04ecea0dc3609c0fd50bc692ecfceb4" + "sha256": "1dc22a691e23711bd16a33d9ac3d1346427d8b4fedea999231ef75605dd7d328" } ], "ExecuteBundleTPREFETCHOperation": [ @@ -55078,21 +55287,6 @@ "sha256": "b0f6c9324633cce062d6dc033a80acedb7e2e6a2b8b8a1ba97b3fde4056d7482" } ], - "TileMatrixInfosMatchDimensions": [ - { - "calls": [ - "IsNonzeroPowerOfTwo", - "IsNonzeroPowerOfTwo", - "IsNonzeroPowerOfTwo", - "IsNonzeroPowerOfTwo", - "TileInfoDescriptorLegal", - "TileInfoDescriptorLegal" - ], - "layouts": [], - "path": "asl/tile/model/legality/matrix-shape.asl", - "sha256": "cbf11eed4e0f70210c4b57b2b47a09cb9e6ada91f80fc6a4712bde03e5b8a62e" - } - ], "TileMatrixLeftGroupSourceCount": [ { "calls": [ @@ -57918,8 +58112,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -57929,6 +58125,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -58231,7 +58428,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -58563,8 +58759,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -58574,6 +58772,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -58877,7 +59076,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -59218,8 +59416,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -59229,6 +59429,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -59530,7 +59731,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -59863,8 +60063,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -59874,6 +60076,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -60175,7 +60378,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -60508,8 +60710,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -60519,6 +60723,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -60820,7 +61025,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -61161,8 +61365,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -61172,6 +61378,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -61473,7 +61680,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -61806,8 +62012,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -61817,6 +62025,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -62118,7 +62327,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -62451,8 +62659,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -62462,6 +62672,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -62763,7 +62974,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -63096,8 +63306,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -63107,6 +63319,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -63410,7 +63623,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -63767,8 +63979,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -63778,6 +63992,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -64079,7 +64294,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -64412,8 +64626,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -64423,6 +64639,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -64724,7 +64941,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -65057,8 +65273,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -65068,6 +65286,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -65369,7 +65588,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -65702,8 +65920,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -65713,6 +65933,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -66014,7 +66235,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -66347,8 +66567,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -66358,6 +66580,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -66661,7 +66884,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -66998,8 +67220,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -67009,6 +67233,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -67312,7 +67537,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -67646,8 +67870,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -67657,6 +67883,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -67960,7 +68187,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -68294,8 +68520,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -68305,6 +68533,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -68608,7 +68837,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -68942,8 +69170,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -68953,6 +69183,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -69256,7 +69487,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -69590,8 +69820,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -69601,6 +69833,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -69904,7 +70137,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -70256,8 +70488,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -70267,6 +70501,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -70570,7 +70805,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -70904,8 +71138,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -70915,6 +71151,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -71218,7 +71455,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -71552,8 +71788,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -71563,6 +71801,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -71866,7 +72105,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -72200,8 +72438,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -72211,6 +72451,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -72514,7 +72755,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -72840,8 +73080,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -72851,6 +73093,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -73154,7 +73397,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -73488,8 +73730,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -73499,6 +73743,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -73815,7 +74060,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -74199,8 +74443,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -74210,6 +74456,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -74525,7 +74772,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -74913,8 +75159,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -74924,6 +75172,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -75238,7 +75487,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -75619,8 +75867,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -75630,6 +75880,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -75945,7 +76196,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -76333,8 +76583,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -76344,6 +76596,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -76658,7 +76911,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -77039,8 +77291,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -77050,6 +77304,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -77351,7 +77606,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -77674,8 +77928,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -77685,6 +77941,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -77992,7 +78249,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -78371,8 +78627,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -78382,6 +78640,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -78689,7 +78948,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -79060,8 +79318,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -79071,6 +79331,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -79382,7 +79643,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -79768,8 +80028,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -79779,6 +80041,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -80090,7 +80353,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -80476,8 +80738,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -80487,6 +80751,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -80816,7 +81081,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -81238,8 +81502,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -81249,6 +81515,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -81578,7 +81845,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -82008,8 +82274,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -82019,6 +82287,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -82348,7 +82617,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -82778,8 +83046,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -82789,6 +83059,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -83118,7 +83389,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -83548,8 +83818,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -83559,6 +83831,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -83888,7 +84161,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -84318,8 +84590,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -84329,6 +84603,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -84658,7 +84933,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -85088,8 +85362,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -85099,6 +85375,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -85428,7 +85705,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -85858,8 +86134,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -85869,6 +86147,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -86198,7 +86477,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -86628,8 +86906,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -86639,6 +86919,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -86950,7 +87231,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -87336,8 +87616,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -87347,6 +87629,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -87658,7 +87941,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -88044,8 +88326,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -88055,6 +88339,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -88366,7 +88651,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -88752,8 +89036,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -88763,6 +89049,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -89074,7 +89361,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -89460,8 +89746,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -89471,6 +89759,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -89783,7 +90072,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -90155,8 +90443,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -90166,6 +90456,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -90481,7 +90772,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -90869,8 +91159,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -90880,6 +91172,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -91194,7 +91487,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -91575,8 +91867,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -91586,6 +91880,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -91902,7 +92197,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -92286,8 +92580,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -92297,6 +92593,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -92600,7 +92897,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -92935,8 +93231,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -92946,6 +93244,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -93272,7 +93571,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -93698,8 +93996,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -93709,6 +94009,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -94015,7 +94316,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -94391,8 +94691,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -94402,6 +94704,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -94707,7 +95010,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -95057,8 +95359,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -95068,6 +95372,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -95370,7 +95675,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -95704,8 +96008,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -95715,6 +96021,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -96018,7 +96325,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -96363,8 +96669,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -96374,6 +96682,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -96677,7 +96986,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -97048,8 +97356,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -97059,6 +97369,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -97362,7 +97673,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -97729,8 +98039,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -97740,6 +98052,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -98044,7 +98357,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -98422,8 +98734,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -98433,6 +98747,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -98738,7 +99053,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -99134,8 +99448,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -99145,6 +99461,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -99446,7 +99763,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -99784,8 +100100,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -99795,6 +100113,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -100104,7 +100423,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -100460,8 +100778,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -100471,6 +100791,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -100772,7 +101093,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -101111,8 +101431,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -101122,6 +101444,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -101438,7 +101761,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -101823,8 +102145,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -101834,6 +102158,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -102136,7 +102461,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -102468,8 +102792,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -102479,6 +102805,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -102782,7 +103109,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -103125,8 +103451,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -103136,6 +103464,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -103439,7 +103768,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -103808,8 +104136,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -103819,6 +104149,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -104122,7 +104453,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -104487,8 +104817,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -104498,6 +104830,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -104802,7 +105135,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -105178,8 +105510,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -105189,6 +105523,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -105494,7 +105829,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -105888,8 +106222,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -105899,6 +106235,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -106214,7 +106551,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -106602,8 +106938,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -106613,6 +106951,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -106927,7 +107266,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -107308,8 +107646,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -107319,6 +107659,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -107634,7 +107975,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -108022,8 +108362,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -108033,6 +108375,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -108347,7 +108690,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -108728,8 +109070,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -108739,6 +109083,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -109041,7 +109386,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -109378,8 +109722,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -109389,6 +109735,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -109704,7 +110051,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -110092,8 +110438,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -110103,6 +110451,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -110417,7 +110766,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -110798,8 +111146,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -110809,6 +111159,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -111125,7 +111476,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -111509,8 +111859,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -111520,6 +111872,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -111836,7 +112189,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -112220,8 +112572,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -112231,6 +112585,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -112546,7 +112901,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -112934,8 +113288,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -112945,6 +113301,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -113259,7 +113616,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -113640,8 +113996,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -113651,6 +114009,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -113957,7 +114316,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -114309,8 +114667,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -114320,6 +114680,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -114625,7 +114986,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -114981,8 +115341,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -114992,6 +115354,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -115293,7 +115656,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -115563,8 +115925,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -115574,6 +115938,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -115890,7 +116255,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -116274,8 +116638,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -116285,6 +116651,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -116601,7 +116968,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -116985,8 +117351,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -116996,6 +117364,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -117311,7 +117680,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -117699,8 +118067,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -117710,6 +118080,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -118024,7 +118395,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -118405,8 +118775,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -118416,6 +118788,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -118727,7 +119100,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -119113,8 +119485,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -119124,6 +119498,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -119435,7 +119810,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -119821,8 +120195,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -119832,6 +120208,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -120161,7 +120538,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -120583,8 +120959,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -120594,6 +120972,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -120923,7 +121302,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -121353,8 +121731,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -121364,6 +121744,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -121693,7 +122074,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -122123,8 +122503,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -122134,6 +122516,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -122463,7 +122846,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -122893,8 +123275,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -122904,6 +123288,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -123233,7 +123618,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -123663,8 +124047,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -123674,6 +124060,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -124003,7 +124390,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -124433,8 +124819,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -124444,6 +124832,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -124773,7 +125162,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -125203,8 +125591,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -125214,6 +125604,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -125543,7 +125934,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -125973,8 +126363,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -125984,6 +126376,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -126295,7 +126688,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -126681,8 +127073,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -126692,6 +127086,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -127003,7 +127398,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -127389,8 +127783,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -127400,6 +127796,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -127711,7 +128108,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -128097,8 +128493,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -128108,6 +128506,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -128419,7 +128818,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -128805,8 +129203,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -128816,6 +129216,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -129132,7 +129533,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -129516,8 +129916,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -129527,6 +129929,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -129830,7 +130233,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -130168,8 +130570,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -130179,6 +130583,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -130483,7 +130888,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -130869,8 +131273,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -130880,6 +131286,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -131184,7 +131591,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -131563,8 +131969,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -131574,6 +131982,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -131889,7 +132298,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -132277,8 +132685,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -132288,6 +132698,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -132602,7 +133013,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -132983,8 +133393,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -132994,6 +133406,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -133309,7 +133722,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -133697,8 +134109,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -133708,6 +134122,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -134022,7 +134437,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -134403,8 +134817,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -134414,6 +134830,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -134718,7 +135135,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -135067,8 +135483,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -135078,6 +135496,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -135394,7 +135813,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -135779,8 +136197,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -135790,6 +136210,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -136093,7 +136514,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -136434,8 +136854,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -136445,6 +136867,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -136760,7 +137183,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -137148,8 +137570,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -137159,6 +137583,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -137473,7 +137898,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -137854,8 +138278,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -137865,6 +138291,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -138166,7 +138593,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -138491,8 +138917,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -138502,6 +138930,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -138808,7 +139237,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -139152,8 +139580,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -139163,6 +139593,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -139478,7 +139909,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", @@ -139866,8 +140296,10 @@ "BundleMatrixArchitecturalSourceAt", "BundleMatrixCScaleDestinationIndicesDistinct", "BundleMatrixCooperativeCurrentPEMask", + "BundleMatrixCooperativeInfosMatchDimensions", "BundleMatrixCooperativeMLayout", "BundleMatrixCooperativeMPerPE", + "BundleMatrixCooperativeScalesLegal", "BundleMatrixCooperativeValidM", "BundleMatrixDestinationAt", "BundleMatrixDestinationCount", @@ -139877,6 +140309,7 @@ "BundleMatrixPostProcessSourcesLegal", "BundleMatrixPrimaryDestinationCapacityBytes", "BundleMatrixPrimaryDestinationHand", + "BundleMatrixPrivateSharedViewLegal", "BundleMatrixSharedBPrimarySchemaLegal", "BundleMatrixSharedLeftPrimarySchemaLegal", "BundleMatrixSharedPrimarySchemaLegal", @@ -140191,7 +140624,6 @@ "TileMatrixInfoBiasLegal", "TileMatrixInfoOptionalScalesLegal", "TileMatrixInfoShapeLegal", - "TileMatrixInfosMatchDimensions", "TileMatrixLeftGroupSourceCount", "TileMatrixLocalAScaleSchemaLegal", "TileMatrixLocalBScaleSchemaLegal", diff --git a/spec/evidence/mnemonic-descriptions/coverage-summary.json b/spec/evidence/mnemonic-descriptions/coverage-summary.json index 2bccf037e..ddfc3e1f4 100644 --- a/spec/evidence/mnemonic-descriptions/coverage-summary.json +++ b/spec/evidence/mnemonic-descriptions/coverage-summary.json @@ -1 +1 @@ -{"archive_pages_dispositioned":697,"archive_pages_total":697,"archive_sha256":"46fc43641fe1394f27f4961734940355e83909df08e4e4a489f02ff1e4a28aa5","atomic_claims":19441,"baseline_commit":"564ac2d8d868c441a8dc5e5f4d44efa7533a911d","current_mnemonics":665,"reader_guides_complete":911,"retired_units_retained":54,"review_batches":{"accepted":43,"batches":43},"schema_version":1,"statuses":{"complete":911,"pending":8},"surfaces":{"arch":71,"block":159,"scalar":488,"tile":201},"target_pages":919,"traceability_sha256":"7319cc87776c4e012e8245c19a9150da236bbbc1d014d61210c1173de2d393ec","unresolved_required_definition_gaps":0,"zh_CN":{"review_batches":{"accepted":43,"batches":43},"statuses":{"complete":911,"pending":8}}} +{"archive_pages_dispositioned":697,"archive_pages_total":697,"archive_sha256":"46fc43641fe1394f27f4961734940355e83909df08e4e4a489f02ff1e4a28aa5","atomic_claims":19441,"baseline_commit":"564ac2d8d868c441a8dc5e5f4d44efa7533a911d","current_mnemonics":665,"reader_guides_complete":911,"retired_units_retained":54,"review_batches":{"accepted":43,"batches":43},"schema_version":1,"statuses":{"complete":911,"pending":8},"surfaces":{"arch":71,"block":159,"scalar":488,"tile":201},"target_pages":919,"traceability_sha256":"41a4f1508d21731e95525e58a0e339513a39f54ecb3b3e5ad097366200f66971","unresolved_required_definition_gaps":0,"zh_CN":{"review_batches":{"accepted":43,"batches":43},"statuses":{"complete":911,"pending":8}}} diff --git a/spec/evidence/release-traceability-readiness.json b/spec/evidence/release-traceability-readiness.json index 3bdcbe2b1..f94abd12a 100644 --- a/spec/evidence/release-traceability-readiness.json +++ b/spec/evidence/release-traceability-readiness.json @@ -1588,6 +1588,7 @@ "PTO-AVS-BLOCK-SHARED-TLSU-PE-OWNER-008", "PTO-AVS-BLOCK-TMATMUL-INACTIVE-SHARED-029", "PTO-AVS-BLOCK-TMATMUL-SHARED-LOCAL-PRIVATE-FOURSTREAM-038", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-SUBVIEW-READINESS-053", "PTO-AVS-BLOCK-TMATMUL-SHARED-READINESS-012", "PTO-AVS-BLOCK-TMATMUL-SHARED-UNDEF-020", "PTO-AVS-BLOCK-TMATMUL-SHARED-WAIT-002", @@ -1969,6 +1970,9 @@ "tests": [ "PTO-AVS-BLOCK-MODEL-OPERANDS-SHARED-GENERATION-STATIC-001", "PTO-AVS-BLOCK-SHARED-LOCAL-SUBVIEW-FOURSTREAM-011", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-SUBVIEW-046", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-SUBVIEW-ATOMICITY-052", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-SUBVIEW-READINESS-053", "PTO-AVS-BLOCK-TMATMUL-SHARED-SUBVIEW-033", "PTO-AVS-BLOCK-TMATMUL-SHARED-SUBVIEW-PREFLIGHT-032", "PTO-AVS-BLOCK-TMATMUL-SHARED-SUBVIEW-SINGLE-ROW-037" @@ -3108,7 +3112,8 @@ ], "tests": [ "PTO-AVS-BLOCK-TMATMUL-ACC-EXEC-001", - "PTO-AVS-BLOCK-TMATMUL-SHARED-BSTART-FAMILY-036" + "PTO-AVS-BLOCK-TMATMUL-SHARED-BSTART-FAMILY-036", + "PTO-AVS-BLOCK-TMATMUL-SHARED-BSTART-NONPOWER-038" ] }, { @@ -3132,7 +3137,8 @@ ], "tests": [ "PTO-AVS-BLOCK-TMATMUL-BIAS-EXEC-001", - "PTO-AVS-BLOCK-TMATMUL-SHARED-BSTART-FAMILY-036" + "PTO-AVS-BLOCK-TMATMUL-SHARED-BSTART-FAMILY-036", + "PTO-AVS-BLOCK-TMATMUL-SHARED-BSTART-NONPOWER-038" ] }, { @@ -3158,6 +3164,7 @@ "PTO-AVS-BLOCK-TMATMUL-DEFAULT-001", "PTO-AVS-BLOCK-TMATMUL-EXEC-001", "PTO-AVS-BLOCK-TMATMUL-SHARED-BSTART-FAMILY-036", + "PTO-AVS-BLOCK-TMATMUL-SHARED-BSTART-NONPOWER-038", "PTO-AVS-BLOCK-TMATMUL-TYPES-001" ] }, @@ -3185,6 +3192,7 @@ ], "tests": [ "PTO-AVS-BLOCK-TMATMUL-SHARED-BSTART-FAMILY-036", + "PTO-AVS-BLOCK-TMATMUL-SHARED-BSTART-NONPOWER-038", "PTO-AVS-BLOCK-TMATMULMX-ACC-EXEC-001" ] }, @@ -3211,6 +3219,7 @@ ], "tests": [ "PTO-AVS-BLOCK-TMATMUL-SHARED-BSTART-FAMILY-036", + "PTO-AVS-BLOCK-TMATMUL-SHARED-BSTART-NONPOWER-038", "PTO-AVS-BLOCK-TMATMULMX-BIAS-EXEC-001" ] }, @@ -3237,6 +3246,7 @@ ], "tests": [ "PTO-AVS-BLOCK-TMATMUL-SHARED-BSTART-FAMILY-036", + "PTO-AVS-BLOCK-TMATMUL-SHARED-BSTART-NONPOWER-038", "PTO-AVS-BLOCK-TMATMULMX-EXEC-001" ] }, @@ -3857,9 +3867,13 @@ "PTO-AVS-BLOCK-TMATMUL-INACTIVE-LOCAL-027", "PTO-AVS-BLOCK-TMATMUL-INACTIVE-SHARED-029", "PTO-AVS-BLOCK-TMATMUL-INACTIVE-STRUCTURAL-028", + "PTO-AVS-BLOCK-TMATMUL-SHARED-LARGE-SOURCE-044", "PTO-AVS-BLOCK-TMATMUL-SHARED-LOCAL-PRIVATE-FOURSTREAM-038", "PTO-AVS-BLOCK-TMATMUL-SHARED-MASK-015", "PTO-AVS-BLOCK-TMATMUL-SHARED-MSHARD-021", + "PTO-AVS-BLOCK-TMATMUL-SHARED-NONPOWER-RANGES-039", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-TRANSPOSE-040", + "PTO-AVS-BLOCK-TMATMUL-SHARED-RIGHT-NONPOWER-043", "PTO-AVS-BLOCK-TMATMUL-SHARED-TRANSPOSE-030" ] }, @@ -3975,10 +3989,12 @@ "PTO-AVS-BLOCK-SHARED-CUBE-SCALE-CONTROL-ZERO-004", "PTO-AVS-BLOCK-SHARED-CUBE-SCALE-HETEROGENEOUS-003", "PTO-AVS-BLOCK-SHARED-CUBE-SCALE-HIF4-TRANSPOSE-006", + "PTO-AVS-BLOCK-SHARED-CUBE-SCALE-NONPOWER-045", "PTO-AVS-BLOCK-SHARED-CUBE-SCALE-TRANSPOSE-002", "PTO-AVS-BLOCK-SHARED-CUBE-SCALE-TRANSPOSE-005", "PTO-AVS-BLOCK-TMATMUL-HIF4-FAULT-002", "PTO-AVS-BLOCK-TMATMUL-MX-SHARED-RIGHT-001", + "PTO-AVS-BLOCK-TMATMUL-SHARED-HIF4-PACKED-SHAPE-051", "PTO-AVS-BLOCK-TMATMULMX-BIAS-EXEC-001", "PTO-AVS-BLOCK-TMATMULMX-HIF4-002", "PTO-AVS-BLOCK-TMATMULMX-LOCAL-SCALE-001", @@ -4021,6 +4037,7 @@ "PTO-AVS-BLOCK-SHARED-CUBE-SCALE-CONTROL-ZERO-004", "PTO-AVS-BLOCK-SHARED-CUBE-SCALE-HETEROGENEOUS-003", "PTO-AVS-BLOCK-SHARED-CUBE-SCALE-HIF4-TRANSPOSE-006", + "PTO-AVS-BLOCK-SHARED-CUBE-SCALE-NONPOWER-045", "PTO-AVS-BLOCK-SHARED-CUBE-SCALE-TRANSPOSE-002", "PTO-AVS-BLOCK-SHARED-CUBE-SCALE-TRANSPOSE-005", "PTO-AVS-BLOCK-TGEMV-SHARED-001", @@ -4030,10 +4047,27 @@ "PTO-AVS-BLOCK-TMATMUL-MX-SHARED-RIGHT-001", "PTO-AVS-BLOCK-TMATMUL-SHARED-B-PHYSICAL-SHAPE-031", "PTO-AVS-BLOCK-TMATMUL-SHARED-BSTART-FAMILY-036", + "PTO-AVS-BLOCK-TMATMUL-SHARED-BSTART-NONPOWER-038", + "PTO-AVS-BLOCK-TMATMUL-SHARED-HIF4-PACKED-SHAPE-051", + "PTO-AVS-BLOCK-TMATMUL-SHARED-LARGE-SOURCE-044", "PTO-AVS-BLOCK-TMATMUL-SHARED-LAYOUT-014", + "PTO-AVS-BLOCK-TMATMUL-SHARED-LOCAL-PACKED-A-042", "PTO-AVS-BLOCK-TMATMUL-SHARED-MSHARD-021", + "PTO-AVS-BLOCK-TMATMUL-SHARED-NONPOWER-RANGES-039", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-EVEN-041", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-EVEN-N-TRANSPOSE-048", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-SUBVIEW-046", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-SUBVIEW-ATOMICITY-052", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-SUBVIEW-READINESS-053", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-TIGHT-ODD-N-047", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-TRANSPOSE-040", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-TRANSPOSED-N-UPPER-055", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-TYPES-049", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-TYPES-BOUNDARY-050", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-UPPER-EVEN-054", "PTO-AVS-BLOCK-TMATMUL-SHARED-READINESS-012", "PTO-AVS-BLOCK-TMATMUL-SHARED-READONLY-018", + "PTO-AVS-BLOCK-TMATMUL-SHARED-RIGHT-NONPOWER-043", "PTO-AVS-BLOCK-TMATMUL-SHARED-ROLLBACK-019", "PTO-AVS-BLOCK-TMATMUL-SHARED-SUBVIEW-033", "PTO-AVS-BLOCK-TMATMUL-SHARED-SUBVIEW-PREFLIGHT-032", @@ -18730,6 +18764,7 @@ "ADR-STATE-0008" ], "tests": [ + "PTO-AVS-SCALAR-MODEL-SYS-SEMANTICS-STATIC-001", "PTO-AVS-THREAD-ID-FOUR-PE-001", "PTO-AVS-THREAD-ID-LIFECYCLE-001", "PTO-AVS-THREAD-ID-PLACEMENT-001", @@ -19167,6 +19202,7 @@ "tests": [ "PTO-AVS-BLOCK-TGEMV-SHARED-001", "PTO-AVS-BLOCK-TMATMUL-AUX-SHAPE-001", + "PTO-AVS-BLOCK-TMATMUL-CUBE-DIMENSIONS-003", "PTO-AVS-BLOCK-TMATMUL-DEFAULT-001", "PTO-AVS-BLOCK-TMATMUL-DIM-001", "PTO-AVS-BLOCK-TMATMUL-EXEC-001", @@ -19175,7 +19211,19 @@ "PTO-AVS-BLOCK-TMATMUL-PRESENCE-001", "PTO-AVS-BLOCK-TMATMUL-REUSED-DESTINATION-SHAPE-011", "PTO-AVS-BLOCK-TMATMUL-SHARED-001", + "PTO-AVS-BLOCK-TMATMUL-SHARED-LARGE-SOURCE-044", + "PTO-AVS-BLOCK-TMATMUL-SHARED-LOCAL-PACKED-A-042", + "PTO-AVS-BLOCK-TMATMUL-SHARED-NONPOWER-RANGES-039", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-EVEN-041", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-EVEN-N-TRANSPOSE-048", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-SUBVIEW-046", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-TIGHT-ODD-N-047", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-TRANSPOSE-040", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-TRANSPOSED-N-UPPER-055", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-TYPES-049", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-UPPER-EVEN-054", "PTO-AVS-BLOCK-TMATMUL-SHARED-PAIR-001", + "PTO-AVS-BLOCK-TMATMUL-SHARED-RIGHT-NONPOWER-043", "PTO-AVS-BLOCK-TMATMUL-SHARED-UNDEF-020", "PTO-AVS-BLOCK-TMATMUL-SHARED-WAIT-002", "PTO-AVS-BLOCK-TMATMUL-TYPES-001", @@ -20478,7 +20526,7 @@ "asl/block/attributes/B.CATR.asl": "f89ef4263f43b573e73c193809457d609da297714abf0a005611eb71f1fc4e6f", "asl/block/attributes/B.DATR.asl": "cd9ff31f8d5b04407286bda6ab13d204f1c710560f13f19b93d9920de23e13ed", "asl/block/attributes/B.DIM.asl": "71167dba1d74b0108aaddccefd618a294f5f0f526ffd421987440bcd73573219", - "asl/block/attributes/B.FPATR.asl": "ef5e3163cf0edf14c5b1af013507fab4c12815374ca930a21cbe28bb7797348e", + "asl/block/attributes/B.FPATR.asl": "e4abcfc0e95de8ce9f8a728c441b38faadb28a2a622b0a81001868f006ac6075", "asl/block/attributes/C.B.DIMI.asl": "e1c951c4e7f90f6fb1f7f23959decaac35a40ad39ad397342914672ebb16cd2f", "asl/block/encoding/C.BSTART.FP.asl": "b2d2fda79439d57a9f61af2b7ac5542d7b592229ccb6c776736c63b7e4311147", "asl/block/encoding/C.BSTART.STD.asl": "3958ff83d4afe426a4227c05b09d186d98ac86dc425db55ea462de9f0f4a4f52", @@ -20523,12 +20571,12 @@ "asl/block/execution/BSTART.TGEMVMX.asl": "63b6487a5f3467bf2badc5dcd35aaba9fb67568c93bc0d840f1ecff22d01f181", "asl/block/execution/BSTART.TIMG2COL.asl": "604593ffb1f98092c5984ea80f168d1edc207f38085c5ba7ad92ce5752aaa532", "asl/block/execution/BSTART.TLOAD.asl": "13d6c0b3d1cfed917b8d3c0f7cb9270b958dbafc7714b8e99a71641a952b0fc5", - "asl/block/execution/BSTART.TMATMUL.ACC.asl": "38826b44d0faf38383fb2dcd63dc984687830a0fccf0c6eab6e6575299a6b2e1", - "asl/block/execution/BSTART.TMATMUL.BIAS.asl": "c6b6af2f11bcdcb7c90c7c7d366dc8948772e67746e8fdce6b0f74eb0c53c9af", - "asl/block/execution/BSTART.TMATMUL.asl": "d0338560a8a3145719e27c22142cd4b564e4f41e598bf352babc483be0b66599", - "asl/block/execution/BSTART.TMATMULMX.ACC.asl": "c8dad464f5242e61498bb765ebce262b5460c35cdc67e50f50703ad2080c2f1c", - "asl/block/execution/BSTART.TMATMULMX.BIAS.asl": "11dc4d8f9a173c2b961ae04489f0f0d5c8d848018c18beabcc97e77d5d5dd64e", - "asl/block/execution/BSTART.TMATMULMX.asl": "958928b59039e02f3f5b63e358f680e76255abd6c8b1ddb51e88d990ccb190a3", + "asl/block/execution/BSTART.TMATMUL.ACC.asl": "9c8eb3b94341ea21b1795ea7f036a5cfafa64cf5029ceabe433b0d7360079557", + "asl/block/execution/BSTART.TMATMUL.BIAS.asl": "844d6f9d9c6f826b68f1e25ddf459bb94916970e1ca0d370e8ad0af964e69411", + "asl/block/execution/BSTART.TMATMUL.asl": "07dd04dc43a87b0818a77a183895932e757575e7cd120168afdce9d95fae62a6", + "asl/block/execution/BSTART.TMATMULMX.ACC.asl": "b09616d1a7817cae6c33d7c47ad5ead01137a3ec002abd26027a3e106cd176e4", + "asl/block/execution/BSTART.TMATMULMX.BIAS.asl": "a82e8649a22cce95fa025fef8851e08d48864ae802334934527dc9f13589a5a7", + "asl/block/execution/BSTART.TMATMULMX.asl": "ad9710467dc2bf608f11cba73011bdbeae9a81425e881c6aa856fd7da50f0e59", "asl/block/execution/BSTART.TMOV.asl": "348b0cf4f39e68ca30aa0450a1232f08b501d3b3f7049f50a6a4faa1cf110235", "asl/block/execution/BSTART.TPREFETCH.asl": "440aa503435e8008f1d9d945cd9851c7d44889c000b98d6b0eee1aa8b3e2a4e6", "asl/block/execution/BSTART.TSTORE.asl": "f0302147b483fab8c0c1d29bf1f5ad2ca268fa139bd228cdcf69bb9f263616c1", @@ -20558,7 +20606,7 @@ "asl/block/model/dispatch/comparison-schema.asl": "34e0877a3a4b17b9ca9e8b9aaa9b9cdadce7194a72c3ffa2ad460559bae7f31c", "asl/block/model/dispatch/cube-accumulator-routing.asl": "58316f54c458f0e164ccd4bcc7b92808494b84e303bfa5d6471586130a00ca3b", "asl/block/model/dispatch/cube-destination.asl": "c7666bac26ad518a4f81f3670ec6c71c1ad15973bf1f9014d7079e82adf954fa", - "asl/block/model/dispatch/cube-tmatmul.asl": "47aee38948cdc4340cb35a630e3fa3b6f315a6c3be47339ddef77524c1ec9108", + "asl/block/model/dispatch/cube-tmatmul.asl": "1fdaacff510a0a9204e8d1dd242cfe2042d0065749bcf5dca17aba48c1d8c66b", "asl/block/model/dispatch/decode.asl": "6b13e2b67468e5eb8e7e956c2e7f073ef4965598c55d8365b0f7c8cda0e01fd6", "asl/block/model/dispatch/descriptor-legality.asl": "0bc759593abf4b5af2309d2c53d080719c34c47384ea8b95a1cf3e2be64e90c0", "asl/block/model/dispatch/destination-auxiliary.asl": "2c5913076993c9206d95bacbe62443ebdbb2fb1a9e30bf537c5b33eb2782b16c", @@ -20570,12 +20618,12 @@ "asl/block/model/dispatch/generation-schema.asl": "76cfceccdce296468d71b0e4605eb4b0b2702c5ea6bdabec16826b9517f86653", "asl/block/model/dispatch/gm-obligation-dispatch.asl": "5e3c44ef17111fffc114f457b13ee170d17a95171eb03abea09167fd973df7b1", "asl/block/model/dispatch/lea-schema.asl": "913306d0fb506c01067f5b41bd3d8451c35ed8d1a68f6f2ae467ad18ac5c3eb0", - "asl/block/model/dispatch/matrix-scale.asl": "b6ec56e602786648e5e764aafef07837029b84b9595707d389bd1b998cab4505", + "asl/block/model/dispatch/matrix-scale.asl": "829c5e871e5f4719fa65e7f642e757b7771b35e92f8f6102673ef1a55286c035", "asl/block/model/dispatch/numeric-control.asl": "8372aa20c99f953c426e489be3555430cc0fe240d4808fda34180a9a11f5a8f7", "asl/block/model/dispatch/predicate-destination.asl": "a3bd075f96a4c8ea0340e24afc25d00996bb45671de859ffec0327e401aafe1c", "asl/block/model/dispatch/reduction-schema.asl": "0abfc3f6391e5ff4907be7e0571314c80106a8760bb7af6cae8cae811a64f392", "asl/block/model/dispatch/scalar-schema.asl": "03939cf0b88b2e1677a6384790028a5e8f68dceded1b7bc880caef6da8161a6f", - "asl/block/model/dispatch/shared-cube-matrix.asl": "0b9fdd4d8d39a9679ff275a866fff510fdc407a163b6645cfee7b3db75db6d8f", + "asl/block/model/dispatch/shared-cube-matrix.asl": "070edfcfc15de9cc36bfbcf917ce145d74453aa09e65a5de059a27a2200b1444", "asl/block/model/dispatch/shared-tlsu.asl": "e11d8c6bdbb46782e62d6ab9701878d69d4b3e911a9eb9fd4561f21046f6edf0", "asl/block/model/dispatch/start.asl": "5d9b10ae87d39befc98d966b6ca63a4c600879d2b2b3b131a101b48793f7a127", "asl/block/model/dispatch/tcvt-destination.asl": "8ad3e52ffa7b62d772a54ef45378d8d8671859bec47b3cac8121b0373ecb143a", @@ -21158,12 +21206,12 @@ "asl/tile/layout-and-rearrangement/layout/TPERMUTE.asl": "b08a5660b17869532091d2dc678d6d99ea7f9220a8cc98aa04d9332d2dd91373", "asl/tile/layout-and-rearrangement/layout/TSHUF.asl": "e844c0e4e0a2f9c43e304c83dcdb92ea4ba399cc0c3624834c0b4e0160e7360a", "asl/tile/layout-and-rearrangement/layout/TUNPACK.asl": "c97b2232197ac1c3ee4a45066fc582fcec885f616a6387c26f6fa9d42088967e", - "asl/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL.asl": "94c646da900a24caffc2d04d08882c79c0cba19fed25bb241f5ce8e5fe28bdd3", - "asl/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_ACC.asl": "e51b6f72beeece9e6927f166c558912cdfdee05b41f33f3dd1693368460f0d4b", - "asl/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_BIAS.asl": "39ec166460045ef78db9ee8f2eac5b7ee0ba11d936ea3884c28763e525317d13", - "asl/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX.asl": "023f086a49364a3db28bb81ad660f09c54c1403c6c65dfd0a9f95aa9c331b9a5", - "asl/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX_ACC.asl": "3b48ce3f8d7b0ef9db06717a4f1f2322438165d24ab800029c1331fbcb0efb2d", - "asl/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX_BIAS.asl": "37dd5af210f191d092395300a08915d3b0efa291618bc5a51d6c7d1ed805b943", + "asl/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL.asl": "bd7ba3931e64a8f23b79b75b6236c1d7b72c7b93610af78a6644a35125440a6f", + "asl/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_ACC.asl": "30830108353acc8a27913b26bcfd0920663cdb61b88b25f0c26a0103bc83560d", + "asl/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_BIAS.asl": "d0ab732cf724c72218efb46d3a86b9f12cefdcbc068a5d50c5d232b28245f4b7", + "asl/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX.asl": "ba7a83d3d4fe5698d3505fda4ed53463077198841a99857d18844bf5d4b02237", + "asl/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX_ACC.asl": "dac97880e28d4cedb9602cdb367b849f5963989e8e521606416b0044480cd1aa", + "asl/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX_BIAS.asl": "0984507f716c417e3f189f546477e04e9a4932ed5b91640f2b6f43eba044f239", "asl/tile/matrix-and-matrix-vector/matrix-vector/TGEMV.asl": "7178b7e950dc061eeaaab3c7f5a5dc4d72be8e8db5e4acdd55df2598e004c4ae", "asl/tile/matrix-and-matrix-vector/matrix-vector/TGEMV_ACC.asl": "71a6c18231f0899965b0ae09f3104c5c757736c64b972e278095a49b99433321", "asl/tile/matrix-and-matrix-vector/matrix-vector/TGEMV_BIAS.asl": "09c8b3e230d65c41ac2648d228f694c6c7ebb26df94a73ab5c520b0fc0c100a5", @@ -21210,7 +21258,7 @@ "asl/tile/model/dispatch/tile-scalar-and-immediate.asl": "58be9ece1ee0365bbf5f0d24fdeab752ad926770de8aa2cc1342814fbf361a02", "asl/tile/model/dispatch/top-level.asl": "d0257c1ac5745d3e64f52ba86334c9c8b3f8ea31ef7e05c9966a6cd36eeb1ea7", "asl/tile/model/execution/comparison.asl": "5788eda42d398c7780ce1cf3e1c028579b9d8ebb4b7870e2ee9e97ab34515f9d", - "asl/tile/model/execution/cube.asl": "52a8a594dc46c4873649563efa843c450fd8b876d00e859c1be6fff2f78b1880", + "asl/tile/model/execution/cube.asl": "365bbba65a64acf7c9155892ec5691edeef2c8872787e24e09c1c8a815e83e12", "asl/tile/model/execution/elementwise.asl": "ff263b4125929f672dbf818593528197cd8a180eaea0d433122b3853c478f77b", "asl/tile/model/execution/execution-mask-comparison.asl": "d0e9f8c50c0872de8431a3660bf54811daadcdf31522ef571349693c7756051c", "asl/tile/model/execution/execution-mask-state.asl": "8ee7f9b3bc758f8dec6592a6476d1ffb900ba4bd01b775913ae7b132944fb01c", @@ -21224,7 +21272,7 @@ "asl/tile/model/execution/lea.asl": "efbe6022bcec180cacd27f72578cc7f8d960155e338eb17f6723e85e2cf2aa28", "asl/tile/model/execution/matrix-postprocess.asl": "5b15b66c3b6fc38c9a0e76dfd49138164aadb96bc0b60a805168da69934ba966", "asl/tile/model/execution/matrix-quantization.asl": "1fd3e0ab1b02fe8b7e5bf91c8c158ce0c24e160b332351b5d45791caf9223a1c", - "asl/tile/model/execution/matrix-scale.asl": "50eaa556ca4675825973ab4e82fbc2d0f78f6266dd509455970069314ff142a5", + "asl/tile/model/execution/matrix-scale.asl": "84299023df06461c3cf2ba87e7b3ab6bc12870e7b993a75bb6aabe4ec9644ed1", "asl/tile/model/execution/minmax.asl": "07b32149cf0aaa84b0dcb93b367a834e191678fd3f2d390c0907f266d3b420c0", "asl/tile/model/execution/postprocess.asl": "f91f51818de72ecad6718bf16935a798219bcdfb5ca136c37ad5816594b08c09", "asl/tile/model/execution/predicate-carriers.asl": "d50ddcf6854851f249235f71ffe7e3f499e489fb8d131a76f8e8fe9d288461de", @@ -21241,11 +21289,11 @@ "asl/tile/model/legality/layout-rearrangement.asl": "141345f4fc0a6b3302f408c53f4e98f17014323dedf4be4a41825e880fa04b6c", "asl/tile/model/legality/lea-operands.asl": "781c3adc7ae6db2cd99cfb4548b22d0cad4fe7f63748d399f99a2629fb2fda21", "asl/tile/model/legality/matrix-cube-primary.asl": "cf071efb3f2059cbe3c39092571ce115f7af0f25e41913df928ec970a38dbf96", - "asl/tile/model/legality/matrix-functions.asl": "23c24fa758f0ef4db5ad20b01d9c2ddb6e4bd99f4581354d5f1d92efad894e1e", + "asl/tile/model/legality/matrix-functions.asl": "c02d6721e43075b6e133f5a382be7666b348dcd770d5f0b24bc6d56f1a5088b7", "asl/tile/model/legality/matrix-info-descriptor.asl": "09b45317b8a49ea7fe229463a18ac82deddf2bb3fe1a085bf6d3fc5150af65ff", "asl/tile/model/legality/matrix-operands.asl": "63a33e779d5839dac4a3c1ceb8c0bbea1096c280e1382f454b895aa2da96c6dc", "asl/tile/model/legality/matrix-postprocess.asl": "99d00d0d5d6e5abe933a8dccaff726c002c22ace979fc8a5285b6673e1106fa1", - "asl/tile/model/legality/matrix-shape.asl": "ed34fe4e9a2a0ddd1ac57c0f3036c05ef38bec228ce8db33adc7164975630734", + "asl/tile/model/legality/matrix-shape.asl": "57f082a6920f94ad732446fccca98dc7b8c9a442b99d7607d64c764168ee676b", "asl/tile/model/legality/memory-schema.asl": "28bc75b042158889bb42f6d9df3658f204979c85d77caba49b2df9a84214805f", "asl/tile/model/legality/operand-schema.asl": "a48bd3f8e80ee0a3562f94323eb10d55331898cdf4645ccfa2a70013fb50d86f", "asl/tile/model/legality/pe-mask.asl": "0725c4ce0deb99b2d0f870a94fb609288adf149dd33300a33e096046a90d54bb", @@ -21442,12 +21490,12 @@ "docs/block/execution/BSTART.TGEMVMX.md": "a126b38a15efebd44814c2d73c027d88c977b0831c1a188e015334ca6c4c307e", "docs/block/execution/BSTART.TIMG2COL.md": "8561c0c228a964f8af83fee2893a383a578d0f82bc89bf6c638e3b2006f99553", "docs/block/execution/BSTART.TLOAD.md": "3982ca103f87842196f089487e28803c6c1ad24cf7514f03d039583cc534d7db", - "docs/block/execution/BSTART.TMATMUL.ACC.md": "5d08a99bd40e0d1c23127b52937fb5c997a0803e9ab71907fa934f9a0ca59c9e", - "docs/block/execution/BSTART.TMATMUL.BIAS.md": "d2d2a0fb4b59b5d763aa45dda236be885eb69bf40a0924f7351b4da9b75bf3c5", - "docs/block/execution/BSTART.TMATMUL.md": "38ccb8053f00332719968bbe2b0c6b3fb9b7fca58a9422374e368559ae030550", - "docs/block/execution/BSTART.TMATMULMX.ACC.md": "ee6aebeddff5c1dc7a1e96c6b33952338896f34f97b494b9e7069495840a75dc", - "docs/block/execution/BSTART.TMATMULMX.BIAS.md": "80ede31f1d45a72ecdd7872c8b54d0ce9d25bc37e6e7936f0038f0cea7d525db", - "docs/block/execution/BSTART.TMATMULMX.md": "7bcdfdb354a514092c445715ce1961fbd8cda94abc1ced316f8b4eb3f939cd9d", + "docs/block/execution/BSTART.TMATMUL.ACC.md": "57558152e8e9405b1309e3693df757f0dc5805cd3ae431e2f56345e5e13b5277", + "docs/block/execution/BSTART.TMATMUL.BIAS.md": "82f4c01a657dde7098734ea99eccceb507947fbb7f22586b79a3bb3ae1a09ea2", + "docs/block/execution/BSTART.TMATMUL.md": "3cca3797f9436d7a00bf2c90bdeb587e975d72f452d87724efa3c54b2a41db3f", + "docs/block/execution/BSTART.TMATMULMX.ACC.md": "c35e750570487d890005345f4e64dcdb86baa33ca9697c392774f5b16461484a", + "docs/block/execution/BSTART.TMATMULMX.BIAS.md": "0b0f8d2fc154fe06588b925805eff097133bd5014f0c522ba6d71bcd8e7a4241", + "docs/block/execution/BSTART.TMATMULMX.md": "8176f0c0498064f8ed93b826ad59c4570e3d18ac5ddcdb0471b7797999116d0b", "docs/block/execution/BSTART.TMOV.md": "5b98f68a7cab0a5a5efcd3c938bd5bc2532265c2bbf25ee4573188d5869c86f4", "docs/block/execution/BSTART.TPREFETCH.md": "e464f1e4bf46189a838873b17003523df22be9f47f90560077920fee72c7d9b9", "docs/block/execution/BSTART.TSTORE.md": "c9aee4a02e0c04c12f0dfec25a7c4edafc25245018ec37db9c1dc5c1fbee83c2", @@ -21477,7 +21525,7 @@ "docs/block/model/dispatch/comparison-schema.md": "10d92a2735c74e6b7b484e0309e4ec709c0b155a0befb213947965c067aa4515", "docs/block/model/dispatch/cube-accumulator-routing.md": "5d9b47919bc5dff5faf58162741a30e5d45b1a98b208fd3ccbabc656f8efeadc", "docs/block/model/dispatch/cube-destination.md": "7b9370a83fb6cc2cc775e1603e7d6c9d67e231431ef4f0d72a808359ef323955", - "docs/block/model/dispatch/cube-tmatmul.md": "627ac50026b0f218e15f7e2879d685a4519604c0dc877f96d3b138e3696dafa8", + "docs/block/model/dispatch/cube-tmatmul.md": "78e01ea2e8028ec18dcc20e553b0e35b56c12bfc745eb9c4408e9244c8312b31", "docs/block/model/dispatch/decode.md": "adb7dff139eb190dbe64d003b48758d624a8c733b3c7b6fbb444fa32fa1b1ab3", "docs/block/model/dispatch/descriptor-legality.md": "610841f62f7d149ba3bb418e841155bfdcdfe9ddc465473c60675ab5d9aacf6c", "docs/block/model/dispatch/destination-auxiliary.md": "51b689b09eeb182810afe39671af6578672f8d64fc0266997eb59c3757aef438", @@ -21489,12 +21537,12 @@ "docs/block/model/dispatch/generation-schema.md": "a03da15f04299c836cc635cf6c67b3561910edcbc43870667395aae28cd7026b", "docs/block/model/dispatch/gm-obligation-dispatch.md": "03493b6ce1d6d2d29ff95e105ef59323f0db362bbb9a04741b96dbeb6fd4ec6e", "docs/block/model/dispatch/lea-schema.md": "38dd2b3562f26f47f7caeee510bb75a666646af3af6db40a8d211609f6ca4f0b", - "docs/block/model/dispatch/matrix-scale.md": "ccd46844633236bbb2ee0792e8ba4f88c7c0067ee0b59fb1d5a5ece0f635fa12", + "docs/block/model/dispatch/matrix-scale.md": "ace0b903395ab0bc11f7fb6acd195f35885c50a8b42fb2deef64bb697fd03a17", "docs/block/model/dispatch/numeric-control.md": "249bba1dbaa9ccd2202580cd8d405022318f459c4f5ca453f3a4b10d25922490", "docs/block/model/dispatch/predicate-destination.md": "af2149a073d9d88cf7ad0e62bfe3df266b3d83f01acb0f5677da53102775ef1a", "docs/block/model/dispatch/reduction-schema.md": "635aaa4e769ee0178ec2f24fd29da206ecbda53ea0807dcc3076847990982d2a", "docs/block/model/dispatch/scalar-schema.md": "e42d4c9c069b6b49ab5c57c83a096f61e85588819b374eaadb6d25d20d90e25b", - "docs/block/model/dispatch/shared-cube-matrix.md": "499d6407660b181dd19324adb4a1ace1d930f1d2940755b078a927f188860538", + "docs/block/model/dispatch/shared-cube-matrix.md": "1a0c66e593e1bb2884f00e325863df43fbd1436e29eb7b2cf8c8d6e5ce39557a", "docs/block/model/dispatch/shared-tlsu.md": "78b5ea02b88344dcbf52180572b0e471bce7ab237c5120d6d3d17c83c67cd471", "docs/block/model/dispatch/start.md": "44687ea326766b3acfacbc3b62424576cb1b7013a8552cebb055f7d83533e3d3", "docs/block/model/dispatch/tcvt-destination.md": "711ed7d1b4f4f33e071c27730da46f46d2c17fc864d41f4b3821fefd63240ce2", @@ -22077,12 +22125,12 @@ "docs/tile/layout-and-rearrangement/layout/TPERMUTE.md": "062b6603eeff5dae5c525e9b9108dcefe486b6d4228f0f0a8a13dba71449f0b1", "docs/tile/layout-and-rearrangement/layout/TSHUF.md": "3a5447aa511f1ef003729d5b9f93b1b084077f8931c81113db7f150d20bf460d", "docs/tile/layout-and-rearrangement/layout/TUNPACK.md": "c344eb3fcc8afa990ab66a2fd8b705ffc7ee16e86cd31e820eab24fe9b99ae71", - "docs/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL.md": "c5e7bf9cbe362048484c71f39610c23fd084c4cce0ec5f30561f8005e25e448e", - "docs/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_ACC.md": "4bd78e590824ba1a32b1ff9e0c1f854c1a4d69c6874bfed5461107be0b5b1105", - "docs/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_BIAS.md": "3e7373afcdbd7b47d8c44095c258f3db4cfa8d0ddb242ba7241dafa9e9ce48d8", - "docs/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX.md": "418db70e6dfd4b89deb5b9d7caf137f4f166f30512b07358d3db7be2e951c268", - "docs/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX_ACC.md": "80c7671168af9aa88214b5c4c28708ed43d6166cefc44a7bb32eb25ebcd0c237", - "docs/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX_BIAS.md": "cfc1e98301c577ac31008e4b6a847105f4ff6015c91bcf9c17adb9656ea5d3db", + "docs/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL.md": "77979c98c7ac9f1a7e4bc8cc2a259da36a8fc185bdd1d8efeab1e2578a2df969", + "docs/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_ACC.md": "1cb4d0a34f6c371f43f5cd510a0530c9e3dc890fe8ee4544eb53030ea7b147d3", + "docs/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_BIAS.md": "3ed6ba1bbd4133db2ebb0b3744645787d7e1129b063579dbec185e13f34d0408", + "docs/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX.md": "999096b0f3b6b8c531e8d62e64879ebd42e1c7127af72233062ee37a165fd7b2", + "docs/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX_ACC.md": "cf0c44ca09ba489899d145f44f9f8594ba93b75c34b6b04b0c9f9c5f84ea1c1f", + "docs/tile/matrix-and-matrix-vector/matrix-matrix/TMATMUL_MX_BIAS.md": "c054f9200d3c8a6c8958a087cb565825ad0831d153a1f5b30c091edf5e87408d", "docs/tile/matrix-and-matrix-vector/matrix-vector/TGEMV.md": "122c86c2abefff85824f4c10f4a87a1afb9403b0b91532ae1060b6887d73883b", "docs/tile/matrix-and-matrix-vector/matrix-vector/TGEMV_ACC.md": "1e255d8d880387c4d422b4faf52c679110d8177f69d4a32a0114f525572bb5ec", "docs/tile/matrix-and-matrix-vector/matrix-vector/TGEMV_BIAS.md": "56cf1d0b9ac61aa52a9c4858613208acc96a28e26e4bdc14fa4f9148b9b9b3ff", @@ -22129,7 +22177,7 @@ "docs/tile/model/dispatch/tile-scalar-and-immediate.md": "872a951c4589cdf52a49da30f3e38eb3a356c5e1811e4c97a529af1df0f9c9d7", "docs/tile/model/dispatch/top-level.md": "b31ed5a9b9161b8c42bc459438f96351f0559b43276c8f367d99c019b3b5d352", "docs/tile/model/execution/comparison.md": "f4ec02546db7d74faafc3be02dcab588e5fc4bce9bc258829090ee7569786283", - "docs/tile/model/execution/cube.md": "126948355f6a35e24c6a5730a925d17130dc15a678e884cb66edf34d9d324889", + "docs/tile/model/execution/cube.md": "8be9a9bfd2436b66177a2ace14c2a508234242849748e8058a9af1c1d0b62fc7", "docs/tile/model/execution/elementwise.md": "e27371fbba1d5f2d4dcf39903b9cb771e4d4852c3b0b120c978fe6e196d02838", "docs/tile/model/execution/execution-mask-comparison.md": "8f4cad0abc45931a27558fd6d5ac20d388b0ea6d40f8f5debd0d4266495352fc", "docs/tile/model/execution/execution-mask-state.md": "3f131678bd44c83765c14e7c20d1cdf1651cd1d4b13e4dcac5372a77f5bfda33", @@ -22143,7 +22191,7 @@ "docs/tile/model/execution/lea.md": "c18620bdfcb1399899186db3acb193a518510b6a2354a23c963027956849ba1a", "docs/tile/model/execution/matrix-postprocess.md": "21a0ad98a8796ca07ec5cdfac557252a099449f453953f4ae8ad4730028c7000", "docs/tile/model/execution/matrix-quantization.md": "02ed73d3422672b770301c5212f72a0e279af07db72210352b5eb5a0e932822e", - "docs/tile/model/execution/matrix-scale.md": "476206b4a4e62edfc8d56339f38fd549ba83724c37aa7cc885f422d89b255149", + "docs/tile/model/execution/matrix-scale.md": "d1b2e97e456f654ba64ec20a980087cdd620f82988872c4991970d26da1148e7", "docs/tile/model/execution/minmax.md": "a256b773690f85af18b7f777b6d047c6d7e44fe627d87425e0a9bb6a4226802d", "docs/tile/model/execution/postprocess.md": "80f7e8e3165666d5142c2ab42e3f03e43894a60a7fb9f125b8c146f99d14c61b", "docs/tile/model/execution/predicate-carriers.md": "826caf9558e649be704becb8192b2f65245d03a3e6ceb5231f223efcc48682ef", @@ -22160,11 +22208,11 @@ "docs/tile/model/legality/layout-rearrangement.md": "5743cd51e0f96563c9cb453487f33618db14d4f262f1d6d07b2c4184e290632f", "docs/tile/model/legality/lea-operands.md": "b5c356fe4926911788ad043f600b5bc1fb88ee55383734d55ecb5ad7683b4dc6", "docs/tile/model/legality/matrix-cube-primary.md": "82a52d4005c2273bd528aa5f68787ed05d5702923bebd583948f7b1c0ddae517", - "docs/tile/model/legality/matrix-functions.md": "bd413a78045c58be7e6743a573391e23428763f9bf9e9767cc5bbe65441e5981", + "docs/tile/model/legality/matrix-functions.md": "427f71d12416c7ff82dc7c2fdebab41b4ec55759e13fec740483fbde249d9b82", "docs/tile/model/legality/matrix-info-descriptor.md": "c7da3ce42da35fd7ee621d70bbc47020990592bd3491032e7e0e8a6258020725", "docs/tile/model/legality/matrix-operands.md": "a27d5f401c880d379b8c9e0955e84fc195cb717f4be6056687f5c26f36e7fc1d", "docs/tile/model/legality/matrix-postprocess.md": "afc8ef10cb9c817112d959a31cdd992746bebf0abb3500058f62398f1ab67f19", - "docs/tile/model/legality/matrix-shape.md": "3b23703bed0a576c359f5cb8ad05a8afefc242f7e1748de8dfd68ae9ea962acc", + "docs/tile/model/legality/matrix-shape.md": "e43488a6d89bfc4d03f245eba2a75d673938ed29746b86f613ed4ab30fb63f6f", "docs/tile/model/legality/memory-schema.md": "994578fbd625caaa699a79a5df5e05c921cba33225c06953a454423b9783f252", "docs/tile/model/legality/operand-schema.md": "e74b166bce1fdca1d0c6df2bdf8d590998a4f8e6cedaad3a3f297187c417cb3d", "docs/tile/model/legality/pe-mask.md": "4ce72d99efe48a24a6dfefb3690b9d390bbaf874bdd0b3f2686d8914c06dcfe0", @@ -22781,10 +22829,15 @@ "tests/asl/block/model/dispatch/cube-destination/block-exec-tmatmul-effective-d-m32-001.asl": "587b91d80cd25b018408967a3d5f4f0199ba406cbe31f062ac4218f339571d8d", "tests/asl/block/model/dispatch/cube-destination/block-fault-tmatmul-reused-destination-shape-011.asl": "21f7e3443ba7c408a90039452ec9f2b3d6defc1b9be56269d8681b3d17adab02", "tests/asl/block/model/dispatch/cube-destination/block-static-cube-destination-contract-001.asl": "22441e66fded03666f57d37aade6d83299d52d97269427606a36ebd28deffcce", + "tests/asl/block/model/dispatch/cube-tmatmul/block-atomic-tmatmul-shared-packed-subview-052.asl": "e6ff63fae4c086385a9ab83f3cf786e40833e75a1c763327d9d59abd7138affe", "tests/asl/block/model/dispatch/cube-tmatmul/block-atomic-tmatmul-shared-subview-preflight-032.asl": "7bb7309664eaacbc07876d72ebdea42afa58df4920277bd3cea1b3701b086ea8", - "tests/asl/block/model/dispatch/cube-tmatmul/block-bound-tmatmul-cube-dimensions-003.asl": "e5b7cc7229f7509c97d0e4c1675acd3740c83e8770edae412f0c5bd537bfe894", + "tests/asl/block/model/dispatch/cube-tmatmul/block-bound-tmatmul-cube-dimensions-003.asl": "9b5749c91987e40537fc46f118f0c964468f23e874568748d4c971f9b4d7ea7b", "tests/asl/block/model/dispatch/cube-tmatmul/block-bound-tmatmul-cube-layout-002.asl": "8898d050f967825879d9aed6840d696f66a9cf0b71e4a0b96bf4c53d5018dce6", "tests/asl/block/model/dispatch/cube-tmatmul/block-bound-tmatmul-inactive-shared-029.asl": "98a15edc160c0d28e47779f5a01c36f212a01257a39b1d1e25a9bf5392069ef4", + "tests/asl/block/model/dispatch/cube-tmatmul/block-bound-tmatmul-shared-hif4-packed-shape-051.asl": "0389c3e966ac3c60b23be240a8369002e59ab5f6e0cbfc0429f0b228d4a422be", + "tests/asl/block/model/dispatch/cube-tmatmul/block-bound-tmatmul-shared-packed-subview-readiness-053.asl": "55ee226e05dc262e8bdb653a5d799730d93b9b40b2bd82e05dad3ec977e4db30", + "tests/asl/block/model/dispatch/cube-tmatmul/block-bound-tmatmul-shared-packed-transposed-n-upper-055.asl": "d61b01f1835498e4aef30dbf7064a3f8d67f5d13a9fb2aae2a06c660d6aaba1b", + "tests/asl/block/model/dispatch/cube-tmatmul/block-bound-tmatmul-shared-packed-types-050.asl": "ba2d04acc4b8227c7f5893e63f19e12160f661c2e4670d2fa4da117a8ab906ee", "tests/asl/block/model/dispatch/cube-tmatmul/block-bound-tmatmul-shared-readiness-012.asl": "f732449e9d0e7b9fe747f4668dd5432b8a85956461980b35ca1f0a64a36fb748", "tests/asl/block/model/dispatch/cube-tmatmul/block-bound-tmatmul-shared-undef-020.asl": "135206d3b540165295c33ae975d4ffd7851d7c87a8b8c065a33fc7de1e877dbd", "tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-acc-reduce-025.asl": "e7eb65c95a0b5ea3533aa4c2ec42523f090abbeec057d337115539089da843d6", @@ -22801,14 +22854,25 @@ "tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-mx-shared-both-001.asl": "caf87fbbda43b2050af0a1ef1c9e57e7788d9fa96576c796fbe851fcc6b6f66e", "tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-mx-shared-right-001.asl": "90c39ab811f1919c39d1715d42a6424c3a903634f09591f47c05cc163016da3b", "tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-bstart-family-036.asl": "81afbac581af20270aa2a6f0a254745822aa0ca940093b1f851357b1fdd5c887", + "tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-bstart-nonpower-038.asl": "2dad64b7e7ed7429e138d6d3d55419f1079aa7667bf0e006f2ebe00531f92e58", + "tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-large-source-044.asl": "8323890f34dce1d18090435818d62ce6a1a32d3a8ddc5e91f1ea31782f2d92d7", + "tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-local-packed-a-042.asl": "077dadad9117d7831a41f16009aa638eee48b7b9176231023f1474c3dda40e60", "tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-local-private-fourstream-038.asl": "d70d7d42457cf790d05ef9bf2b2e4305879ae8e202d26ae32607a23e067e69fc", "tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-mask-015.asl": "3ae4a822e93a1345d160cf1c86d7aae1847b1cbdd9fd273b7fe9797401bc0838", "tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-mshard-021.asl": "03ec749ec8c38fcb0cb14a72c0287c2b7ac8e48599280bee74c157380cdd3040", + "tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-nonpower-ranges-039.asl": "2ee7095a3056d8aae39449982bfc39fc64cc41e6f8aaea8bbce87e2cf555ac9b", + "tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-packed-even-n-transpose-048.asl": "18aaf573b00e1ab5d2457551a53577ac860b48a68e475b63f8884b14e9e39503", + "tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-packed-subview-046.asl": "1170642ef9d20f1aa68f21328b67ed805bc6face90fb6ff85c84b4c6703e136e", + "tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-packed-tight-odd-n-047.asl": "1482908738c33ec6e9619a6469fe7cf93e5a6c894fe9690e339ccdad542d5c2e", + "tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-packed-transpose-040.asl": "bf05ec437f961953470fa6e70fd64a59fe0b740e757c6ed57e8f9959af1e6a6a", + "tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-packed-types-049.asl": "14bc6bed3e251b220330ecdcf0089c5e9ec9a5cbf11cd9432fa4418d8aa5e3e9", + "tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-packed-upper-even-054.asl": "3091e99fe212c1a6d4538049b7a359ddd804f0b349668b9f588bd6ed4cf8d314", "tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-pair-001.asl": "baa399daae840ce6be83a58117b51f09128ed793a4891730356fa8aed0334316", + "tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-right-nonpower-043.asl": "aeedcfeb74b4a10adc14181fa0ebd613d285722f094a3cd5bb9ad6fd4ba112af", "tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-subview-033.asl": "872865d43663a44efe7a4634bb28beed327e94ba7b09f07745989524cd0d2dce", "tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-subview-single-row-037.asl": "e43a6c23deac69fb5b58473bfe443194363ab61155335225661488a91e1f52d5", "tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-transpose-011.asl": "46afd41cadf41369ea3b4920fd4d122f91b80edaaec1e5aeb3059f557d28b738", - "tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-transpose-030.asl": "91efe5fa3c80236636a4a9818ec954f97d5819765a2e93ce2dbaae82926a4638", + "tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-transpose-030.asl": "93babe4b37f149af5c585295fabf70ef773d9784b93e3a72206e476dbece656e", "tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-zero-016.asl": "af47d1a95cafaba909d6a2f403a6dc13ecfd50108b2fc1d21d08ec53dd0ceb26", "tests/asl/block/model/dispatch/cube-tmatmul/block-fault-tmatmul-acc-atomic-026.asl": "18e1d74d05633e7b280e69de6b2678c8d091030a365f99de01537e4481ef8585", "tests/asl/block/model/dispatch/cube-tmatmul/block-fault-tmatmul-acc-capacity-001.asl": "a512f7e10b21024cb72520e36fdf9848622b7061b7bcdc1de37a25ccca3b2fa6", @@ -22823,6 +22887,7 @@ "tests/asl/block/model/dispatch/cube-tmatmul/block-fault-tmatmul-mx-shared-group-001.asl": "44a4ef8058f08c22c4158207881831e78ba515040daf6fc3d8cfd10863b39256", "tests/asl/block/model/dispatch/cube-tmatmul/block-fault-tmatmul-ordinary-primary-004.asl": "8d23e5a9c3563cf5b734b2d90d8152f960d42b5562b741c60816418db7009cec", "tests/asl/block/model/dispatch/cube-tmatmul/block-fault-tmatmul-shared-b-physical-shape-031.asl": "be7320d68071c08547dab20f9296ae088c695ea4b5cb046efbf377c1903f05e4", + "tests/asl/block/model/dispatch/cube-tmatmul/block-fault-tmatmul-shared-packed-even-041.asl": "3884a86f1444ec0312214036d1095592d3f9f8d778ad4658245b3c0b9610a389", "tests/asl/block/model/dispatch/cube-tmatmul/block-fault-tmatmul-shared-rollback-019.asl": "b7065ef79576cb412cd0069e92a2ae5db851fbab085503c6e8427d2f1cdb2b28", "tests/asl/block/model/dispatch/cube-tmatmul/block-fault-tmatmul-slrelu-bits-001.asl": "2b7b3c1e303eca095c71cd6b6aee5c69d6e70b3bf39ba7d810d8952b6eb1d3ed", "tests/asl/block/model/dispatch/cube-tmatmul/block-fault-tmatmul-squant-bits-001.asl": "de113f2a9362ccfd3f47bfc5f1b4eb472a727f980a38a73c19a86bd0d1a24ec0", @@ -22893,6 +22958,7 @@ "tests/asl/block/model/dispatch/shared-cube-matrix/block-exec-shared-cube-scale-control-zero-004.asl": "065085f52d029cbbee1bcf94269fcca86612f04bd1e4e486c9d5857862e89b1f", "tests/asl/block/model/dispatch/shared-cube-matrix/block-exec-shared-cube-scale-heterogeneous-003.asl": "30bde5c53df6b9bc87c60c9ac6e5f878dd72390bbb90e3a99d82c0a40b552e48", "tests/asl/block/model/dispatch/shared-cube-matrix/block-exec-shared-cube-scale-hif4-transpose-006.asl": "433e69a1bfae3cd99d2e9d2872a2ebbbe78fd41b47f63e3292b678d2091d3326", + "tests/asl/block/model/dispatch/shared-cube-matrix/block-exec-shared-cube-scale-nonpower-045.asl": "b8a99695d2ea7deac688f7f017f3f5b1ef159d01ea39db8ecd885f5c967ddeae", "tests/asl/block/model/dispatch/shared-cube-matrix/block-exec-shared-cube-scale-transpose-002.asl": "1a934951a810b5a2c62cea00ad83b7af9c00e531d9353ac83ef6d0432b710544", "tests/asl/block/model/dispatch/shared-cube-matrix/block-fault-shared-cube-scale-transpose-005.asl": "f15100800791dd57c18450e3f25df01b1118df15d11e272a0e1dc8b4221b2fed", "tests/asl/block/model/dispatch/shared-cube-matrix/block-static-shared-cube-matrix-contract-001.asl": "9a87138fcf0fe7bba46f6d3447358753f3997f7110d0b9785d0858890355faf7", @@ -25439,7 +25505,7 @@ "tests/asl/scalar/model/sys/semantics/scalar-state-thread-id-placement-001.asl": "770b32ce42ac647c41b77e33604120fd6c2b2fe9f732e28842a3f7e85f75d1e3", "tests/asl/scalar/model/sys/semantics/scalar-state-thread-id-rejections-001.asl": "9289da1b6bf34293325338ca1e1dc31ce389cd022a24d576f83fd40cbfd0eb35", "tests/asl/scalar/model/sys/semantics/scalar-state-thread-id-rings-001.asl": "3d9040292ad4488ac423e3b4c6b0ddb97a734712245d5ddba88ccb8d40ccd9d6", - "tests/asl/scalar/model/sys/semantics/scalar-static-semantics-contract-001.asl": "94f20788eda611573f17427fa6cbc9896bfa40eaa8c86843570b723bf9015b61", + "tests/asl/scalar/model/sys/semantics/scalar-static-semantics-contract-001.asl": "3e27c26edc525d9485c4bcf4f3a10c6459c784ce5a01b475bc471bdd69762f48", "tests/asl/scalar/model/types/operands/scalar-static-operands-contract-001.asl": "50309ed5f605efa5bf4f2ae949c3378d493d5591a2e7867cf3b3f7c13c1bde6a", "tests/asl/scalar/model/types/operations/scalar-static-operations-contract-001.asl": "d5cde4ceb9b26687390ccb6f6cd8366246f67b9afde9e8802b99b64d837399b9", "tests/asl/scalar/sys/ACRC/scalar-decode-acrc-canonical-001.asl": "85b793059aa3ad80115667a74d5bd44077ad15d9156592ef905c7412c9920bea", @@ -26158,7 +26224,7 @@ "tests/asl/tile/model/execution/reduction/tile-static-reduction-contract-001.asl": "d6109f1e42ea97f94349340a1e5bd2742ad4c5bff5442e41710f6eda2f504f87", "tests/asl/tile/model/execution/unary/tile-bound-unary-sfu-owner-domain-002.asl": "faeb01cc89718cc7878ba8198dea00f39632dad2480dba8a29d8f9ba8d153811", "tests/asl/tile/model/execution/unary/tile-static-unary-contract-001.asl": "317d4cecb38d480e77ff4063b385bbfd3dd453be65e2f7533e56ff1d7cbc7b0c", - "tests/asl/tile/model/legality/allocation-capacity/tile-bound-legality-001.asl": "d3187b825931a6395282686e5a11b85073c4a90e1658946168ecace878fd0484", + "tests/asl/tile/model/legality/allocation-capacity/tile-bound-legality-001.asl": "0eaad84f8fff85160bc13a50f1dc70e0536d63930a32f1120bb0f8d12f53578f", "tests/asl/tile/model/legality/allocation-capacity/tile-static-allocation-capacity-contract-001.asl": "84cf72a19b36cc5b72ad2b8cc19a4320166c30200451ba2d2483c4f0f6705bce", "tests/asl/tile/model/legality/descriptor-shape/tile-fault-cube-generic-001.asl": "335730c1f5e441af23448d437daa8cbcf6a91a5dd46bd750afde29ce963547fb", "tests/asl/tile/model/legality/descriptor-shape/tile-static-descriptor-shape-contract-001.asl": "4deaaa493ccc5c11488ad4f5c57a386b0f96f93285c9d0b33d1b2fedb71999db", @@ -26455,7 +26521,7 @@ "mnemonics_without_semantic_tests": [], "requirement_count": 1112, "status": "closed", - "test_count": 4202, + "test_count": 4220, "uncovered_executable_requirement_count": 0, "uncovered_executable_requirements": [], "uncovered_unit_count": 0, @@ -44224,6 +44290,17 @@ "sha256": "433e69a1bfae3cd99d2e9d2872a2ebbbe78fd41b47f63e3292b678d2091d3326", "source": "asl/block/model/dispatch/shared-cube-matrix.asl" }, + { + "id": "PTO-AVS-BLOCK-SHARED-CUBE-SCALE-NONPOWER-045", + "kind": "execution", + "path": "tests/asl/block/model/dispatch/shared-cube-matrix/block-exec-shared-cube-scale-nonpower-045.asl", + "requirements": [ + "PTO-CUBE-MATRIX-SCALE-001", + "PTO-CUBE-SHARED-TRANSPOSE-001" + ], + "sha256": "b8a99695d2ea7deac688f7f017f3f5b1ef159d01ea39db8ecd885f5c967ddeae", + "source": "asl/block/model/dispatch/shared-cube-matrix.asl" + }, { "id": "PTO-AVS-BLOCK-SHARED-CUBE-SCALE-TRANSPOSE-002", "kind": "execution", @@ -45632,9 +45709,10 @@ "path": "tests/asl/block/model/dispatch/cube-tmatmul/block-bound-tmatmul-cube-dimensions-003.asl", "requirements": [ "PTO-CUBE-LOCAL-MATRIX-001", - "PTO-CUBE-GROUP-M-DISTRIBUTION-001" + "PTO-CUBE-GROUP-M-DISTRIBUTION-001", + "PTO-TMATMUL-CONTRACT-001" ], - "sha256": "e5b7cc7229f7509c97d0e4c1675acd3740c83e8770edae412f0c5bd537bfe894", + "sha256": "9b5749c91987e40537fc46f118f0c964468f23e874568748d4c971f9b4d7ea7b", "source": "asl/block/model/dispatch/cube-tmatmul.asl" }, { @@ -45941,6 +46019,45 @@ "sha256": "81afbac581af20270aa2a6f0a254745822aa0ca940093b1f851357b1fdd5c887", "source": "asl/block/model/dispatch/cube-tmatmul.asl" }, + { + "id": "PTO-AVS-BLOCK-TMATMUL-SHARED-BSTART-NONPOWER-038", + "kind": "execution", + "path": "tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-bstart-nonpower-038.asl", + "requirements": [ + "PTO-BSTART-TMATMUL-CONTRACT-001", + "PTO-BSTART-TMATMUL-ACC-CONTRACT-001", + "PTO-BSTART-TMATMUL-BIAS-CONTRACT-001", + "PTO-BSTART-TMATMULMX-CONTRACT-001", + "PTO-BSTART-TMATMULMX-ACC-CONTRACT-001", + "PTO-BSTART-TMATMULMX-BIAS-CONTRACT-001", + "PTO-CUBE-SHARED-TRANSPOSE-001" + ], + "sha256": "2dad64b7e7ed7429e138d6d3d55419f1079aa7667bf0e006f2ebe00531f92e58", + "source": "asl/block/model/dispatch/cube-tmatmul.asl" + }, + { + "id": "PTO-AVS-BLOCK-TMATMUL-SHARED-HIF4-PACKED-SHAPE-051", + "kind": "boundary", + "path": "tests/asl/block/model/dispatch/cube-tmatmul/block-bound-tmatmul-shared-hif4-packed-shape-051.asl", + "requirements": [ + "PTO-CUBE-MATRIX-SCALE-001", + "PTO-CUBE-SHARED-TRANSPOSE-001" + ], + "sha256": "0389c3e966ac3c60b23be240a8369002e59ab5f6e0cbfc0429f0b228d4a422be", + "source": "asl/block/model/dispatch/cube-tmatmul.asl" + }, + { + "id": "PTO-AVS-BLOCK-TMATMUL-SHARED-LARGE-SOURCE-044", + "kind": "execution", + "path": "tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-large-source-044.asl", + "requirements": [ + "PTO-TMATMUL-CONTRACT-001", + "PTO-CUBE-SHARED-TRANSPOSE-001", + "PTO-CUBE-GROUP-M-DISTRIBUTION-001" + ], + "sha256": "8323890f34dce1d18090435818d62ce6a1a32d3a8ddc5e91f1ea31782f2d92d7", + "source": "asl/block/model/dispatch/cube-tmatmul.asl" + }, { "id": "PTO-AVS-BLOCK-TMATMUL-SHARED-LAYOUT-014", "kind": "state-transition", @@ -45951,6 +46068,17 @@ "sha256": "6783c2a8d3e3bb62f8a088086e0411197417869d5c056ddb2437015bcbfb3361", "source": "asl/block/model/dispatch/cube-tmatmul.asl" }, + { + "id": "PTO-AVS-BLOCK-TMATMUL-SHARED-LOCAL-PACKED-A-042", + "kind": "execution", + "path": "tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-local-packed-a-042.asl", + "requirements": [ + "PTO-TMATMUL-CONTRACT-001", + "PTO-CUBE-SHARED-TRANSPOSE-001" + ], + "sha256": "077dadad9117d7831a41f16009aa638eee48b7b9176231023f1474c3dda40e60", + "source": "asl/block/model/dispatch/cube-tmatmul.asl" + }, { "id": "PTO-AVS-BLOCK-TMATMUL-SHARED-LOCAL-PRIVATE-FOURSTREAM-038", "kind": "execution", @@ -45984,6 +46112,141 @@ "sha256": "03ec749ec8c38fcb0cb14a72c0287c2b7ac8e48599280bee74c157380cdd3040", "source": "asl/block/model/dispatch/cube-tmatmul.asl" }, + { + "id": "PTO-AVS-BLOCK-TMATMUL-SHARED-NONPOWER-RANGES-039", + "kind": "execution", + "path": "tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-nonpower-ranges-039.asl", + "requirements": [ + "PTO-TMATMUL-CONTRACT-001", + "PTO-CUBE-SHARED-TRANSPOSE-001", + "PTO-CUBE-GROUP-M-DISTRIBUTION-001" + ], + "sha256": "2ee7095a3056d8aae39449982bfc39fc64cc41e6f8aaea8bbce87e2cf555ac9b", + "source": "asl/block/model/dispatch/cube-tmatmul.asl" + }, + { + "id": "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-EVEN-041", + "kind": "fault", + "path": "tests/asl/block/model/dispatch/cube-tmatmul/block-fault-tmatmul-shared-packed-even-041.asl", + "requirements": [ + "PTO-TMATMUL-CONTRACT-001", + "PTO-CUBE-SHARED-TRANSPOSE-001" + ], + "sha256": "3884a86f1444ec0312214036d1095592d3f9f8d778ad4658245b3c0b9610a389", + "source": "asl/block/model/dispatch/cube-tmatmul.asl" + }, + { + "id": "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-EVEN-N-TRANSPOSE-048", + "kind": "execution", + "path": "tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-packed-even-n-transpose-048.asl", + "requirements": [ + "PTO-TMATMUL-CONTRACT-001", + "PTO-CUBE-SHARED-TRANSPOSE-001" + ], + "sha256": "18aaf573b00e1ab5d2457551a53577ac860b48a68e475b63f8884b14e9e39503", + "source": "asl/block/model/dispatch/cube-tmatmul.asl" + }, + { + "id": "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-SUBVIEW-046", + "kind": "execution", + "path": "tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-packed-subview-046.asl", + "requirements": [ + "PTO-TMATMUL-CONTRACT-001", + "PTO-CUBE-SHARED-TRANSPOSE-001", + "PTO-B-SUBVIEW-SHARED-PER-PE-001" + ], + "sha256": "1170642ef9d20f1aa68f21328b67ed805bc6face90fb6ff85c84b4c6703e136e", + "source": "asl/block/model/dispatch/cube-tmatmul.asl" + }, + { + "id": "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-SUBVIEW-ATOMICITY-052", + "kind": "atomicity", + "path": "tests/asl/block/model/dispatch/cube-tmatmul/block-atomic-tmatmul-shared-packed-subview-052.asl", + "requirements": [ + "PTO-CUBE-SHARED-TRANSPOSE-001", + "PTO-B-SUBVIEW-SHARED-PER-PE-001" + ], + "sha256": "e6ff63fae4c086385a9ab83f3cf786e40833e75a1c763327d9d59abd7138affe", + "source": "asl/block/model/dispatch/cube-tmatmul.asl" + }, + { + "id": "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-SUBVIEW-READINESS-053", + "kind": "boundary", + "path": "tests/asl/block/model/dispatch/cube-tmatmul/block-bound-tmatmul-shared-packed-subview-readiness-053.asl", + "requirements": [ + "PTO-B-SHARED-WHOLE-PARENT-READY-001", + "PTO-CUBE-SHARED-TRANSPOSE-001", + "PTO-B-SUBVIEW-SHARED-PER-PE-001" + ], + "sha256": "55ee226e05dc262e8bdb653a5d799730d93b9b40b2bd82e05dad3ec977e4db30", + "source": "asl/block/model/dispatch/cube-tmatmul.asl" + }, + { + "id": "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-TIGHT-ODD-N-047", + "kind": "execution", + "path": "tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-packed-tight-odd-n-047.asl", + "requirements": [ + "PTO-TMATMUL-CONTRACT-001", + "PTO-CUBE-SHARED-TRANSPOSE-001" + ], + "sha256": "1482908738c33ec6e9619a6469fe7cf93e5a6c894fe9690e339ccdad542d5c2e", + "source": "asl/block/model/dispatch/cube-tmatmul.asl" + }, + { + "id": "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-TRANSPOSE-040", + "kind": "execution", + "path": "tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-packed-transpose-040.asl", + "requirements": [ + "PTO-TMATMUL-CONTRACT-001", + "PTO-CUBE-SHARED-TRANSPOSE-001", + "PTO-CUBE-GROUP-M-DISTRIBUTION-001" + ], + "sha256": "bf05ec437f961953470fa6e70fd64a59fe0b740e757c6ed57e8f9959af1e6a6a", + "source": "asl/block/model/dispatch/cube-tmatmul.asl" + }, + { + "id": "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-TRANSPOSED-N-UPPER-055", + "kind": "boundary", + "path": "tests/asl/block/model/dispatch/cube-tmatmul/block-bound-tmatmul-shared-packed-transposed-n-upper-055.asl", + "requirements": [ + "PTO-TMATMUL-CONTRACT-001", + "PTO-CUBE-SHARED-TRANSPOSE-001" + ], + "sha256": "d61b01f1835498e4aef30dbf7064a3f8d67f5d13a9fb2aae2a06c660d6aaba1b", + "source": "asl/block/model/dispatch/cube-tmatmul.asl" + }, + { + "id": "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-TYPES-049", + "kind": "execution", + "path": "tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-packed-types-049.asl", + "requirements": [ + "PTO-TMATMUL-CONTRACT-001", + "PTO-CUBE-SHARED-TRANSPOSE-001" + ], + "sha256": "14bc6bed3e251b220330ecdcf0089c5e9ec9a5cbf11cd9432fa4418d8aa5e3e9", + "source": "asl/block/model/dispatch/cube-tmatmul.asl" + }, + { + "id": "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-TYPES-BOUNDARY-050", + "kind": "boundary", + "path": "tests/asl/block/model/dispatch/cube-tmatmul/block-bound-tmatmul-shared-packed-types-050.asl", + "requirements": [ + "PTO-CUBE-SHARED-TRANSPOSE-001" + ], + "sha256": "ba2d04acc4b8227c7f5893e63f19e12160f661c2e4670d2fa4da117a8ab906ee", + "source": "asl/block/model/dispatch/cube-tmatmul.asl" + }, + { + "id": "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-UPPER-EVEN-054", + "kind": "execution", + "path": "tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-packed-upper-even-054.asl", + "requirements": [ + "PTO-TMATMUL-CONTRACT-001", + "PTO-CUBE-SHARED-TRANSPOSE-001" + ], + "sha256": "3091e99fe212c1a6d4538049b7a359ddd804f0b349668b9f588bd6ed4cf8d314", + "source": "asl/block/model/dispatch/cube-tmatmul.asl" + }, { "id": "PTO-AVS-BLOCK-TMATMUL-SHARED-PAIR-001", "kind": "execution", @@ -46015,6 +46278,18 @@ "sha256": "73d1d90380daac7c36277beb7a26cb36cf268c375303a3340e2d7bbadff146eb", "source": "asl/block/model/dispatch/cube-tmatmul.asl" }, + { + "id": "PTO-AVS-BLOCK-TMATMUL-SHARED-RIGHT-NONPOWER-043", + "kind": "execution", + "path": "tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-right-nonpower-043.asl", + "requirements": [ + "PTO-TMATMUL-CONTRACT-001", + "PTO-CUBE-SHARED-TRANSPOSE-001", + "PTO-CUBE-GROUP-M-DISTRIBUTION-001" + ], + "sha256": "aeedcfeb74b4a10adc14181fa0ebd613d285722f094a3cd5bb9ad6fd4ba112af", + "source": "asl/block/model/dispatch/cube-tmatmul.asl" + }, { "id": "PTO-AVS-BLOCK-TMATMUL-SHARED-ROLLBACK-019", "kind": "fault", @@ -46076,7 +46351,7 @@ "PTO-CUBE-SHARED-TRANSPOSE-001", "PTO-CUBE-GROUP-M-DISTRIBUTION-001" ], - "sha256": "91efe5fa3c80236636a4a9818ec954f97d5819765a2e93ce2dbaae82926a4638", + "sha256": "93babe4b37f149af5c585295fabf70ef773d9784b93e3a72206e476dbece656e", "source": "asl/block/model/dispatch/cube-tmatmul.asl" }, { @@ -56885,8 +57160,10 @@ "id": "PTO-AVS-SCALAR-MODEL-SYS-SEMANTICS-STATIC-001", "kind": "static-invariant", "path": "tests/asl/scalar/model/sys/semantics/scalar-static-semantics-contract-001.asl", - "requirements": [], - "sha256": "94f20788eda611573f17427fa6cbc9896bfa40eaa8c86843570b723bf9015b61", + "requirements": [ + "PTO-THREAD-ID-PE-IDENTITY-001" + ], + "sha256": "3e27c26edc525d9485c4bcf4f3a10c6459c784ce5a01b475bc471bdd69762f48", "source": "asl/scalar/model/sys/semantics.asl" }, { @@ -65285,7 +65562,7 @@ "kind": "boundary", "path": "tests/asl/tile/model/legality/allocation-capacity/tile-bound-legality-001.asl", "requirements": [], - "sha256": "d3187b825931a6395282686e5a11b85073c4a90e1658946168ecace878fd0484", + "sha256": "0eaad84f8fff85160bc13a50f1dc70e0536d63930a32f1120bb0f8d12f53578f", "source": "asl/tile/model/legality/allocation-capacity.asl" }, { @@ -73879,13 +74156,30 @@ "PTO-AVS-BLOCK-TMATMUL-ORDINARY-PRIMARY-004", "PTO-AVS-BLOCK-TMATMUL-SHARED-B-PHYSICAL-SHAPE-031", "PTO-AVS-BLOCK-TMATMUL-SHARED-BSTART-FAMILY-036", + "PTO-AVS-BLOCK-TMATMUL-SHARED-BSTART-NONPOWER-038", + "PTO-AVS-BLOCK-TMATMUL-SHARED-HIF4-PACKED-SHAPE-051", + "PTO-AVS-BLOCK-TMATMUL-SHARED-LARGE-SOURCE-044", "PTO-AVS-BLOCK-TMATMUL-SHARED-LAYOUT-014", + "PTO-AVS-BLOCK-TMATMUL-SHARED-LOCAL-PACKED-A-042", "PTO-AVS-BLOCK-TMATMUL-SHARED-LOCAL-PRIVATE-FOURSTREAM-038", "PTO-AVS-BLOCK-TMATMUL-SHARED-MASK-015", "PTO-AVS-BLOCK-TMATMUL-SHARED-MSHARD-021", + "PTO-AVS-BLOCK-TMATMUL-SHARED-NONPOWER-RANGES-039", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-EVEN-041", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-EVEN-N-TRANSPOSE-048", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-SUBVIEW-046", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-SUBVIEW-ATOMICITY-052", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-SUBVIEW-READINESS-053", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-TIGHT-ODD-N-047", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-TRANSPOSE-040", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-TRANSPOSED-N-UPPER-055", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-TYPES-049", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-TYPES-BOUNDARY-050", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-UPPER-EVEN-054", "PTO-AVS-BLOCK-TMATMUL-SHARED-PAIR-001", "PTO-AVS-BLOCK-TMATMUL-SHARED-READINESS-012", "PTO-AVS-BLOCK-TMATMUL-SHARED-READONLY-018", + "PTO-AVS-BLOCK-TMATMUL-SHARED-RIGHT-NONPOWER-043", "PTO-AVS-BLOCK-TMATMUL-SHARED-ROLLBACK-019", "PTO-AVS-BLOCK-TMATMUL-SHARED-SUBVIEW-033", "PTO-AVS-BLOCK-TMATMUL-SHARED-SUBVIEW-PREFLIGHT-032", @@ -73936,13 +74230,30 @@ "PTO-AVS-BLOCK-TMATMUL-ORDINARY-PRIMARY-004", "PTO-AVS-BLOCK-TMATMUL-SHARED-B-PHYSICAL-SHAPE-031", "PTO-AVS-BLOCK-TMATMUL-SHARED-BSTART-FAMILY-036", + "PTO-AVS-BLOCK-TMATMUL-SHARED-BSTART-NONPOWER-038", + "PTO-AVS-BLOCK-TMATMUL-SHARED-HIF4-PACKED-SHAPE-051", + "PTO-AVS-BLOCK-TMATMUL-SHARED-LARGE-SOURCE-044", "PTO-AVS-BLOCK-TMATMUL-SHARED-LAYOUT-014", + "PTO-AVS-BLOCK-TMATMUL-SHARED-LOCAL-PACKED-A-042", "PTO-AVS-BLOCK-TMATMUL-SHARED-LOCAL-PRIVATE-FOURSTREAM-038", "PTO-AVS-BLOCK-TMATMUL-SHARED-MASK-015", "PTO-AVS-BLOCK-TMATMUL-SHARED-MSHARD-021", + "PTO-AVS-BLOCK-TMATMUL-SHARED-NONPOWER-RANGES-039", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-EVEN-041", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-EVEN-N-TRANSPOSE-048", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-SUBVIEW-046", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-SUBVIEW-ATOMICITY-052", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-SUBVIEW-READINESS-053", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-TIGHT-ODD-N-047", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-TRANSPOSE-040", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-TRANSPOSED-N-UPPER-055", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-TYPES-049", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-TYPES-BOUNDARY-050", + "PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-UPPER-EVEN-054", "PTO-AVS-BLOCK-TMATMUL-SHARED-PAIR-001", "PTO-AVS-BLOCK-TMATMUL-SHARED-READINESS-012", "PTO-AVS-BLOCK-TMATMUL-SHARED-READONLY-018", + "PTO-AVS-BLOCK-TMATMUL-SHARED-RIGHT-NONPOWER-043", "PTO-AVS-BLOCK-TMATMUL-SHARED-ROLLBACK-019", "PTO-AVS-BLOCK-TMATMUL-SHARED-SUBVIEW-033", "PTO-AVS-BLOCK-TMATMUL-SHARED-SUBVIEW-PREFLIGHT-032", @@ -74432,6 +74743,7 @@ "PTO-AVS-BLOCK-SHARED-CUBE-SCALE-CONTROL-ZERO-004", "PTO-AVS-BLOCK-SHARED-CUBE-SCALE-HETEROGENEOUS-003", "PTO-AVS-BLOCK-SHARED-CUBE-SCALE-HIF4-TRANSPOSE-006", + "PTO-AVS-BLOCK-SHARED-CUBE-SCALE-NONPOWER-045", "PTO-AVS-BLOCK-SHARED-CUBE-SCALE-TRANSPOSE-002", "PTO-AVS-BLOCK-SHARED-CUBE-SCALE-TRANSPOSE-005" ], @@ -74442,6 +74754,7 @@ "PTO-AVS-BLOCK-SHARED-CUBE-SCALE-CONTROL-ZERO-004", "PTO-AVS-BLOCK-SHARED-CUBE-SCALE-HETEROGENEOUS-003", "PTO-AVS-BLOCK-SHARED-CUBE-SCALE-HIF4-TRANSPOSE-006", + "PTO-AVS-BLOCK-SHARED-CUBE-SCALE-NONPOWER-045", "PTO-AVS-BLOCK-SHARED-CUBE-SCALE-TRANSPOSE-002", "PTO-AVS-BLOCK-SHARED-CUBE-SCALE-TRANSPOSE-005" ] diff --git a/tests/asl/block/model/dispatch/cube-tmatmul/block-atomic-tmatmul-shared-packed-subview-052.asl b/tests/asl/block/model/dispatch/cube-tmatmul/block-atomic-tmatmul-shared-packed-subview-052.asl new file mode 100644 index 000000000..b73b4b7db --- /dev/null +++ b/tests/asl/block/model/dispatch/cube-tmatmul/block-atomic-tmatmul-shared-packed-subview-052.asl @@ -0,0 +1,105 @@ +// PTO-TEST: {"id":"PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-SUBVIEW-ATOMICITY-052","source":"asl/block/model/dispatch/cube-tmatmul.asl","requirements":["PTO-CUBE-SHARED-TRANSPOSE-001","PTO-B-SUBVIEW-SHARED-PER-PE-001"],"kind":"atomicity","summary":"Packed Shared B subview rejects capacity, rectangular crossing, wrong view shape, and odd original pitch before effects.","pass_condition":"W08 offset 8, an even-pitch 10x384 CELL crossing, K=192 against a 1x194 packed view, and a generic-legal odd-pitch parent each raise TileLegality without destination allocation, Shared consumption, parent mutation, or generation-state change.","related_sources":["asl/block/model/dispatch/shared-cube-matrix.asl","asl/block/model/operands/shared-generation.asl","asl/tile/model/state/shared-registers.asl"]} + +func RunPackedSubviewRejection(scenario: integer {0..3}) +begin + ResetProfileState(); + let k = if scenario == 2 then 192 else 194; + ConfigureTileForMask(10, 4096, 32, 256, 17, k, + TileDataType_E2M1X2, TileLayout_RowMajor, '1111'); + MarkTileValidRegionDefined(10); + let parent_capacity = if scenario == 1 || scenario == 3 then 2048 else 1024; + let parent_pitch = if scenario == 1 then 384 + else if scenario == 3 then 255 else 256; + let parent_rows = if scenario == 1 || scenario == 3 then 10 else 8; + let parent_valid_columns = if scenario == 1 then 384 else 194; + let physical_rows = DerivedTileRows( + parent_capacity, parent_pitch, TileDataType_E2M1X2); + ConfigureTileForMask(11, parent_capacity, physical_rows, + parent_pitch, parent_rows, parent_valid_columns, + TileDataType_E2M1X2, TileLayout_RowMajor, '1111'); + MarkTileValidRegionDefined(11); + WriteTileElement(11, 0, 192, Zeros{PTO_XLEN} + 3); + WriteTileElement(11, 0, 193, Zeros{PTO_XLEN} + 12); + assert TileInfoDescriptorLegal(_Tiles[[11]]); + InstallSharedTile((Zeros{6} + 40) as SharedTileID, + _Tiles[[10]], '1111'); + InstallSharedTile((Zeros{6} + 41) as SharedTileID, + _Tiles[[11]], '1111'); + assert SharedTileDescriptorLegal((Zeros{6} + 41) as SharedTileID); + + var start: bits(64) = Zeros{64} + 0x00031181; + start[31:27] = TileDataTypeToEncoding(TileDataType_E2M1X2); + let started = ExecuteCommandInstruction(start, 32); + assert started == CommandExecution_Executed; + SetBundleFixedPointAttributeState( + Zeros{6}, Zeros{3}, Zeros{4}, FALSE, FALSE, FALSE, FALSE); + SetBundleDimension(0, Zeros{PTO_XLEN} + 17); + SetBundleDimension(1, Zeros{PTO_XLEN} + 1); + SetBundleDimension(2, Zeros{PTO_XLEN} + k); + BindBundleSharedIO((Zeros{6} + 40) as SharedTileID, 0, '1111'); + BindBundleSharedIO((Zeros{6} + 41) as SharedTileID, 0, '1111'); + AddBundleTileBinding( + TRUE, 0, 1, '1111', FALSE, FALSE, 0, 0, TRUE); + _BundleSharedBindings[[1]].source0_subview.valid = TRUE; + _BundleSharedBindings[[1]].source0_subview.reg_src = 2; + _BundleSharedBindings[[1]].source0_subview.uimm11 = Zeros{11}; + _BundleSharedBindings[[1]].source0_subview.size_code = 1; + for pe = 0 to 3 looplimit 4 do + let offset = if scenario == 0 && pe == 3 then 8 + else if scenario == 1 then 1 else pe; + WritePEGPR(pe as MemoryAgentId, 2, Zeros{PTO_XLEN} + offset); + end; + + let expected_columns = if scenario == 2 then 192 else 194; + let invalid_pe = if scenario == 0 then 3 else 0; + assert !BundleSharedSubviewMatrixMetadataLegalForPE( + 1, invalid_pe as MemoryAgentId, 1, + expected_columns, expected_columns, + TileDataType_E2M1X2); + let before = SharedTileRecord((Zeros{6} + 41) as SharedTileID); + let generation_index = SharedTileArrayIndex( + (Zeros{6} + 41) as SharedTileID); + let generation_before = _SharedGenerations[[generation_index]]; + let status_before = NumericStatusFlags(); + let completed = ExecuteBundleTileOperation(); + assert !completed && _LastFault == Fault_TileLegality; + assert !_BundleTileBindings[[0]].destination_allocated_by_bundle; + assert !_BundleSharedBindings[[0]].consumed; + assert !_BundleSharedBindings[[1]].consumed; + let after = SharedTileRecord((Zeros{6} + 41) as SharedTileID); + assert after.descriptor_valid == before.descriptor_valid; + assert after.allocation_mask == before.allocation_mask; + assert after.initialized_mask == before.initialized_mask; + assert after.whole_parent_ready == before.whole_parent_ready; + assert after.published == before.published; + assert after.tile.capacity_bytes == before.tile.capacity_bytes; + assert after.tile.rows == before.tile.rows; + assert after.tile.columns == before.tile.columns; + assert after.tile.valid_rows == before.tile.valid_rows; + assert after.tile.valid_columns == before.tile.valid_columns; + assert after.tile.payload[[0]] == before.tile.payload[[0]]; + assert after.tile.payload[[12]] == before.tile.payload[[12]]; + assert TileLogicalElementDefined(after.tile, + TileLogicalLinearIndex(after.tile, 0, 193)); + let generation_after = _SharedGenerations[[generation_index]]; + assert generation_after.open == generation_before.open; + assert generation_after.closed == generation_before.closed; + assert generation_after.published == generation_before.published; + assert generation_after.shared_tile_id == generation_before.shared_tile_id; + assert generation_after.participant_mask == generation_before.participant_mask; + assert generation_after.parent_size_code == generation_before.parent_size_code; + assert generation_after.parent_cell_count == generation_before.parent_cell_count; + assert generation_after.covered_cells == generation_before.covered_cells; + assert generation_after.ready_cells == generation_before.ready_cells; + assert generation_after.arrived_participants == generation_before.arrived_participants; + assert generation_after.working_valid == generation_before.working_valid; + assert NumericStatusFlags() == status_before; +end; + +func main() => integer +begin + for scenario = 0 to 3 looplimit 4 do + RunPackedSubviewRejection(scenario); + end; + return 0; +end; diff --git a/tests/asl/block/model/dispatch/cube-tmatmul/block-bound-tmatmul-cube-dimensions-003.asl b/tests/asl/block/model/dispatch/cube-tmatmul/block-bound-tmatmul-cube-dimensions-003.asl index 402bfa19b..26a54c388 100644 --- a/tests/asl/block/model/dispatch/cube-tmatmul/block-bound-tmatmul-cube-dimensions-003.asl +++ b/tests/asl/block/model/dispatch/cube-tmatmul/block-bound-tmatmul-cube-dimensions-003.asl @@ -1,4 +1,4 @@ -// PTO-TEST: {"id":"PTO-AVS-BLOCK-TMATMUL-CUBE-DIMENSIONS-003","source":"asl/block/model/dispatch/cube-tmatmul.asl","requirements":["PTO-CUBE-LOCAL-MATRIX-001","PTO-CUBE-GROUP-M-DISTRIBUTION-001"],"kind":"boundary","summary":"Local M stays arbitrary positive while cooperative LB0 is Core-total group M.","pass_condition":"Local M3 N9 K17 remains legal; cooperative group_M accepts non-power-of-two values through 128 with power-of-two N/K and rejects zero or 129.","related_sources":["asl/tile/model/legality/matrix-shape.asl"]} +// PTO-TEST: {"id":"PTO-AVS-BLOCK-TMATMUL-CUBE-DIMENSIONS-003","source":"asl/block/model/dispatch/cube-tmatmul.asl","requirements":["PTO-CUBE-LOCAL-MATRIX-001","PTO-CUBE-GROUP-M-DISTRIBUTION-001","PTO-TMATMUL-CONTRACT-001"],"kind":"boundary","summary":"Local dimensions remain positive while cooperative Matrix dimensions use explicit bounded positive ranges.","pass_condition":"Local M3 N9 K17 remains legal; cooperative group_M accepts 1..128 and N/K accept 1..65535 without power-of-two restrictions; zero and out-of-range values reject.","related_sources":["asl/tile/model/legality/matrix-shape.asl"]} func main() => integer begin ResetBundleControlState(); @@ -6,7 +6,7 @@ begin SetBundleDimension(1, Zeros{PTO_XLEN} + 9); SetBundleDimension(2, Zeros{PTO_XLEN} + 17); assert BundleTMATMULDimensionsLegal(0); - assert !BundleTMATMULDimensionsLegal(1); + assert BundleTMATMULDimensionsLegal(1); ResetBundleControlState(); assert BundleTMATMULDimensionsLegal(0); @@ -27,6 +27,18 @@ begin assert BundleTMATMULDimensionsLegal(0); assert BundleTMATMULDimensionsLegal(1); + ResetBundleControlState(); + SetBundleDimension(0, Zeros{PTO_XLEN} + 17); + SetBundleDimension(1, Zeros{PTO_XLEN} + 3); + SetBundleDimension(2, Zeros{PTO_XLEN} + 193); + assert BundleTMATMULDimensionsLegal(1); + + ResetBundleControlState(); + SetBundleDimension(0, Zeros{PTO_XLEN} + 128); + SetBundleDimension(1, Zeros{PTO_XLEN} + 65535); + SetBundleDimension(2, Zeros{PTO_XLEN} + 65535); + assert BundleTMATMULDimensionsLegal(1); + ResetBundleControlState(); SetBundleDimension(0, Zeros{PTO_XLEN} + 17); SetBundleDimension(1, Zeros{PTO_XLEN} + 4); @@ -44,5 +56,44 @@ begin SetBundleDimension(1, Zeros{PTO_XLEN} + 4); SetBundleDimension(2, Zeros{PTO_XLEN} + 8); assert !BundleTMATMULDimensionsLegal(1); + + ResetBundleControlState(); + SetBundleDimension(1, Zeros{PTO_XLEN}); + assert !BundleTMATMULDimensionsLegal(1); + + ResetBundleControlState(); + SetBundleDimension(2, Zeros{PTO_XLEN} + 65536); + assert !BundleTMATMULDimensionsLegal(1); + + for boundary = 0 to 5 looplimit 6 do + ResetBundleControlState(); + let group_m = if boundary == 0 then 1 + else if boundary == 1 then 17 + else if boundary == 2 then 48 + else if boundary == 3 then 64 + else if boundary == 4 then 65 else 128; + SetBundleDimension(0, Zeros{PTO_XLEN} + group_m); + SetBundleDimension(1, Zeros{PTO_XLEN} + 3); + SetBundleDimension(2, Zeros{PTO_XLEN} + 17); + assert BundleTMATMULDimensionsLegal(1); + end; + + ResetBundleControlState(); + SetBundleDimension(0, Zeros{PTO_XLEN}); + SetBundleDimension(1, Zeros{PTO_XLEN} + 3); + SetBundleDimension(2, Zeros{PTO_XLEN} + 17); + assert !BundleTMATMULDimensionsLegal(1); + + ResetBundleControlState(); + SetBundleDimension(0, Zeros{PTO_XLEN} + 1); + SetBundleDimension(1, Zeros{PTO_XLEN} + 65536); + SetBundleDimension(2, Zeros{PTO_XLEN} + 2); + assert !BundleTMATMULDimensionsLegal(1); + + ResetBundleControlState(); + SetBundleDimension(0, Zeros{PTO_XLEN} + 1); + SetBundleDimension(1, Zeros{PTO_XLEN} + 1); + SetBundleDimension(2, Zeros{PTO_XLEN}); + assert !BundleTMATMULDimensionsLegal(1); return 0; end; diff --git a/tests/asl/block/model/dispatch/cube-tmatmul/block-bound-tmatmul-shared-hif4-packed-shape-051.asl b/tests/asl/block/model/dispatch/cube-tmatmul/block-bound-tmatmul-shared-hif4-packed-shape-051.asl new file mode 100644 index 000000000..10055c2f7 --- /dev/null +++ b/tests/asl/block/model/dispatch/cube-tmatmul/block-bound-tmatmul-shared-hif4-packed-shape-051.asl @@ -0,0 +1,103 @@ +// PTO-TEST: {"id":"PTO-AVS-BLOCK-TMATMUL-SHARED-HIF4-PACKED-SHAPE-051","source":"asl/block/model/dispatch/cube-tmatmul.asl","requirements":["PTO-CUBE-MATRIX-SCALE-001","PTO-CUBE-SHARED-TRANSPOSE-001"],"kind":"boundary","summary":"HiF4X2 parity applies to Shared Matrix-MX A and B roles only.","pass_condition":"K=2 Shared HiF4X2 primary schemas pass for A and B under their legal transpose forms; K=3 rejects in both roles, HiF4X2 remains MX-supported and ordinary-Matrix-excluded, and mixed Shared source/scale descriptors remain generically legal.","related_sources":["asl/tile/model/legality/matrix-functions.asl","asl/block/model/dispatch/shared-cube-matrix.asl"]} + +func RunSharedHiF4Shape(right_role: boolean, k: integer {2,3}, + trans_a: boolean, trans_b: boolean) +begin + ResetProfileState(); + let left_type = if right_role then TileDataType_FP16 + else TileDataType_HiF4X2; + let right_type = if right_role then TileDataType_HiF4X2 + else TileDataType_FP16; + let a_pitch = if trans_a then 2 else if k == 2 then 2 else 4; + let b_pitch = if trans_b then 1 else k; + if right_role then + let primary_pitch = if trans_b then 2 + else if k == 2 then 2 else 4; + let primary_rows = if trans_b then k else 1; + let primary_columns = if trans_b then 1 else k; + let primary_physical_rows = DerivedTileRows( + 128, primary_pitch, TileDataType_HiF4X2); + ConfigureTileForMask(10, 128, primary_physical_rows, + primary_pitch, primary_rows, primary_columns, + TileDataType_HiF4X2, TileLayout_RowMajor, '1111'); + MarkTileValidRegionDefined(10); + ConfigureTileForMask(11, 128, + DerivedTileRows(128, 4, TileDataType_U32), 4, + 1, 1, TileDataType_U32, TileLayout_RowMajor, '1111'); + MarkTileValidRegionDefined(11); + InstallSharedTile((Zeros{6} + 41) as SharedTileID, + _Tiles[[10]], '1111'); + InstallSharedTile((Zeros{6} + 42) as SharedTileID, + _Tiles[[11]], '1111'); + else + let primary_rows = if trans_a then k else 1; + let primary_columns = if trans_a then 1 else k; + let primary_physical_rows = DerivedTileRows( + 128, a_pitch, TileDataType_HiF4X2); + ConfigureTileForMask(10, 128, primary_physical_rows, + a_pitch, primary_rows, primary_columns, + TileDataType_HiF4X2, TileLayout_RowMajor, '1111'); + MarkTileValidRegionDefined(10); + ConfigureTileForMask(11, 128, + DerivedTileRows(128, 4, TileDataType_U32), 4, + 1, 1, TileDataType_U32, TileLayout_RowMajor, '1111'); + MarkTileValidRegionDefined(11); + let b_rows = if trans_b then k else 1; + let b_columns = if trans_b then 1 else k; + ConfigureTileForMask(12, 128, + DerivedTileRows(128, b_pitch, TileDataType_FP16), b_pitch, + b_rows, b_columns, TileDataType_FP16, + TileLayout_RowMajor, '1111'); + MarkTileValidRegionDefined(12); + InstallSharedTile((Zeros{6} + 40) as SharedTileID, + _Tiles[[10]], '1111'); + InstallSharedTile((Zeros{6} + 41) as SharedTileID, + _Tiles[[11]], '1111'); + InstallSharedTile((Zeros{6} + 42) as SharedTileID, + _Tiles[[12]], '1111'); + end; + + var start: bits(64) = Zeros{64} + 0x00431181; + start[31:27] = TileDataTypeToEncoding(left_type); + let started = ExecuteCommandInstruction(start, 32); + assert started == CommandExecution_Executed; + SetBundleDataAttributeState(TileDataTypeToEncoding(right_type), + Zeros{5}, Zeros{2}, Zeros{3}, Zeros{3}, FALSE, FALSE); + _BundleDataAttributesPresent = TRUE; + SetBundleFixedPointAttributeState( + Zeros{6}, Zeros{3}, Zeros{4}, FALSE, FALSE, FALSE, FALSE, + trans_a, trans_b); + SetBundleDimension(0, Zeros{PTO_XLEN} + 1); + SetBundleDimension(1, Zeros{PTO_XLEN} + 1); + SetBundleDimension(2, Zeros{PTO_XLEN} + k); + if right_role then + BindBundleSharedIO((Zeros{6} + 41) as SharedTileID, 0, '1111'); + BindBundleSharedIO((Zeros{6} + 42) as SharedTileID, 0, '1111'); + else + BindBundleSharedIO((Zeros{6} + 40) as SharedTileID, 0, '1111'); + BindBundleSharedIO((Zeros{6} + 41) as SharedTileID, 0, '1111'); + BindBundleSharedIO((Zeros{6} + 42) as SharedTileID, 0, '1111'); + end; + let shared_count = if right_role then 2 else 3; + assert TileMXInputTypeSupported(TileDataType_HiF4X2); + assert !TileOrdinaryMatrixInputTypeSupported(TileDataType_HiF4X2); + assert TileMXOperandPairLegal(left_type, right_type); + assert BundleMatrixSharedSchemasLegal( + 4, left_type, right_type, 1, 1, k, shared_count) == (k == 2); +end; + +func main() => integer +begin + for role = 0 to 1 looplimit 2 do + let right_role = role == 1; + for k_case = 0 to 1 looplimit 2 do + let k = if k_case == 0 then 2 else 3; + for transpose_case = 0 to 3 looplimit 4 do + let trans_a = !right_role && transpose_case MOD 2 == 1; + let trans_b = transpose_case >= 2; + RunSharedHiF4Shape(right_role, k, trans_a, trans_b); + end; + end; + end; + return 0; +end; diff --git a/tests/asl/block/model/dispatch/cube-tmatmul/block-bound-tmatmul-shared-packed-subview-readiness-053.asl b/tests/asl/block/model/dispatch/cube-tmatmul/block-bound-tmatmul-shared-packed-subview-readiness-053.asl new file mode 100644 index 000000000..bb7284dc2 --- /dev/null +++ b/tests/asl/block/model/dispatch/cube-tmatmul/block-bound-tmatmul-shared-packed-subview-readiness-053.asl @@ -0,0 +1,72 @@ +// PTO-TEST: {"id":"PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-SUBVIEW-READINESS-053","source":"asl/block/model/dispatch/cube-tmatmul.asl","requirements":["PTO-B-SHARED-WHOLE-PARENT-READY-001","PTO-CUBE-SHARED-TRANSPOSE-001","PTO-B-SUBVIEW-SHARED-PER-PE-001"],"kind":"boundary","summary":"Packed Shared B subviews wait for published whole-parent readiness without destination effects.","pass_condition":"A valid 1x194 packed B CELL view over an unpublished 8x256 parent causes TMATMUL to wait with no fault, destination allocation, Shared consumption, payload mutation, or readiness/generation-state change.","related_sources":["asl/block/model/dispatch/shared-cube-matrix.asl","asl/block/model/operands/shared-generation.asl","asl/tile/model/state/shared-registers.asl"]} + +func main() => integer +begin + ResetProfileState(); + ConfigureTileForMask(10, 4096, 32, 256, 17, 194, + TileDataType_E2M1X2, TileLayout_RowMajor, '1111'); + ConfigureTileForMask(11, 1024, 8, 256, 8, 194, + TileDataType_E2M1X2, TileLayout_RowMajor, '1111'); + MarkTileValidRegionDefined(10); + MarkTileValidRegionDefined(11); + WriteTileElement(11, 0, 193, Zeros{PTO_XLEN} + 12); + InstallSharedTile((Zeros{6} + 40) as SharedTileID, + _Tiles[[10]], '1111'); + InstallSharedTile((Zeros{6} + 41) as SharedTileID, + _Tiles[[11]], '0011'); + let parent_before = SharedTileRecord((Zeros{6} + 41) as SharedTileID); + assert !parent_before.whole_parent_ready && !parent_before.published; + + var start: bits(64) = Zeros{64} + 0x00031181; + start[31:27] = TileDataTypeToEncoding(TileDataType_E2M1X2); + let started = ExecuteCommandInstruction(start, 32); + assert started == CommandExecution_Executed; + SetBundleFixedPointAttributeState( + Zeros{6}, Zeros{3}, Zeros{4}, FALSE, FALSE, FALSE, FALSE); + SetBundleDimension(0, Zeros{PTO_XLEN} + 17); + SetBundleDimension(1, Zeros{PTO_XLEN} + 1); + SetBundleDimension(2, Zeros{PTO_XLEN} + 194); + BindBundleSharedIO((Zeros{6} + 40) as SharedTileID, 0, '1111'); + BindBundleSharedIO((Zeros{6} + 41) as SharedTileID, 0, '1111'); + AddBundleTileBinding( + TRUE, 0, 1, '1111', FALSE, FALSE, 0, 0, TRUE); + _BundleSharedBindings[[1]].source0_subview.valid = TRUE; + _BundleSharedBindings[[1]].source0_subview.reg_src = 2; + _BundleSharedBindings[[1]].source0_subview.uimm11 = Zeros{11}; + _BundleSharedBindings[[1]].source0_subview.size_code = 1; + for pe = 0 to 3 looplimit 4 do + WritePEGPR(pe as MemoryAgentId, 2, Zeros{PTO_XLEN} + pe); + end; + + let generation_index = SharedTileArrayIndex( + (Zeros{6} + 41) as SharedTileID); + let generation_before = _SharedGenerations[[generation_index]]; + let completed = ExecuteBundleTileOperation(); + assert !completed && _LastFault == Fault_None; + assert !_BundleTileBindings[[0]].destination_allocated_by_bundle; + assert !_BundleSharedBindings[[0]].consumed; + assert !_BundleSharedBindings[[1]].consumed; + let parent_after = SharedTileRecord((Zeros{6} + 41) as SharedTileID); + assert parent_after.descriptor_valid == parent_before.descriptor_valid; + assert parent_after.allocation_mask == parent_before.allocation_mask; + assert parent_after.initialized_mask == parent_before.initialized_mask; + assert parent_after.whole_parent_ready == parent_before.whole_parent_ready; + assert parent_after.published == parent_before.published; + assert parent_after.tile.payload[[0]] == parent_before.tile.payload[[0]]; + assert parent_after.tile.payload[[12]] == parent_before.tile.payload[[12]]; + assert TileLogicalElementDefined(parent_after.tile, + TileLogicalLinearIndex(parent_after.tile, 0, 193)); + let generation_after = _SharedGenerations[[generation_index]]; + assert generation_after.open == generation_before.open; + assert generation_after.closed == generation_before.closed; + assert generation_after.published == generation_before.published; + assert generation_after.shared_tile_id == generation_before.shared_tile_id; + assert generation_after.participant_mask == generation_before.participant_mask; + assert generation_after.parent_size_code == generation_before.parent_size_code; + assert generation_after.parent_cell_count == generation_before.parent_cell_count; + assert generation_after.covered_cells == generation_before.covered_cells; + assert generation_after.ready_cells == generation_before.ready_cells; + assert generation_after.arrived_participants == generation_before.arrived_participants; + assert generation_after.working_valid == generation_before.working_valid; + return 0; +end; diff --git a/tests/asl/block/model/dispatch/cube-tmatmul/block-bound-tmatmul-shared-packed-transposed-n-upper-055.asl b/tests/asl/block/model/dispatch/cube-tmatmul/block-bound-tmatmul-shared-packed-transposed-n-upper-055.asl new file mode 100644 index 000000000..090ae4bef --- /dev/null +++ b/tests/asl/block/model/dispatch/cube-tmatmul/block-bound-tmatmul-shared-packed-transposed-n-upper-055.asl @@ -0,0 +1,41 @@ +// PTO-TEST: {"id":"PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-TRANSPOSED-N-UPPER-055","source":"asl/block/model/dispatch/cube-tmatmul.asl","requirements":["PTO-TMATMUL-CONTRACT-001","PTO-CUBE-SHARED-TRANSPOSE-001"],"kind":"boundary","summary":"Packed TransB with N=65535 rejects because no even 16-bit source pitch can represent it.","pass_condition":"Dimensions M=1,N=65535,K=2 remain legal and a generic-legal Shared B physical 2x65535 descriptor is rejected only when selected as packed transposed B due its odd original pitch.","related_sources":["asl/block/model/dispatch/shared-cube-matrix.asl","asl/tile/model/legality/matrix-shape.asl"]} + +func main() => integer +begin + ResetProfileState(); + ConfigureTileForMask(10, 128, 64, 2, 1, 2, + TileDataType_E2M1X2, TileLayout_RowMajor, '1111'); + ConfigureTileForMask(11, 65536, 2, 65535, 2, 65535, + TileDataType_E2M1X2, TileLayout_RowMajor, '1111'); + MarkTileValidRegionDefined(10); + MarkTileValidRegionDefined(11); + InstallSharedTile((Zeros{6} + 40) as SharedTileID, + _Tiles[[10]], '1111'); + InstallSharedTile((Zeros{6} + 41) as SharedTileID, + _Tiles[[11]], '1111'); + assert TileInfoDescriptorLegal(_Tiles[[11]]); + assert SharedTileDescriptorLegal((Zeros{6} + 41) as SharedTileID); + + var start: bits(64) = Zeros{64} + 0x00031181; + start[31:27] = TileDataTypeToEncoding(TileDataType_E2M1X2); + let started = ExecuteCommandInstruction(start, 32); + assert started == CommandExecution_Executed; + SetBundleFixedPointAttributeState( + Zeros{6}, Zeros{3}, Zeros{4}, FALSE, FALSE, FALSE, FALSE, + FALSE, TRUE); + SetBundleDimension(0, Zeros{PTO_XLEN} + 1); + SetBundleDimension(1, Zeros{PTO_XLEN} + 65535); + SetBundleDimension(2, Zeros{PTO_XLEN} + 2); + BindBundleSharedIO((Zeros{6} + 40) as SharedTileID, 0, '1111'); + BindBundleSharedIO((Zeros{6} + 41) as SharedTileID, 0, '1111'); + assert BundleTMATMULDimensionsLegal(2); + assert !BundleMatrixSharedSchemasLegal( + 11, TileDataType_E2M1X2, TileDataType_E2M1X2, + 1, 65535, 2, 2); + assert BundleMatrixSharedBPrimarySchemaLegal( + 1, 2, 65535, TileDataType_E2M1X2, TRUE) == FALSE; + assert !_BundleTileBindings[[0]].destination_allocated_by_bundle; + assert !_BundleSharedBindings[[0]].consumed; + assert !_BundleSharedBindings[[1]].consumed; + return 0; +end; diff --git a/tests/asl/block/model/dispatch/cube-tmatmul/block-bound-tmatmul-shared-packed-types-050.asl b/tests/asl/block/model/dispatch/cube-tmatmul/block-bound-tmatmul-shared-packed-types-050.asl new file mode 100644 index 000000000..d2f47f4c2 --- /dev/null +++ b/tests/asl/block/model/dispatch/cube-tmatmul/block-bound-tmatmul-shared-packed-types-050.asl @@ -0,0 +1,71 @@ +// PTO-TEST: {"id":"PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-TYPES-BOUNDARY-050","source":"asl/block/model/dispatch/cube-tmatmul.asl","requirements":["PTO-CUBE-SHARED-TRANSPOSE-001"],"kind":"boundary","summary":"Four-bit packed Shared parity is checked by primary role and transpose form.","pass_condition":"For E2M1X2, E1M2X2, S4X2, and U4X2, legal even-pitch Shared source descriptors pass Matrix schemas at K=2 and odd K=3 rejects for both Shared roles across every all-Shared transpose pair and right-only TransB forms.","related_sources":["asl/tile/model/legality/matrix-shape.asl","asl/block/model/dispatch/shared-cube-matrix.asl"]} + +func main() => integer +begin + for type_case = 0 to 3 looplimit 4 do + let data_type = if type_case == 0 then TileDataType_E2M1X2 + else if type_case == 1 then TileDataType_E1M2X2 + else if type_case == 2 then TileDataType_S4X2 + else TileDataType_U4X2; + for k_case = 0 to 1 looplimit 2 do + let k = if k_case == 0 then 2 else 3; + for transpose_case = 0 to 3 looplimit 4 do + for sharing_case = 0 to 1 looplimit 2 do + ResetProfileState(); + let left_shared = sharing_case == 1; + let trans_a = left_shared && transpose_case MOD 2 == 1; + let trans_b = transpose_case >= 2; + let a_pitch = if trans_a then 2 else if k == 2 then 2 else 4; + let b_pitch = if trans_b then 2 else if k == 2 then 2 else 4; + let a_valid_rows = if trans_a then k else 1; + let a_valid_columns = if trans_a then 1 else k; + let b_valid_rows = if trans_b then k else 1; + let b_valid_columns = if trans_b then 1 else k; + let a_rows = DerivedTileRows(128, a_pitch, data_type); + let b_rows = DerivedTileRows(128, b_pitch, data_type); + if left_shared then + ConfigureTileForMask(10, 128, a_rows, a_pitch, + a_valid_rows, a_valid_columns, data_type, + TileLayout_RowMajor, '1111'); + MarkTileValidRegionDefined(10); + InstallSharedTile((Zeros{6} + 40) as SharedTileID, + _Tiles[[10]], '1111'); + end; + ConfigureTileForMask(11, 128, b_rows, b_pitch, + b_valid_rows, b_valid_columns, data_type, + TileLayout_RowMajor, '1111'); + MarkTileValidRegionDefined(11); + InstallSharedTile((Zeros{6} + 41) as SharedTileID, + _Tiles[[11]], '1111'); + + var start: bits(64) = Zeros{64} + 0x00031181; + start[31:27] = TileDataTypeToEncoding(data_type); + let started = ExecuteCommandInstruction(start, 32); + assert started == CommandExecution_Executed; + SetBundleDataAttributeState( + TileDataTypeToEncoding(data_type), Zeros{5}, + Zeros{2}, Zeros{3}, Zeros{3}, FALSE, FALSE); + _BundleDataAttributesPresent = TRUE; + SetBundleFixedPointAttributeState( + Zeros{6}, Zeros{3}, Zeros{4}, FALSE, FALSE, + FALSE, FALSE, trans_a, trans_b); + SetBundleDimension(0, Zeros{PTO_XLEN} + 1); + SetBundleDimension(1, Zeros{PTO_XLEN} + 1); + SetBundleDimension(2, Zeros{PTO_XLEN} + k); + if left_shared then + BindBundleSharedIO((Zeros{6} + 40) as SharedTileID, + 0, '1111'); + end; + BindBundleSharedIO((Zeros{6} + 41) as SharedTileID, + 0, '1111'); + let shared_count = if left_shared then 2 else 1; + assert TileInfoDescriptorLegal(_Tiles[[11]]); + let schemas_legal = BundleMatrixSharedSchemasLegal( + 11, data_type, data_type, 1, 1, k, shared_count); + assert schemas_legal == (k == 2); + end; + end; + end; + end; + return 0; +end; diff --git a/tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-bstart-nonpower-038.asl b/tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-bstart-nonpower-038.asl new file mode 100644 index 000000000..dd3fb3a33 --- /dev/null +++ b/tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-bstart-nonpower-038.asl @@ -0,0 +1,92 @@ +// PTO-TEST: {"id":"PTO-AVS-BLOCK-TMATMUL-SHARED-BSTART-NONPOWER-038","source":"asl/block/model/dispatch/cube-tmatmul.asl","requirements":["PTO-BSTART-TMATMUL-CONTRACT-001","PTO-BSTART-TMATMUL-ACC-CONTRACT-001","PTO-BSTART-TMATMUL-BIAS-CONTRACT-001","PTO-BSTART-TMATMULMX-CONTRACT-001","PTO-BSTART-TMATMULMX-ACC-CONTRACT-001","PTO-BSTART-TMATMULMX-BIAS-CONTRACT-001","PTO-CUBE-SHARED-TRANSPOSE-001"],"kind":"execution","summary":"Every decoded BSTART TMATMUL form executes non-power N and K with both primaries Shared.","pass_condition":"M=2, N=3, K=5 completes through each of the six BSTART selectors with Shared FP16 A/B, required Local C or Bias auxiliaries, and a defined FP32 M16 destination of exact valid shape.","related_sources":["asl/block/execution/BSTART.TMATMUL.asl","asl/block/execution/BSTART.TMATMUL.ACC.asl","asl/block/execution/BSTART.TMATMUL.BIAS.asl","asl/block/execution/BSTART.TMATMULMX.asl","asl/block/execution/BSTART.TMATMULMX.ACC.asl","asl/block/execution/BSTART.TMATMULMX.BIAS.asl","asl/block/model/dispatch/shared-cube-matrix.asl"]} + +func main() => integer +begin + for variant = 0 to 5 looplimit 6 do + ResetProfileState(); + let uses_accumulator = variant == 1 || variant == 4; + let uses_bias = variant == 2 || variant == 5; + let start_opcode = if variant == 0 then 0x00031181 + else if variant == 1 then 0x00231181 + else if variant == 2 then 0x00131181 + else if variant == 3 then 0x00431181 + else if variant == 4 then 0x00631181 + else 0x00531181; + + ConfigureTileForMask(10, 256, DerivedTileRows(256, 8, + TileDataType_FP16), 8, 2, 5, TileDataType_FP16, + TileLayout_RowMajor, '1111'); + ConfigureTileForMask(11, 256, DerivedTileRows(256, 8, + TileDataType_FP16), 8, 3, 5, TileDataType_FP16, + TileLayout_RowMajor, '1111'); + for row = 0 to 1 looplimit 2 do + for column = 0 to 4 looplimit 5 do + WriteTileElement(10, row, column, Zeros{PTO_XLEN}); + end; + end; + for row = 0 to 2 looplimit 3 do + for column = 0 to 4 looplimit 5 do + WriteTileElement(11, row, column, Zeros{PTO_XLEN}); + end; + end; + InstallSharedTile((Zeros{6} + 40) as SharedTileID, + _Tiles[[10]], '1111'); + InstallSharedTile((Zeros{6} + 41) as SharedTileID, + _Tiles[[11]], '1111'); + + if uses_accumulator then + let c_ready = ConfigureCubeTileForMask(3, 256, 2, 3, + TileDataType_FP32, TileLayout_CUBE_M16, '1111'); + assert c_ready; + for row = 0 to 1 looplimit 2 do + for column = 0 to 2 looplimit 3 do + WriteTileElement(3, row, column, Zeros{PTO_XLEN}); + end; + end; + end; + if uses_bias then + let bias_ready = ConfigureCubeTileForMask(4, 128, 1, 3, + TileDataType_FP32, TileLayout_CUBE_N8, '1111'); + assert bias_ready; + for column = 0 to 2 looplimit 3 do + WriteTileElement(4, 0, column, Zeros{PTO_XLEN}); + end; + end; + + var start: bits(64) = Zeros{64} + start_opcode; + start[31:27] = Zeros{5} + 4; + let started = ExecuteCommandInstruction(start, 32); + assert started == CommandExecution_Executed; + SetBundleFixedPointAttributeState( + Zeros{6}, Zeros{3}, Zeros{4}, FALSE, FALSE, FALSE, FALSE, + FALSE, FALSE, FALSE); + SetBundleDimension(0, Zeros{PTO_XLEN} + 2); + SetBundleDimension(1, Zeros{PTO_XLEN} + 3); + SetBundleDimension(2, Zeros{PTO_XLEN} + 5); + BindBundleSharedIO((Zeros{6} + 40) as SharedTileID, 0, '1111'); + BindBundleSharedIO((Zeros{6} + 41) as SharedTileID, 0, '1111'); + if uses_accumulator then + AddBundleTileBinding( + TRUE, 0, 2, '1111', TRUE, FALSE, 3, 0, TRUE); + elsif uses_bias then + AddBundleTileBinding( + TRUE, 0, 2, '1111', TRUE, FALSE, 4, 0, TRUE); + else + AddBundleTileBinding( + TRUE, 0, 2, '1111', FALSE, FALSE, 0, 0, TRUE); + end; + + let completed = ExecuteBundleTileOperation(); + assert completed && _LastFault == Fault_None; + let destination = BundleMatrixDestinationAt(0); + assert _Tiles[[destination]].contents_defined; + assert _Tiles[[destination]].layout == TileLayout_CUBE_M16; + assert _Tiles[[destination]].data_type == TileDataType_FP32; + assert _Tiles[[destination]].valid_rows == 2; + assert _Tiles[[destination]].valid_columns == 3; + assert TileCubeDescriptorLegal(_Tiles[[destination]]); + assert _BundleSharedBindings[[0]].consumed; + assert _BundleSharedBindings[[1]].consumed; + end; + return 0; +end; diff --git a/tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-large-source-044.asl b/tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-large-source-044.asl new file mode 100644 index 000000000..f2e8f57a0 --- /dev/null +++ b/tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-large-source-044.asl @@ -0,0 +1,145 @@ +// PTO-TEST: {"id":"PTO-AVS-BLOCK-TMATMUL-SHARED-LARGE-SOURCE-044","source":"asl/block/model/dispatch/cube-tmatmul.asl","requirements":["PTO-TMATMUL-CONTRACT-001","PTO-CUBE-SHARED-TRANSPOSE-001","PTO-CUBE-GROUP-M-DISTRIBUTION-001"],"kind":"execution","summary":"128 and 256 KiB Shared sources execute through typed logical carrier reads with legal 64 KiB Local output.","pass_condition":"At group_M=65 PE2 executes N=256/K=256 and N=512/K=256 Shared U16 sources (128/256 KiB) using Local CUBE_M32 A and exact-shape U32 output no larger than 64 KiB; distinct values across logical carrier 8192 and the final carrier are observed after publication and through canonical MatrixReadLogicalElement views.","related_sources":["asl/block/model/dispatch/shared-cube-matrix.asl","asl/tile/model/definedness/packed-boundary.asl"]} + +func RunLargeSharedSource(n: integer {256,512}, + source_capacity: integer {131072,262144}, + destination_size_code: integer {9,10}) +begin + ResetProfileState(); + SelectMemoryEventAgent(2); + let active_m = BundleMatrixCooperativeValidM(65, 2); + assert active_m == 1; + let a_capacity = TileCubePhysicalRequiredBytes( + TileLayout_CUBE_M32, 32, 256, TileDataType_U16); + let a_ready = ConfigureCubeTileForMaskWithPhysical( + 1, a_capacity, 32, 256, active_m, 256, + TileDataType_U16, TileLayout_CUBE_M32, '1111'); + assert a_ready; + MarkTileValidRegionDefined(1); + + let shared_id = (Zeros{6} + 41) as SharedTileID; + var shared_input = TileWithValidRegionDefined( + MaterializeSharedTileForReadSchemaAtCapacity( + shared_id, n, 256, 256, TileDataType_U16, + TileLayout_RowMajor, source_capacity)); + // Pin values across the 32768-logical-element boundary and in adjacent + // U16 lanes of one carrier, independently of the private-view mapping. + let before_threshold = TileLogicalLinearIndex(shared_input, 127, 255); + let threshold_lane0 = TileLogicalLinearIndex(shared_input, 128, 0); + let threshold_lane1 = TileLogicalLinearIndex(shared_input, 128, 1); + shared_input = TileInfoWithLogicalElement( + shared_input, before_threshold, Zeros{PTO_XLEN} + 0xBEEF); + shared_input = TileInfoWithLogicalElement( + shared_input, threshold_lane0, Zeros{PTO_XLEN} + 0x1234); + shared_input = TileInfoWithLogicalElement( + shared_input, threshold_lane1, Zeros{PTO_XLEN} + 0x5678); + // Distinct final adjacent lanes reach the last carrier in both source + // capacities, including lane 3 at the 256 KiB bound. + let final_lane2 = TileLogicalLinearIndex(shared_input, n - 1, 254); + let final_lane3 = TileLogicalLinearIndex(shared_input, n - 1, 255); + shared_input = TileInfoWithLogicalElement( + shared_input, final_lane2, Zeros{PTO_XLEN} + 0x9ABC); + shared_input = TileInfoWithLogicalElement( + shared_input, final_lane3, Zeros{PTO_XLEN} + 0xDEF0); + InstallSharedTile((Zeros{6} + 41) as SharedTileID, + shared_input, '1111'); + assert SharedTileDescriptorLegal((Zeros{6} + 41) as SharedTileID); + let shared_before = SharedTileRecord((Zeros{6} + 41) as SharedTileID); + + let source_element = TileLogicalLinearIndex( + shared_before.tile, n - 1, 255); + let expected_element = n * 256 - 1; + assert source_element == expected_element; + assert TilePackedCarrierIndex( + TileDataType_U16, source_element) == expected_element DIVRM 4; + assert TilePackedLaneIndex( + TileDataType_U16, source_element) == expected_element MOD 4; + assert TileLogicalElementDefined(shared_before.tile, source_element); + let before_threshold_source = TileLogicalLinearIndex( + shared_before.tile, 127, 255); + let threshold_source0 = TileLogicalLinearIndex( + shared_before.tile, 128, 0); + let threshold_source1 = TileLogicalLinearIndex( + shared_before.tile, 128, 1); + assert before_threshold_source == 32767; + assert TilePackedCarrierIndex(TileDataType_U16, + before_threshold_source) == 8191; + assert TilePackedLaneIndex(TileDataType_U16, + before_threshold_source) == 3; + assert threshold_source0 == 32768; + assert TilePackedCarrierIndex(TileDataType_U16, + threshold_source0) == 8192; + assert TilePackedLaneIndex(TileDataType_U16, + threshold_source0) == 0; + assert threshold_source1 == 32769; + assert TilePackedCarrierIndex(TileDataType_U16, + threshold_source1) == 8192; + assert TilePackedLaneIndex(TileDataType_U16, + threshold_source1) == 1; + assert TileReadLogicalElement(shared_before.tile, before_threshold_source) == + Zeros{PTO_XLEN} + 0xBEEF; + assert TileReadLogicalElement(shared_before.tile, threshold_source0) == + Zeros{PTO_XLEN} + 0x1234; + assert TileReadLogicalElement(shared_before.tile, threshold_source1) == + Zeros{PTO_XLEN} + 0x5678; + let final_source_lane2 = TileLogicalLinearIndex( + shared_before.tile, n - 1, 254); + let final_source_lane3 = TileLogicalLinearIndex( + shared_before.tile, n - 1, 255); + assert final_source_lane3 == n * 256 - 1; + assert TilePackedLaneIndex(TileDataType_U16, final_source_lane2) == 2; + assert TilePackedLaneIndex(TileDataType_U16, final_source_lane3) == 3; + assert TileReadLogicalElement(shared_before.tile, final_source_lane2) == + Zeros{PTO_XLEN} + 0x9ABC; + assert TileReadLogicalElement(shared_before.tile, final_source_lane3) == + Zeros{PTO_XLEN} + 0xDEF0; + + var start: bits(64) = Zeros{64} + 0x00031181; + start[31:27] = Zeros{5} + 26; + let started = ExecuteCommandInstruction(start, 32); + assert started == CommandExecution_Executed; + SetBundleFixedPointAttributeState( + Zeros{6}, Zeros{3}, Zeros{4}, FALSE, FALSE, FALSE, FALSE); + SetBundleDimension(0, Zeros{PTO_XLEN} + 65); + SetBundleDimension(1, Zeros{PTO_XLEN} + n); + SetBundleDimension(2, Zeros{PTO_XLEN} + 256); + BindBundleSharedIO((Zeros{6} + 41) as SharedTileID, 0, '1111'); + AddBundleTileBinding( + TRUE, 0, destination_size_code, '1111', TRUE, FALSE, 1, 0, TRUE); + + let right_private = MaterializeBundleSharedMatrixPrimary( + 0, 256, n, TileDataType_U16, FALSE, _CurrentMemoryAgent); + assert BundleMatrixPrivateSharedViewLegal( + right_private, 256, n, TileDataType_U16, FALSE); + assert MatrixReadLogicalElement(right_private, 255, 127) == + Zeros{PTO_XLEN} + 0xBEEF; + assert MatrixReadLogicalElement(right_private, 0, 128) == + Zeros{PTO_XLEN} + 0x1234; + assert MatrixReadLogicalElement(right_private, 1, 128) == + Zeros{PTO_XLEN} + 0x5678; + assert MatrixReadLogicalElement(right_private, 254, n - 1) == + Zeros{PTO_XLEN} + 0x9ABC; + assert MatrixReadLogicalElement(right_private, 255, n - 1) == + Zeros{PTO_XLEN} + 0xDEF0; + + let completed = ExecuteBundleTileOperation(); + assert completed && _LastFault == Fault_None; + let destination = BundleMatrixDestinationAt(0); + assert _Tiles[[destination]].contents_defined; + assert _Tiles[[destination]].layout == TileLayout_CUBE_M32; + assert _Tiles[[destination]].data_type == TileDataType_U32; + assert _Tiles[[destination]].capacity_bytes <= 65536; + assert _Tiles[[destination]].valid_rows == active_m; + assert _Tiles[[destination]].valid_columns == n; + let shared_after = SharedTileRecord((Zeros{6} + 41) as SharedTileID); + assert shared_after.tile.capacity_bytes == shared_before.tile.capacity_bytes; + assert shared_after.tile.valid_rows == shared_before.tile.valid_rows; + assert shared_after.tile.valid_columns == shared_before.tile.valid_columns; + assert shared_after.tile.payload[[0]] == shared_before.tile.payload[[0]]; +end; + +func main() => integer +begin + RunLargeSharedSource(256, 131072, 9); + RunLargeSharedSource(512, 262144, 10); + return 0; +end; diff --git a/tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-local-packed-a-042.asl b/tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-local-packed-a-042.asl new file mode 100644 index 000000000..6b82c0364 --- /dev/null +++ b/tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-local-packed-a-042.asl @@ -0,0 +1,62 @@ +// PTO-TEST: {"id":"PTO-AVS-BLOCK-TMATMUL-SHARED-LOCAL-PACKED-A-042","source":"asl/block/model/dispatch/cube-tmatmul.asl","requirements":["PTO-TMATMUL-CONTRACT-001","PTO-CUBE-SHARED-TRANSPOSE-001"],"kind":"execution","summary":"A Local packed A does not trigger the Shared packed-primary even-K rule.","pass_condition":"Right-only Shared FP16 B with Local E2M1X2 A completes at odd K=17 and publishes a defined exact-shape FP32 destination.","related_sources":["asl/block/model/dispatch/shared-cube-matrix.asl","asl/tile/model/legality/matrix-functions.asl"]} + +func main() => integer +begin + ResetProfileState(); + SelectMemoryEventAgent(0); + let a_capacity = TileCubePhysicalRequiredBytes( + TileLayout_CUBE_M16, 16, 32, TileDataType_E2M1X2); + let a_ready = ConfigureCubeTileForMaskWithPhysical( + 1, a_capacity, 16, 32, 16, 17, TileDataType_E2M1X2, + TileLayout_CUBE_M16, '1111'); + assert a_ready; + for row = 0 to 15 looplimit 16 do + for column = 0 to 16 looplimit 17 do + WriteTileElement(1, row, column, Zeros{PTO_XLEN}); + end; + end; + assert TileCubeDescriptorLegal(_Tiles[[1]]); + + ConfigureTileForMask(10, 256, + DerivedTileRows(256, 32, TileDataType_FP16), 32, + 3, 17, TileDataType_FP16, TileLayout_RowMajor, '1111'); + for row = 0 to 2 looplimit 3 do + for column = 0 to 16 looplimit 17 do + WriteTileElement(10, row, column, Zeros{PTO_XLEN}); + end; + end; + InstallSharedTile((Zeros{6} + 42) as SharedTileID, + _Tiles[[10]], '1111'); + + var start: bits(64) = Zeros{64} + 0x00031181; + start[31:27] = Zeros{5} + 11; + let started = ExecuteCommandInstruction(start, 32); + assert started == CommandExecution_Executed; + SetBundleDataAttributeState( + Zeros{5} + 4, Zeros{5}, Zeros{2}, Zeros{3}, Zeros{3}, + FALSE, FALSE); + _BundleDataAttributesPresent = TRUE; + SetBundleFixedPointAttributeState( + Zeros{6}, Zeros{3}, Zeros{4}, FALSE, FALSE, FALSE, FALSE, + FALSE, FALSE, FALSE); + SetBundleDimension(0, Zeros{PTO_XLEN} + 17); + SetBundleDimension(1, Zeros{PTO_XLEN} + 3); + SetBundleDimension(2, Zeros{PTO_XLEN} + 17); + BindBundleSharedIO((Zeros{6} + 42) as SharedTileID, 0, '1111'); + AddBundleTileBinding( + TRUE, 0, 3, '1111', TRUE, FALSE, 1, 0, TRUE); + assert BundleMatrixSharedSchemasLegal( + 0, TileDataType_E2M1X2, TileDataType_FP16, + 17, 3, 17, 1); + + let completed = ExecuteBundleTileOperation(); + assert completed && _LastFault == Fault_None; + let destination = BundleMatrixDestinationAt(0); + assert _Tiles[[destination]].contents_defined; + assert _Tiles[[destination]].layout == TileLayout_CUBE_M16; + assert _Tiles[[destination]].data_type == TileDataType_FP32; + assert _Tiles[[destination]].valid_rows == 16; + assert _Tiles[[destination]].valid_columns == 3; + assert _BundleSharedBindings[[0]].consumed; + return 0; +end; diff --git a/tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-nonpower-ranges-039.asl b/tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-nonpower-ranges-039.asl new file mode 100644 index 000000000..f07897961 --- /dev/null +++ b/tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-nonpower-ranges-039.asl @@ -0,0 +1,60 @@ +// PTO-TEST: {"id":"PTO-AVS-BLOCK-TMATMUL-SHARED-NONPOWER-RANGES-039","source":"asl/block/model/dispatch/cube-tmatmul.asl","requirements":["PTO-TMATMUL-CONTRACT-001","PTO-CUBE-SHARED-TRANSPOSE-001","PTO-CUBE-GROUP-M-DISTRIBUTION-001"],"kind":"execution","summary":"Decoded all-Shared TMATMUL accepts non-power N and K at small, medium, and large source shapes.","pass_condition":"M=2 with (N,K)=(3,3),(9,17),(24,193) completes from real Shared descriptors and publishes a defined exact-shape Local U32 destination.","related_sources":["asl/block/model/dispatch/shared-cube-matrix.asl","asl/tile/model/execution/cube.asl"]} + +func main() => integer +begin + for instance = 0 to 2 looplimit 3 do + ResetProfileState(); + let n = if instance == 0 then 3 else if instance == 1 then 9 else 24; + let k = if instance == 0 then 3 else if instance == 1 then 17 else 193; + let pitch = if instance == 0 then 4 else if instance == 1 then 32 else 256; + let capacity_a = pitch * 2 * 16; + let capacity_b = pitch * 2 * 32; + let physical_rows_a = DerivedTileRows( + capacity_a, pitch, TileDataType_U16); + let physical_rows_b = DerivedTileRows( + capacity_b, pitch, TileDataType_U16); + ConfigureTileForMask(10, capacity_a, physical_rows_a, pitch, + 2, k, TileDataType_U16, TileLayout_RowMajor, '1111'); + ConfigureTileForMask(11, capacity_b, physical_rows_b, pitch, + n, k, TileDataType_U16, TileLayout_RowMajor, '1111'); + for row = 0 to 1 looplimit 2 do + for column = 0 to k - 1 looplimit 256 do + WriteTileElement(10, row, column, Zeros{PTO_XLEN}); + end; + end; + for row = 0 to n - 1 looplimit 32 do + for column = 0 to k - 1 looplimit 256 do + WriteTileElement(11, row, column, Zeros{PTO_XLEN}); + end; + end; + InstallSharedTile((Zeros{6} + 40) as SharedTileID, + _Tiles[[10]], '1111'); + InstallSharedTile((Zeros{6} + 41) as SharedTileID, + _Tiles[[11]], '1111'); + + var start: bits(64) = Zeros{64} + 0x00031181; + start[31:27] = Zeros{5} + 26; + let started = ExecuteCommandInstruction(start, 32); + assert started == CommandExecution_Executed; + SetBundleFixedPointAttributeState( + Zeros{6}, Zeros{3}, Zeros{4}, FALSE, FALSE, FALSE, FALSE, + FALSE, FALSE, FALSE); + SetBundleDimension(0, Zeros{PTO_XLEN} + 2); + SetBundleDimension(1, Zeros{PTO_XLEN} + n); + SetBundleDimension(2, Zeros{PTO_XLEN} + k); + BindBundleSharedIO((Zeros{6} + 40) as SharedTileID, 0, '1111'); + BindBundleSharedIO((Zeros{6} + 41) as SharedTileID, 0, '1111'); + AddBundleTileBinding( + TRUE, 0, 6, '1111', FALSE, FALSE, 0, 0, TRUE); + + let completed = ExecuteBundleTileOperation(); + assert completed && _LastFault == Fault_None; + let destination = BundleMatrixDestinationAt(0); + assert _Tiles[[destination]].contents_defined; + assert _Tiles[[destination]].layout == TileLayout_CUBE_M16; + assert _Tiles[[destination]].valid_rows == 2; + assert _Tiles[[destination]].valid_columns == n; + assert TileCubeDescriptorLegal(_Tiles[[destination]]); + end; + return 0; +end; diff --git a/tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-packed-even-n-transpose-048.asl b/tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-packed-even-n-transpose-048.asl new file mode 100644 index 000000000..c5b5bbe0c --- /dev/null +++ b/tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-packed-even-n-transpose-048.asl @@ -0,0 +1,78 @@ +// PTO-TEST: {"id":"PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-EVEN-N-TRANSPOSE-048","source":"asl/block/model/dispatch/cube-tmatmul.asl","requirements":["PTO-TMATMUL-CONTRACT-001","PTO-CUBE-SHARED-TRANSPOSE-001"],"kind":"execution","summary":"Even-N packed Shared primaries execute under all transpose pairs.","pass_condition":"Decoded all-Shared E2M1X2 TMATMUL at M=17,N=4,K=6 completes for all TransA/TransB pairs with exact source shapes, even physical pitch, and defined exact-shape FP32 output.","related_sources":["asl/block/model/dispatch/shared-cube-matrix.asl","asl/tile/model/definedness/packed-boundary.asl"]} + +func PreparePackedEvenN(index: TileIndex, shared_tile_id: SharedTileID, + left: boolean, transpose: boolean) +begin + let logical_rows = if left then 17 else 6; + let logical_columns = if left then 6 else 4; + let source_rows = if left then + (if transpose then 6 else 17) + else (if transpose then 6 else 4); + let source_columns = if left then + (if transpose then 17 else 6) + else (if transpose then 4 else 6); + let pitch = if left && transpose then 32 else 8; + let physical_rows = DerivedTileRows(128, pitch, TileDataType_E2M1X2); + ConfigureTileForMask(index, 128, physical_rows, pitch, + source_rows, source_columns, TileDataType_E2M1X2, + TileLayout_RowMajor, '1111'); + MarkTileValidRegionDefined(index); + for row = 0 to source_rows - 1 looplimit 32 do + for column = 0 to source_columns - 1 looplimit 32 do + let logical_row = if left then + (if transpose then column else row) + else (if transpose then row else column); + let logical_column = if left then + (if transpose then row else column) + else (if transpose then column else row); + WriteTileElement(index, row, column, + Zeros{PTO_XLEN} + + ((logical_row + 2 * logical_column) MOD 8)); + end; + end; + InstallSharedTile(shared_tile_id, _Tiles[[index]], '1111'); +end; + +func main() => integer +begin + for controls = 0 to 3 looplimit 4 do + ResetProfileState(); + let trans_a = controls MOD 2 == 1; + let trans_b = controls >= 2; + PreparePackedEvenN(10, (Zeros{6} + 40) as SharedTileID, + TRUE, trans_a); + PreparePackedEvenN(11, (Zeros{6} + 41) as SharedTileID, + FALSE, trans_b); + + var start: bits(64) = Zeros{64} + 0x00031181; + start[31:27] = Zeros{5} + 11; + let started = ExecuteCommandInstruction(start, 32); + assert started == CommandExecution_Executed; + SetBundleFixedPointAttributeState( + Zeros{6}, Zeros{3}, Zeros{4}, FALSE, FALSE, FALSE, FALSE, + trans_a, trans_b); + SetBundleDimension(0, Zeros{PTO_XLEN} + 17); + SetBundleDimension(1, Zeros{PTO_XLEN} + 4); + SetBundleDimension(2, Zeros{PTO_XLEN} + 6); + BindBundleSharedIO((Zeros{6} + 40) as SharedTileID, 0, '1111'); + BindBundleSharedIO((Zeros{6} + 41) as SharedTileID, 0, '1111'); + AddBundleTileBinding( + TRUE, 0, 3, '1111', FALSE, FALSE, 0, 0, TRUE); + + assert BundleMatrixSharedLeftPrimarySchemaLegal( + 0, 17, 6, TileDataType_E2M1X2, trans_a); + assert BundleMatrixSharedBPrimarySchemaLegal( + 1, 6, 4, TileDataType_E2M1X2, trans_b); + let completed = ExecuteBundleTileOperation(); + assert completed && _LastFault == Fault_None; + let destination = BundleMatrixDestinationAt(0); + assert _Tiles[[destination]].contents_defined; + assert _Tiles[[destination]].layout == TileLayout_CUBE_M16; + assert _Tiles[[destination]].data_type == TileDataType_FP32; + assert _Tiles[[destination]].valid_rows == 16; + assert _Tiles[[destination]].valid_columns == 4; + assert _BundleSharedBindings[[0]].consumed; + assert _BundleSharedBindings[[1]].consumed; + end; + return 0; +end; diff --git a/tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-packed-subview-046.asl b/tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-packed-subview-046.asl new file mode 100644 index 000000000..989a4aa15 --- /dev/null +++ b/tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-packed-subview-046.asl @@ -0,0 +1,88 @@ +// PTO-TEST: {"id":"PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-SUBVIEW-046","source":"asl/block/model/dispatch/cube-tmatmul.asl","requirements":["PTO-TMATMUL-CONTRACT-001","PTO-CUBE-SHARED-TRANSPOSE-001","PTO-B-SUBVIEW-SHARED-PER-PE-001"],"kind":"execution","summary":"Packed 128-byte per-PE CELL views preserve N=1,K=194 row selections through Shared TMATMUL.","pass_condition":"For group_M=17,N=1,K=194, even-pitch Shared E2M1X2 A and an 8x256 Shared E2M1X2 B parent with valid 8x194 select exact 1x194 views at CELL offsets 0/1/2/3; active PEs execute to defined exact-shape FP32 output while all four source views and the parent remain unchanged.","related_sources":["asl/block/model/dispatch/shared-cube-matrix.asl","asl/block/model/operands/shared-generation.asl","asl/tile/model/definedness/packed-boundary.asl"]} + +func main() => integer +begin + for active_pe = 0 to 1 looplimit 2 do + ResetProfileState(); + ConfigureTileForMask(10, 4096, 32, 256, 17, 194, + TileDataType_E2M1X2, TileLayout_RowMajor, '1111'); + ConfigureTileForMask(11, 1024, 8, 256, 8, 194, + TileDataType_E2M1X2, TileLayout_RowMajor, '1111'); + MarkTileValidRegionDefined(10); + MarkTileValidRegionDefined(11); + for row = 0 to 7 looplimit 8 do + WriteTileElement(11, row, 0, Zeros{PTO_XLEN} + row + 1); + WriteTileElement(11, row, 192, Zeros{PTO_XLEN} + 3); + WriteTileElement(11, row, 193, Zeros{PTO_XLEN} + row + 8); + end; + InstallSharedTile((Zeros{6} + 40) as SharedTileID, + _Tiles[[10]], '1111'); + InstallSharedTile((Zeros{6} + 41) as SharedTileID, + _Tiles[[11]], '1111'); + + var start: bits(64) = Zeros{64} + 0x00031181; + start[31:27] = Zeros{5} + 11; + let started = ExecuteCommandInstruction(start, 32); + assert started == CommandExecution_Executed; + SetBundleFixedPointAttributeState( + Zeros{6}, Zeros{3}, Zeros{4}, FALSE, FALSE, FALSE, FALSE); + SetBundleDimension(0, Zeros{PTO_XLEN} + 17); + SetBundleDimension(1, Zeros{PTO_XLEN} + 1); + SetBundleDimension(2, Zeros{PTO_XLEN} + 194); + BindBundleSharedIO((Zeros{6} + 40) as SharedTileID, 0, '1111'); + BindBundleSharedIO((Zeros{6} + 41) as SharedTileID, 0, '1111'); + AddBundleTileBinding( + TRUE, 0, 1, '1111', FALSE, FALSE, 0, 0, TRUE); + _BundleSharedBindings[[1]].source0_subview.valid = TRUE; + _BundleSharedBindings[[1]].source0_subview.reg_src = 2; + _BundleSharedBindings[[1]].source0_subview.uimm11 = Zeros{11}; + _BundleSharedBindings[[1]].source0_subview.size_code = 1; + + // Each offset is one 128-byte CELL, exactly one 256-column packed row. + for pe = 0 to 3 looplimit 4 do + WritePEGPR(pe as MemoryAgentId, 2, Zeros{PTO_XLEN} + pe); + end; + assert BundleSharedSubviewLegal(1); + for pe = 0 to 3 looplimit 4 do + let parent_element = TileLogicalLinearIndex( + _Tiles[[11]], pe, 193); + assert parent_element == pe * 256 + 193; + assert TilePackedCarrierIndex(TileDataType_E2M1X2, + parent_element) == (pe * 256 + 193) DIVRM 16; + assert TilePackedLaneIndex(TileDataType_E2M1X2, + parent_element) == (pe * 256 + 193) MOD 16; + assert TileReadLogicalElement(_Tiles[[11]], parent_element) == + Zeros{PTO_XLEN} + pe + 8; + let view = MaterializeBundleSharedSubviewForPE( + 1, pe as MemoryAgentId); + assert view.valid_rows == 1 && view.valid_columns == 194; + let last_view_element = TileLogicalLinearIndex(view, 0, 193); + assert TileReadLogicalElement(view, last_view_element) == + Zeros{PTO_XLEN} + pe + 8; + end; + + let before = SharedTileRecord((Zeros{6} + 41) as SharedTileID); + _CurrentMemoryAgent = active_pe as MemoryAgentId; + let completed = ExecuteBundleTileOperation(); + assert completed && _LastFault == Fault_None; + let destination = BundleMatrixDestinationAt(0); + assert _Tiles[[destination]].contents_defined; + assert _Tiles[[destination]].data_type == TileDataType_FP32; + assert _Tiles[[destination]].valid_rows == + BundleMatrixCooperativeValidM(17, _CurrentMemoryAgent); + assert _Tiles[[destination]].valid_columns == 1; + let after = SharedTileRecord((Zeros{6} + 41) as SharedTileID); + assert after.tile.payload[[0]] == before.tile.payload[[0]]; + assert after.tile.payload[[124]] == before.tile.payload[[124]]; + assert TileLogicalElementDefined(after.tile, + TileLogicalLinearIndex(after.tile, 7, 193)); + assert after.tile.valid_rows == before.tile.valid_rows; + assert after.tile.valid_columns == before.tile.valid_columns; + assert after.descriptor_valid == before.descriptor_valid; + assert after.allocation_mask == before.allocation_mask; + assert after.initialized_mask == before.initialized_mask; + assert after.whole_parent_ready == before.whole_parent_ready; + assert after.published == before.published; + end; + return 0; +end; diff --git a/tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-packed-tight-odd-n-047.asl b/tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-packed-tight-odd-n-047.asl new file mode 100644 index 000000000..f851d7948 --- /dev/null +++ b/tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-packed-tight-odd-n-047.asl @@ -0,0 +1,64 @@ +// PTO-TEST: {"id":"PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-TIGHT-ODD-N-047","source":"asl/block/model/dispatch/cube-tmatmul.asl","requirements":["PTO-TMATMUL-CONTRACT-001","PTO-CUBE-SHARED-TRANSPOSE-001"],"kind":"execution","summary":"Tight-capacity Shared packed B with odd N=5 remains representable at K=194.","pass_condition":"Decoded all-Shared TMATMUL at M=17,N=5,K=194 accepts A [17,194]/2048 B and B [5,194]/512; the original B pitch addresses the independent final nibble and the private canonical [194,5] view stays within its unpadded 512-byte span.","related_sources":["asl/block/model/dispatch/shared-cube-matrix.asl","asl/tile/model/definedness/packed-boundary.asl"]} + +func main() => integer +begin + ResetProfileState(); + let a_rows = DerivedTileRows(2048, 194, TileDataType_E2M1X2); + ConfigureTileForMask(10, 2048, a_rows, 194, 17, 194, + TileDataType_E2M1X2, TileLayout_RowMajor, '1111'); + ConfigureTileForMask(11, 512, 5, 194, 5, 194, + TileDataType_E2M1X2, TileLayout_RowMajor, '1111'); + MarkTileValidRegionDefined(10); + MarkTileValidRegionDefined(11); + WriteTileElement(11, 4, 192, Zeros{PTO_XLEN} + 3); + WriteTileElement(11, 4, 193, Zeros{PTO_XLEN} + 12); + InstallSharedTile((Zeros{6} + 40) as SharedTileID, + _Tiles[[10]], '1111'); + InstallSharedTile((Zeros{6} + 41) as SharedTileID, + _Tiles[[11]], '1111'); + + var start: bits(64) = Zeros{64} + 0x00031181; + start[31:27] = Zeros{5} + 11; + let started = ExecuteCommandInstruction(start, 32); + assert started == CommandExecution_Executed; + SetBundleFixedPointAttributeState( + Zeros{6}, Zeros{3}, Zeros{4}, FALSE, FALSE, FALSE, FALSE); + SetBundleDimension(0, Zeros{PTO_XLEN} + 17); + SetBundleDimension(1, Zeros{PTO_XLEN} + 5); + SetBundleDimension(2, Zeros{PTO_XLEN} + 194); + BindBundleSharedIO((Zeros{6} + 40) as SharedTileID, 0, '1111'); + BindBundleSharedIO((Zeros{6} + 41) as SharedTileID, 0, '1111'); + AddBundleTileBinding( + TRUE, 0, 3, '1111', FALSE, FALSE, 0, 0, TRUE); + + // Physical source row 4, column 193 has an even 194-element pitch. + let source_element = TileLogicalLinearIndex(_Tiles[[11]], 4, 193); + assert source_element == 969; + assert TilePackedCarrierIndex(TileDataType_E2M1X2, source_element) == 60; + assert TilePackedLaneIndex(TileDataType_E2M1X2, source_element) == 9; + assert TileReadLogicalElement(_Tiles[[11]], source_element) == + Zeros{PTO_XLEN} + 12; + + let private_view = MaterializeBundleSharedMatrixPrimary( + 1, 194, 5, TileDataType_E2M1X2, FALSE, _CurrentMemoryAgent); + assert private_view.layout == TileLayout_ColumnMajor; + assert BundleMatrixPrivateSharedViewLegal( + private_view, 194, 5, TileDataType_E2M1X2, TRUE); + let private_element = TileLogicalLinearIndex(private_view, 193, 4); + assert private_element == 969; + assert private_element < PackedTileLogicalCapacity( + private_view.capacity_bytes, private_view.data_type); + assert TileReadLogicalElement(private_view, private_element) == + Zeros{PTO_XLEN} + 12; + + let completed = ExecuteBundleTileOperation(); + assert completed && _LastFault == Fault_None; + let destination = BundleMatrixDestinationAt(0); + assert _Tiles[[destination]].contents_defined; + assert _Tiles[[destination]].data_type == TileDataType_FP32; + assert _Tiles[[destination]].valid_rows == 16; + assert _Tiles[[destination]].valid_columns == 5; + assert _BundleSharedBindings[[0]].consumed; + assert _BundleSharedBindings[[1]].consumed; + return 0; +end; diff --git a/tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-packed-transpose-040.asl b/tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-packed-transpose-040.asl new file mode 100644 index 000000000..27cc298f5 --- /dev/null +++ b/tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-packed-transpose-040.asl @@ -0,0 +1,183 @@ +// PTO-TEST: {"id":"PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-TRANSPOSE-040","source":"asl/block/model/dispatch/cube-tmatmul.asl","requirements":["PTO-TMATMUL-CONTRACT-001","PTO-CUBE-SHARED-TRANSPOSE-001","PTO-CUBE-GROUP-M-DISTRIBUTION-001"],"kind":"execution","summary":"Packed Shared primaries accept even non-power K with odd valid M/N across all transpose pairs and padded even pitch.","pass_condition":"M=17,N=3,K=6 completes for all four transpose pairs using E2M1X2 Shared primaries; exact canonical private A/B reads match independent sentinels across PE0/PE1 global row 16, adjacent packed lanes, and a valid-tail/padding discriminator, with defined exact-shape output.","related_sources":["asl/block/model/dispatch/shared-cube-matrix.asl","asl/tile/model/definedness/packed-boundary.asl"]} + +func PreparePackedShared(index: TileIndex, shared_tile_id: bits(6), + left: boolean, transpose: boolean) +begin + let logical_rows = if left then 17 else 6; + let logical_columns = if left then 6 else 3; + let physical_rows = if left then + (if transpose then 8 else 32) + else (if transpose then 64 else 32); + let physical_pitch = if left then + (if transpose then 32 else 8) + else (if transpose then 4 else 8); + let capacity = 128; + let rows = DerivedTileRows( + capacity, physical_pitch, TileDataType_E2M1X2); + assert rows >= physical_rows; + let stored_rows = if left then + (if transpose then logical_columns else logical_rows) + else (if transpose then logical_rows else logical_columns); + let stored_columns = if left then + (if transpose then logical_rows else logical_columns) + else (if transpose then logical_columns else logical_rows); + ConfigureTileForMask(index, capacity, rows, physical_pitch, + stored_rows, stored_columns, TileDataType_E2M1X2, + TileLayout_RowMajor, '1111'); + for row = 0 to stored_rows - 1 looplimit 32 do + for column = 0 to stored_columns - 1 looplimit 32 do + let logical_row = if left then + (if transpose then column else row) + else (if transpose then row else column); + let logical_column = if left then + (if transpose then row else column) + else (if transpose then column else row); + let value = if left then + (logical_row + 2 * logical_column) MOD 8 + else (logical_row + 3 * logical_column) MOD 8; + WriteTileElement(index, row, column, + Zeros{PTO_XLEN} + value); + end; + // A padded nibble next to the valid region must not be read as data. + WriteTileElement(index, row, stored_columns, + Zeros{PTO_XLEN} + 15); + end; + + let witness_row = if left then + (if transpose then 5 else 16) + else (if transpose then 5 else 2); + let witness_column = if left then + (if transpose then 16 else 5) + else (if transpose then 2 else 5); + let witness_value = if left then 13 else 11; + let adjacent_value = if left then + (if transpose then 3 else 6) + else (if transpose then 4 else 5); + // Pin the PE0/PE1 boundary and adjacent inner coordinates independently + // of the canonical view's storage formula. + if left then + let pe0_boundary_row = if transpose then 5 else 15; + let pe0_boundary_column = if transpose then 15 else 5; + WriteTileElement(index, pe0_boundary_row, pe0_boundary_column, + Zeros{PTO_XLEN} + 3); + let pe1_adjacent_row = if transpose then 4 else 16; + let pe1_adjacent_column = if transpose then 16 else 4; + WriteTileElement(index, pe1_adjacent_row, pe1_adjacent_column, + Zeros{PTO_XLEN} + 6); + elsif transpose then + // B[k=4,n=2] is adjacent to B[k=5,n=2] in its private view. + WriteTileElement(index, 4, 2, Zeros{PTO_XLEN} + 5); + end; + WriteTileElement(index, witness_row, witness_column - 1, + Zeros{PTO_XLEN} + adjacent_value); + WriteTileElement(index, witness_row, witness_column, + Zeros{PTO_XLEN} + witness_value); + let expected_nibble_index = witness_row * physical_pitch + + witness_column; + let element = TileLogicalLinearIndex( + _Tiles[[index]], witness_row, witness_column); + assert element == expected_nibble_index; + assert TilePackedCarrierIndex(TileDataType_E2M1X2, element) == + expected_nibble_index DIVRM 16; + assert TilePackedLaneIndex(TileDataType_E2M1X2, element) == + expected_nibble_index MOD 16; + let adjacent_element = TileLogicalLinearIndex( + _Tiles[[index]], witness_row, witness_column - 1); + assert adjacent_element + 1 == element; + assert TilePackedCarrierIndex(TileDataType_E2M1X2, adjacent_element) == + (expected_nibble_index - 1) DIVRM 16; + assert TilePackedLaneIndex(TileDataType_E2M1X2, adjacent_element) == + (expected_nibble_index - 1) MOD 16; + assert TileReadLogicalElement(_Tiles[[index]], adjacent_element) == + Zeros{PTO_XLEN} + adjacent_value; + assert TileReadLogicalElement(_Tiles[[index]], element) == + Zeros{PTO_XLEN} + witness_value; + assert ReadTileElement(index, witness_row, stored_columns) == + Zeros{PTO_XLEN} + 15; + InstallSharedTile(shared_tile_id as SharedTileID, + _Tiles[[index]], '1111'); + let published = SharedTileRecord( + shared_tile_id as SharedTileID).tile; + let published_element = TileLogicalLinearIndex( + published, witness_row, witness_column); + let published_adjacent = TileLogicalLinearIndex( + published, witness_row, witness_column - 1); + assert TileReadLogicalElement(published, published_element) == + Zeros{PTO_XLEN} + witness_value; + assert TileReadLogicalElement(published, published_adjacent) == + Zeros{PTO_XLEN} + adjacent_value; + assert ReadTileElement(index, witness_row, stored_columns) == + Zeros{PTO_XLEN} + 15; +end; + +func main() => integer +begin + for controls = 0 to 3 looplimit 4 do + ResetProfileState(); + let trans_a = controls MOD 2 == 1; + let trans_b = controls >= 2; + PreparePackedShared(10, Zeros{6} + 40, TRUE, trans_a); + PreparePackedShared(11, Zeros{6} + 41, FALSE, trans_b); + + var start: bits(64) = Zeros{64} + 0x00031181; + start[31:27] = Zeros{5} + 11; + let started = ExecuteCommandInstruction(start, 32); + assert started == CommandExecution_Executed; + SetBundleFixedPointAttributeState( + Zeros{6}, Zeros{3}, Zeros{4}, FALSE, FALSE, FALSE, FALSE, + trans_a, trans_b); + SetBundleDimension(0, Zeros{PTO_XLEN} + 17); + SetBundleDimension(1, Zeros{PTO_XLEN} + 3); + SetBundleDimension(2, Zeros{PTO_XLEN} + 6); + BindBundleSharedIO((Zeros{6} + 40) as SharedTileID, 0, '1111'); + BindBundleSharedIO((Zeros{6} + 41) as SharedTileID, 0, '1111'); + AddBundleTileBinding( + TRUE, 0, 2, '1111', FALSE, FALSE, 0, 0, TRUE); + let left_pe0 = MaterializeBundleSharedMatrixLeftPrimary( + 0, 17, 6, TileDataType_E2M1X2, trans_a, 0 as MemoryAgentId); + let left_pe1 = MaterializeBundleSharedMatrixLeftPrimary( + 0, 17, 6, TileDataType_E2M1X2, trans_a, 1 as MemoryAgentId); + let right_private = MaterializeBundleSharedMatrixPrimary( + 1, 6, 3, TileDataType_E2M1X2, trans_b, 0 as MemoryAgentId); + assert BundleMatrixPrivateSharedViewLegal( + left_pe0, 16, 6, TileDataType_E2M1X2, FALSE); + assert BundleMatrixPrivateSharedViewLegal( + left_pe1, 1, 6, TileDataType_E2M1X2, FALSE); + assert BundleMatrixPrivateSharedViewLegal( + right_private, 6, 3, TileDataType_E2M1X2, TRUE); + assert MatrixReadLogicalElement(left_pe0, 15, 5) == + Zeros{PTO_XLEN} + 3; + assert MatrixReadLogicalElement(left_pe1, 0, 4) == + Zeros{PTO_XLEN} + 6; + assert MatrixReadLogicalElement(left_pe1, 0, 5) == + Zeros{PTO_XLEN} + 13; + assert MatrixReadLogicalElement(right_private, 4, 2) == + Zeros{PTO_XLEN} + 5; + assert MatrixReadLogicalElement(right_private, 5, 2) == + Zeros{PTO_XLEN} + 11; + let right_padding_row = if trans_b then 5 else 2; + let right_padding_column = if trans_b then 3 else 6; + assert ReadTileElement(11, right_padding_row, right_padding_column) == + Zeros{PTO_XLEN} + 15; + assert TileOrdinaryMatrixInputTypesSameClass( + TileDataType_E2M1X2, TileDataType_E2M1X2); + assert BundleMatrixSharedLeftPrimarySchemaLegal( + 0, 17, 6, TileDataType_E2M1X2, trans_a); + assert BundleMatrixSharedBPrimarySchemaLegal( + 1, 6, 3, TileDataType_E2M1X2, trans_b); + assert BundleTMATMULDimensionsLegal(2); + + let completed = ExecuteBundleTileOperation(); + assert completed && _LastFault == Fault_None; + let destination = BundleMatrixDestinationAt(0); + assert _Tiles[[destination]].contents_defined; + assert _Tiles[[destination]].layout == TileLayout_CUBE_M16; + assert _Tiles[[destination]].data_type == TileDataType_FP32; + assert _Tiles[[destination]].valid_columns == 3; + assert _Tiles[[destination]].valid_rows == + BundleMatrixCooperativeValidM(17, _CurrentMemoryAgent); + assert _BundleSharedBindings[[0]].consumed; + assert _BundleSharedBindings[[1]].consumed; + end; + return 0; +end; diff --git a/tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-packed-types-049.asl b/tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-packed-types-049.asl new file mode 100644 index 000000000..ce624417b --- /dev/null +++ b/tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-packed-types-049.asl @@ -0,0 +1,61 @@ +// PTO-TEST: {"id":"PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-TYPES-049","source":"asl/block/model/dispatch/cube-tmatmul.asl","requirements":["PTO-TMATMUL-CONTRACT-001","PTO-CUBE-SHARED-TRANSPOSE-001"],"kind":"execution","summary":"Every ordinary four-bit Shared primary type executes at odd M/N with even K.","pass_condition":"Decoded all-Shared ordinary TMATMUL succeeds for E1M2X2, S4X2, and U4X2 at M=17,N=1,K=2 with even physical pitches and defined exact-shape outputs; E2M1X2 positive coverage remains in the all-transpose witness.","related_sources":["asl/tile/model/legality/matrix-shape.asl","asl/block/model/dispatch/shared-cube-matrix.asl"]} + +func main() => integer +begin + for type_case = 0 to 2 looplimit 3 do + ResetProfileState(); + let data_type = if type_case == 0 then TileDataType_E1M2X2 + else if type_case == 1 then TileDataType_S4X2 + else TileDataType_U4X2; + let rows = DerivedTileRows(128, 2, data_type); + ConfigureTileForMask(10, 128, rows, 2, 17, 2, + data_type, TileLayout_RowMajor, '1111'); + ConfigureTileForMask(11, 128, rows, 2, 1, 2, + data_type, TileLayout_RowMajor, '1111'); + MarkTileValidRegionDefined(10); + MarkTileValidRegionDefined(11); + for row = 0 to 16 looplimit 17 do + WriteTileElement(10, row, 0, Zeros{PTO_XLEN} + 1); + WriteTileElement(10, row, 1, Zeros{PTO_XLEN} + 2); + end; + WriteTileElement(11, 0, 0, Zeros{PTO_XLEN} + 3); + WriteTileElement(11, 0, 1, Zeros{PTO_XLEN} + 4); + assert TileDataTypeIsFourBit(data_type); + InstallSharedTile((Zeros{6} + 40) as SharedTileID, + _Tiles[[10]], '1111'); + InstallSharedTile((Zeros{6} + 41) as SharedTileID, + _Tiles[[11]], '1111'); + + var start: bits(64) = Zeros{64} + 0x00031181; + start[31:27] = TileDataTypeToEncoding(data_type); + let started = ExecuteCommandInstruction(start, 32); + assert started == CommandExecution_Executed; + SetBundleDataAttributeState(TileDataTypeToEncoding(data_type), + Zeros{5}, Zeros{2}, Zeros{3}, Zeros{3}, FALSE, FALSE); + _BundleDataAttributesPresent = TRUE; + SetBundleFixedPointAttributeState( + Zeros{6}, Zeros{3}, Zeros{4}, FALSE, FALSE, FALSE, FALSE); + SetBundleDimension(0, Zeros{PTO_XLEN} + 17); + SetBundleDimension(1, Zeros{PTO_XLEN} + 1); + SetBundleDimension(2, Zeros{PTO_XLEN} + 2); + BindBundleSharedIO((Zeros{6} + 40) as SharedTileID, 0, '1111'); + BindBundleSharedIO((Zeros{6} + 41) as SharedTileID, 0, '1111'); + AddBundleTileBinding( + TRUE, 0, 1, '1111', FALSE, FALSE, 0, 0, TRUE); + assert BundleTMATMULDimensionsLegal(2); + assert BundleMatrixSharedSchemasLegal( + 11, data_type, data_type, 17, 1, 2, 2); + let completed = ExecuteBundleTileOperation(); + assert _LastFault == Fault_None; + assert completed; + let destination = BundleMatrixDestinationAt(0); + assert _Tiles[[destination]].contents_defined; + assert _Tiles[[destination]].data_type == + TileOrdinaryMatrixAccumulatorType(data_type, data_type); + assert _Tiles[[destination]].valid_rows == 16; + assert _Tiles[[destination]].valid_columns == 1; + assert _BundleSharedBindings[[0]].consumed; + assert _BundleSharedBindings[[1]].consumed; + end; + return 0; +end; diff --git a/tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-packed-upper-even-054.asl b/tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-packed-upper-even-054.asl new file mode 100644 index 000000000..d2e12a513 --- /dev/null +++ b/tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-packed-upper-even-054.asl @@ -0,0 +1,60 @@ +// PTO-TEST: {"id":"PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-UPPER-EVEN-054","source":"asl/block/model/dispatch/cube-tmatmul.asl","requirements":["PTO-TMATMUL-CONTRACT-001","PTO-CUBE-SHARED-TRANSPOSE-001"],"kind":"execution","summary":"Upper even K=65534 remains representable for Shared packed Matrix primaries.","pass_condition":"Decoded all-Shared E2M1X2 TMATMUL at M=N=1,K=65534 accepts each 2x65534 source in 65536 bytes, reads the final source nibble at its original coordinate, and publishes a defined 128-byte Local result.","related_sources":["asl/block/model/dispatch/shared-cube-matrix.asl","asl/tile/model/definedness/packed-boundary.asl"]} + +func main() => integer +begin + ResetProfileState(); + ConfigureTileForMask(10, 65536, 2, 65534, 1, 65534, + TileDataType_E2M1X2, TileLayout_RowMajor, '1111'); + ConfigureTileForMask(11, 65536, 2, 65534, 1, 65534, + TileDataType_E2M1X2, TileLayout_RowMajor, '1111'); + MarkTileValidRegionDefined(10); + MarkTileValidRegionDefined(11); + for tile = 10 to 11 looplimit 2 do + WriteTileElement(tile as TileIndex, 0, 65532, + Zeros{PTO_XLEN} + 3); + WriteTileElement(tile as TileIndex, 0, 65533, + Zeros{PTO_XLEN} + 12); + end; + InstallSharedTile((Zeros{6} + 40) as SharedTileID, + _Tiles[[10]], '1111'); + InstallSharedTile((Zeros{6} + 41) as SharedTileID, + _Tiles[[11]], '1111'); + let last_source_element = TileLogicalLinearIndex(_Tiles[[11]], 0, 65533); + assert last_source_element == 65533; + assert TilePackedCarrierIndex(TileDataType_E2M1X2, + last_source_element) == 4095; + assert TilePackedLaneIndex(TileDataType_E2M1X2, + last_source_element) == 13; + assert TileReadLogicalElement(_Tiles[[11]], last_source_element) == + Zeros{PTO_XLEN} + 12; + + var start: bits(64) = Zeros{64} + 0x00031181; + start[31:27] = TileDataTypeToEncoding(TileDataType_E2M1X2); + let started = ExecuteCommandInstruction(start, 32); + assert started == CommandExecution_Executed; + SetBundleFixedPointAttributeState( + Zeros{6}, Zeros{3}, Zeros{4}, FALSE, FALSE, FALSE, FALSE); + SetBundleDimension(0, Zeros{PTO_XLEN} + 1); + SetBundleDimension(1, Zeros{PTO_XLEN} + 1); + SetBundleDimension(2, Zeros{PTO_XLEN} + 65534); + BindBundleSharedIO((Zeros{6} + 40) as SharedTileID, 0, '1111'); + BindBundleSharedIO((Zeros{6} + 41) as SharedTileID, 0, '1111'); + AddBundleTileBinding( + TRUE, 0, 1, '1111', FALSE, FALSE, 0, 0, TRUE); + assert BundleTMATMULDimensionsLegal(2); + assert BundleMatrixSharedSchemasLegal( + 11, TileDataType_E2M1X2, TileDataType_E2M1X2, + 1, 1, 65534, 2); + + let completed = ExecuteBundleTileOperation(); + assert completed && _LastFault == Fault_None; + let destination = BundleMatrixDestinationAt(0); + assert _Tiles[[destination]].contents_defined; + assert _Tiles[[destination]].data_type == TileDataType_FP32; + assert _Tiles[[destination]].capacity_bytes == 128; + assert _Tiles[[destination]].valid_rows == 1; + assert _Tiles[[destination]].valid_columns == 1; + assert _BundleSharedBindings[[0]].consumed; + assert _BundleSharedBindings[[1]].consumed; + return 0; +end; diff --git a/tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-right-nonpower-043.asl b/tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-right-nonpower-043.asl new file mode 100644 index 000000000..c4fde7c3e --- /dev/null +++ b/tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-right-nonpower-043.asl @@ -0,0 +1,57 @@ +// PTO-TEST: {"id":"PTO-AVS-BLOCK-TMATMUL-SHARED-RIGHT-NONPOWER-043","source":"asl/block/model/dispatch/cube-tmatmul.asl","requirements":["PTO-TMATMUL-CONTRACT-001","PTO-CUBE-SHARED-TRANSPOSE-001","PTO-CUBE-GROUP-M-DISTRIBUTION-001"],"kind":"execution","summary":"Right-only Shared TMATMUL uses non-power dimensions and real source capacity across the M shard tail.","pass_condition":"M=17,N=3,K=192 succeeds for active PE0 and PE1 with Local U16 A, Shared U16 B [N,K], and exact defined U32 M16 outputs; inactive PE behavior remains covered by the group-M regression.","related_sources":["asl/block/model/dispatch/shared-cube-matrix.asl","asl/block/model/dispatch/cube-tmatmul.asl"]} + +func RunRightOnlySharedGroupM(pe: MemoryAgentId, + expected_m: integer {1..16}) +begin + ResetProfileState(); + SelectMemoryEventAgent(pe); + let a_capacity = TileCubePhysicalRequiredBytes( + TileLayout_CUBE_M16, 16, 256, TileDataType_U16); + let a_ready = ConfigureCubeTileForMaskWithPhysical( + 1, a_capacity, 16, 256, expected_m, 192, + TileDataType_U16, TileLayout_CUBE_M16, '1111'); + assert a_ready; + for row = 0 to expected_m - 1 looplimit 16 do + for inner = 0 to 191 looplimit 192 do + WriteTileElement(1, row, inner, Zeros{PTO_XLEN}); + end; + end; + + ConfigureTileForMask(10, 4096, + DerivedTileRows(4096, 256, TileDataType_U16), 256, + 3, 192, TileDataType_U16, TileLayout_RowMajor, '1111'); + MarkTileValidRegionDefined(10); + InstallSharedTile((Zeros{6} + 41) as SharedTileID, + _Tiles[[10]], '1111'); + assert SharedTileDescriptorLegal((Zeros{6} + 41) as SharedTileID); + + var start: bits(64) = Zeros{64} + 0x00031181; + start[31:27] = Zeros{5} + 26; + let started = ExecuteCommandInstruction(start, 32); + assert started == CommandExecution_Executed; + SetBundleFixedPointAttributeState( + Zeros{6}, Zeros{3}, Zeros{4}, FALSE, FALSE, FALSE, FALSE); + SetBundleDimension(0, Zeros{PTO_XLEN} + 17); + SetBundleDimension(1, Zeros{PTO_XLEN} + 3); + SetBundleDimension(2, Zeros{PTO_XLEN} + 192); + BindBundleSharedIO((Zeros{6} + 41) as SharedTileID, 0, '1111'); + AddBundleTileBinding( + TRUE, 0, 2, '1111', TRUE, FALSE, 1, 0, TRUE); + + let completed = ExecuteBundleTileOperation(); + assert completed && _LastFault == Fault_None; + let destination = BundleMatrixDestinationAt(0); + assert _Tiles[[destination]].contents_defined; + assert _Tiles[[destination]].layout == TileLayout_CUBE_M16; + assert _Tiles[[destination]].data_type == TileDataType_U32; + assert _Tiles[[destination]].valid_rows == expected_m; + assert _Tiles[[destination]].valid_columns == 3; + assert _BundleSharedBindings[[0]].consumed; +end; + +func main() => integer +begin + RunRightOnlySharedGroupM(0, 16); + RunRightOnlySharedGroupM(1, 1); + return 0; +end; diff --git a/tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-transpose-030.asl b/tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-transpose-030.asl index 5fd53bee3..b213fa2f4 100644 --- a/tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-transpose-030.asl +++ b/tests/asl/block/model/dispatch/cube-tmatmul/block-exec-tmatmul-shared-transpose-030.asl @@ -1,13 +1,13 @@ -// PTO-TEST: {"id":"PTO-AVS-BLOCK-TMATMUL-SHARED-TRANSPOSE-030","source":"asl/block/model/dispatch/cube-tmatmul.asl","requirements":["PTO-CUBE-SHARED-TRANSPOSE-001","PTO-CUBE-GROUP-M-DISTRIBUTION-001"],"kind":"execution","summary":"Non-square Shared A and B physical-major maps produce all four transpose results without consuming padded sentinels.","pass_condition":"M=2, N=4, K=8 succeeds for every TransA/TransB combination with exact Shared physical valid shapes [M,K]/[K,M] and [N,K]/[K,N], legal padded pitches containing explicit sentinels outside valid columns, and the same 2x4 result.","related_sources":["asl/block/model/dispatch/shared-cube-matrix.asl","asl/block/attributes/B.FPATR.asl"]} +// PTO-TEST: {"id":"PTO-AVS-BLOCK-TMATMUL-SHARED-TRANSPOSE-030","source":"asl/block/model/dispatch/cube-tmatmul.asl","requirements":["PTO-CUBE-SHARED-TRANSPOSE-001","PTO-CUBE-GROUP-M-DISTRIBUTION-001"],"kind":"execution","summary":"Non-square all-Shared maps accept non-power N/K across all transpose pairs and ignore padded sentinels.","pass_condition":"M=2, N=3, K=5 succeeds for all TransA/TransB pairs with exact physical valid shapes [M,K]/[K,M] and [N,K]/[K,N], even padded pitches, and exact same logical result.","related_sources":["asl/block/model/dispatch/shared-cube-matrix.asl","asl/block/attributes/B.FPATR.asl"]} func PrepareNonSquareShared(index: TileIndex, shared_tile_id: bits(6), left: boolean, transpose: boolean) begin let physical_rows = if left then - (if transpose then 8 else 2) else (if transpose then 8 else 4); + (if transpose then 5 else 2) else (if transpose then 5 else 3); let physical_columns = if left then - (if transpose then 2 else 8) else (if transpose then 4 else 8); + (if transpose then 2 else 5) else (if transpose then 3 else 5); let physical_pitch = if left then - (if transpose then 4 else 16) else (if transpose then 8 else 16); + (if transpose then 4 else 8) else (if transpose then 4 else 8); ConfigureTileForMask(index, 256, DerivedTileRows(256, physical_pitch, TileDataType_U16), physical_pitch, physical_rows, physical_columns, @@ -20,8 +20,9 @@ begin let logical_column = if left then (if transpose then row else column) else (if transpose then column else row); - let value = if left then logical_row + 1 - else logical_column + 1; + let value = if left then + (if logical_column == 0 then 8 * (logical_row + 1) else 0) + else (if logical_row == 0 then logical_column + 1 else 0); WriteTileElement(index, row, column, Zeros{PTO_XLEN} + value); end; @@ -41,8 +42,8 @@ begin let trans_b = controls >= 2; PrepareNonSquareShared(10, Zeros{6} + 40, TRUE, trans_a); PrepareNonSquareShared(11, Zeros{6} + 41, FALSE, trans_b); - let left_padding_column = if trans_a then 2 else 8; - let right_padding_column = if trans_b then 4 else 8; + let left_padding_column = if trans_a then 2 else 5; + let right_padding_column = if trans_b then 3 else 5; assert ReadTileElement(10, 0, left_padding_column) == Zeros{PTO_XLEN} + 0x7f7f; assert ReadTileElement(11, 0, right_padding_column) == @@ -55,8 +56,8 @@ begin Zeros{6}, Zeros{3}, Zeros{4}, FALSE, FALSE, FALSE, FALSE, trans_a, trans_b); SetBundleDimension(0, Zeros{PTO_XLEN} + 2); - SetBundleDimension(1, Zeros{PTO_XLEN} + 4); - SetBundleDimension(2, Zeros{PTO_XLEN} + 8); + SetBundleDimension(1, Zeros{PTO_XLEN} + 3); + SetBundleDimension(2, Zeros{PTO_XLEN} + 5); BindBundleSharedIO((Zeros{6} + 40) as SharedTileID, 0, '1111'); BindBundleSharedIO((Zeros{6} + 41) as SharedTileID, 0, '1111'); AddBundleTileBinding( @@ -67,11 +68,9 @@ begin assert ReadTileElement(destination, 0, 0) == Zeros{PTO_XLEN} + 8; assert ReadTileElement(destination, 0, 1) == Zeros{PTO_XLEN} + 16; assert ReadTileElement(destination, 0, 2) == Zeros{PTO_XLEN} + 24; - assert ReadTileElement(destination, 0, 3) == Zeros{PTO_XLEN} + 32; assert ReadTileElement(destination, 1, 0) == Zeros{PTO_XLEN} + 16; assert ReadTileElement(destination, 1, 1) == Zeros{PTO_XLEN} + 32; assert ReadTileElement(destination, 1, 2) == Zeros{PTO_XLEN} + 48; - assert ReadTileElement(destination, 1, 3) == Zeros{PTO_XLEN} + 64; // Re-read the sentinels after commit to prove the Shared payload was // neither rewritten nor consumed as a valid matrix element. assert ReadTileElement(10, 0, left_padding_column) == diff --git a/tests/asl/block/model/dispatch/cube-tmatmul/block-fault-tmatmul-shared-packed-even-041.asl b/tests/asl/block/model/dispatch/cube-tmatmul/block-fault-tmatmul-shared-packed-even-041.asl new file mode 100644 index 000000000..47c729740 --- /dev/null +++ b/tests/asl/block/model/dispatch/cube-tmatmul/block-fault-tmatmul-shared-packed-even-041.asl @@ -0,0 +1,88 @@ +// PTO-TEST: {"id":"PTO-AVS-BLOCK-TMATMUL-SHARED-PACKED-EVEN-041","source":"asl/block/model/dispatch/cube-tmatmul.asl","requirements":["PTO-TMATMUL-CONTRACT-001","PTO-CUBE-SHARED-TRANSPOSE-001"],"kind":"fault","summary":"Every transpose rejects odd K and every packed primary rejects an odd original Shared pitch.","pass_condition":"K=1,3,17,193 rejects for all four transpose pairs; independently legal odd-pitch packed A and B parents reject Matrix use for all transpose pairs before destination allocation or Shared consumption.","related_sources":["asl/block/model/dispatch/shared-cube-matrix.asl","asl/tile/model/shape/rows-columns.asl"]} + +func PreparePackedSource(index: TileIndex, shared_tile_id: bits(6), + left: boolean, transpose: boolean, + k: integer {1..65535}, odd_pitch: boolean) +begin + let pitch = if left then + (if transpose then (if odd_pitch then 3 else 4) + else (if odd_pitch then 255 else 256)) + else (if transpose then (if odd_pitch then 3 else 4) + else (if odd_pitch then 255 else 256)); + let capacity = if pitch > 128 then 1024 else 512; + let rows = DerivedTileRows( + capacity, pitch, TileDataType_E2M1X2); + let logical_rows = if left then 2 else 3; + let logical_columns = k; + let stored_rows = if left then + (if transpose then logical_columns else logical_rows) + else (if transpose then logical_columns else logical_rows); + let stored_columns = if transpose then logical_rows else logical_columns; + ConfigureTileForMask(index, capacity, rows, pitch, + stored_rows, stored_columns, TileDataType_E2M1X2, + TileLayout_RowMajor, '1111'); + MarkTileValidRegionDefined(index); + assert TileInfoDescriptorLegal(_Tiles[[index]]); + InstallSharedTile(shared_tile_id as SharedTileID, + _Tiles[[index]], '1111'); + assert SharedTileDescriptorLegal(shared_tile_id as SharedTileID); +end; + +func PreparePackedFaultCase(k: integer {1..65535}, + controls: integer {0..3}, + odd_side: integer {0..2}, + omit_k: boolean) +begin + ResetProfileState(); + let trans_a = controls MOD 2 == 1; + let trans_b = controls >= 2; + PreparePackedSource(10, Zeros{6} + 40, TRUE, trans_a, k, + odd_side == 1); + PreparePackedSource(11, Zeros{6} + 41, FALSE, trans_b, k, + odd_side == 2); + + var start: bits(64) = Zeros{64} + 0x00031181; + start[31:27] = Zeros{5} + 11; + let started = ExecuteCommandInstruction(start, 32); + assert started == CommandExecution_Executed; + SetBundleFixedPointAttributeState( + Zeros{6}, Zeros{3}, Zeros{4}, FALSE, FALSE, FALSE, FALSE, + trans_a, trans_b); + SetBundleDimension(0, Zeros{PTO_XLEN} + 2); + SetBundleDimension(1, Zeros{PTO_XLEN} + 3); + if !omit_k then SetBundleDimension(2, Zeros{PTO_XLEN} + k); end; + BindBundleSharedIO((Zeros{6} + 40) as SharedTileID, 0, '1111'); + BindBundleSharedIO((Zeros{6} + 41) as SharedTileID, 0, '1111'); + AddBundleTileBinding( + TRUE, 0, 2, '1111', FALSE, FALSE, 0, 0, TRUE); + assert !BundleMatrixSharedSchemasLegal( + 0, TileDataType_E2M1X2, TileDataType_E2M1X2, + 2, 3, k, 2); + + let completed = ExecuteBundleTileOperation(); + assert !completed && _LastFault == Fault_TileLegality; + assert !_BundleSharedBindings[[0]].consumed; + assert !_BundleSharedBindings[[1]].consumed; + assert !_BundleTileBindings[[0]].destination_allocated_by_bundle; +end; + +func main() => integer +begin + // The omitted packed K default is one and is rejected without rounding. + PreparePackedFaultCase(1, 0, 0, TRUE); + for k_case = 0 to 3 looplimit 4 do + let k = if k_case == 0 then 1 + else if k_case == 1 then 3 + else if k_case == 2 then 17 else 193; + for controls = 0 to 3 looplimit 4 do + PreparePackedFaultCase(k, controls, 0, FALSE); + end; + end; + // An odd physical pitch remains a legal generic Shared descriptor, but + // the Matrix-use schema rejects it for either packed primary role. + for controls = 0 to 3 looplimit 4 do + PreparePackedFaultCase(6, controls, 1, FALSE); + PreparePackedFaultCase(6, controls, 2, FALSE); + end; + return 0; +end; diff --git a/tests/asl/block/model/dispatch/shared-cube-matrix/block-exec-shared-cube-scale-nonpower-045.asl b/tests/asl/block/model/dispatch/shared-cube-matrix/block-exec-shared-cube-scale-nonpower-045.asl new file mode 100644 index 000000000..b7c3aaad6 --- /dev/null +++ b/tests/asl/block/model/dispatch/shared-cube-matrix/block-exec-shared-cube-scale-nonpower-045.asl @@ -0,0 +1,203 @@ +// PTO-TEST: {"id":"PTO-AVS-BLOCK-SHARED-CUBE-SCALE-NONPOWER-045","source":"asl/block/model/dispatch/shared-cube-matrix.asl","requirements":["PTO-CUBE-MATRIX-SCALE-001","PTO-CUBE-SHARED-TRANSPOSE-001"],"kind":"execution","summary":"Even non-power K=18/66/162/194 preserves independent Shared MX groups and typed scale addresses.","pass_condition":"Decoded TMATMULMX with Shared E2M1X2 A and HiF4X2 B succeeds at M=17,N=3 for all transpose pairs at K=18/66/162/194; fixed ScaleA/ScaleB shapes use G_A=1/3/6/7 and G_B=1/2/3/4, and distinct row/group sentinels verify private logical views at each group transition and last group without checking scaled arithmetic results.","related_sources":["asl/block/model/dispatch/cube-tmatmul.asl","asl/tile/model/execution/matrix-scale.asl"]} + +pure func Issue374ScaleAToken( + row: integer {0..31}, group: integer {0..7}) => Word +begin + return Zeros{PTO_XLEN} + 1 + row * 8 + group; +end; + +pure func Issue374ScaleBToken( + row: integer {0..7}, group: integer {0..7}) => Word +begin + return Zeros{PTO_XLEN} + 128 + row * 8 + group; +end; + +func FillIssue374ScaleSentinels( + index: TileIndex, + rows: integer {1..32}, + groups: integer {1..8}, + right_scale: boolean) +begin + for row = 0 to rows - 1 looplimit 32 do + for group = 0 to groups - 1 looplimit 8 do + let element = TileLogicalLinearIndex( + _Tiles[[index]], row as integer {0..31}, + group as integer {0..7}); + _Tiles[[index]].payload[[element]] = if right_scale then + Issue374ScaleBToken( + row as integer {0..7}, group as integer {0..7}) + else + Issue374ScaleAToken( + row as integer {0..31}, group as integer {0..7}); + end; + end; +end; + +func AssertIssue374PrivateScaleAddresses(k: integer {18,66,162,194}) +begin + let left_groups = TileMXScaleGroupCount(k, TileDataType_E2M1X2); + let right_groups = TileMXScaleGroupCount(k, TileDataType_HiF4X2); + assert _Tiles[[11]].valid_rows == 17; + assert _Tiles[[11]].valid_columns == left_groups; + assert _Tiles[[13]].valid_rows == 3; + assert _Tiles[[13]].valid_columns == right_groups; + + let left_pe0 = MaterializeBundleSharedMatrixLeftScale( + 1, 17, k, TileDataType_E2M1X2, 0 as MemoryAgentId); + let left_pe1 = MaterializeBundleSharedMatrixLeftScale( + 1, 17, k, TileDataType_E2M1X2, 1 as MemoryAgentId); + assert left_pe0.rows == 16 && left_pe0.columns == left_groups; + assert left_pe1.rows == 1 && left_pe1.columns == left_groups; + let left_group_size = TileMXScaleGroupSize(TileDataType_E2M1X2); + for group = 0 to left_groups - 1 looplimit 8 do + let first_inner = group * left_group_size; + let last_inner = if first_inner + left_group_size > k then + k - 1 else first_inner + (left_group_size - 1); + for sample = 0 to 2 looplimit 3 do + let local_row = if sample == 0 then 0 + else if sample == 1 then 15 else 0; + let global_row = if sample == 2 then 16 else local_row; + let scale_view = if sample == 2 then left_pe1 else left_pe0; + for edge = 0 to 1 looplimit 2 do + let inner = if edge == 0 then first_inner else last_inner; + let element = MatrixLeftScaleElement( + scale_view, TileDataType_E2M1X2, + local_row as integer {0..31}, + inner as integer {0..65535}); + assert TileReadLogicalElement(scale_view, element) == + Issue374ScaleAToken( + global_row as integer {0..31}, + group as integer {0..7}); + end; + end; + end; + + let right_view = MaterializeBundleSharedMatrixPrimary( + 3, right_groups, 3, TileDataType_U32, FALSE, + 0 as MemoryAgentId); + assert right_view.rows == right_groups && right_view.columns == 3; + assert right_view.layout == TileLayout_RowMajor; + let right_group_size = TileMXScaleGroupSize(TileDataType_HiF4X2); + for group = 0 to right_groups - 1 looplimit 8 do + let first_inner = group * right_group_size; + let last_inner = if first_inner + right_group_size > k then + k - 1 else first_inner + (right_group_size - 1); + for column = 0 to 2 looplimit 3 do + for edge = 0 to 1 looplimit 2 do + let inner = if edge == 0 then first_inner else last_inner; + let element = MatrixRightScaleElement( + right_view, TileDataType_HiF4X2, + column as integer {0..2}, inner as integer {0..65535}); + assert TileReadLogicalElement(right_view, element) == + Issue374ScaleBToken( + column as integer {0..7}, group as integer {0..7}); + end; + end; + end; +end; + +func main() => integer +begin + for shape_case = 0 to 3 looplimit 4 do + let k = if shape_case == 0 then 18 + else if shape_case == 1 then 66 + else if shape_case == 2 then 162 else 194; + for controls = 0 to 3 looplimit 4 do + ResetProfileState(); + let trans_a = controls MOD 2 == 1; + let trans_b = controls >= 2; + let left_groups = TileMXScaleGroupCount(k, TileDataType_E2M1X2); + let right_groups = TileMXScaleGroupCount(k, TileDataType_HiF4X2); + let a_pitch = if trans_a then 32 else 256; + let a_valid_columns = if trans_a then 17 else k; + let a_stored_rows = if trans_a then k else 17; + ConfigureTileForMask(10, 4096, + DerivedTileRows(4096, a_pitch, TileDataType_E2M1X2), + a_pitch, a_stored_rows, a_valid_columns, + TileDataType_E2M1X2, TileLayout_RowMajor, '1111'); + MarkTileValidRegionDefined(10); + + ConfigureTileForMask(11, 256, + DerivedTileRows(256, 8, TileDataType_E8M0), 8, + 17, left_groups, TileDataType_E8M0, TileLayout_RowMajor, '1111'); + MarkTileValidRegionDefined(11); + FillIssue374ScaleSentinels( + 11, 17, left_groups as integer {1..8}, FALSE); + + let b_pitch = if trans_b then 4 else 256; + let b_valid_rows = if trans_b then k else 3; + let b_valid_columns = if trans_b then 3 else k; + let b_stored_rows = if trans_b then k else 3; + ConfigureTileForMask(12, 1024, + DerivedTileRows(1024, b_pitch, TileDataType_HiF4X2), + b_pitch, b_stored_rows, b_valid_columns, + TileDataType_HiF4X2, TileLayout_RowMajor, '1111'); + MarkTileValidRegionDefined(12); + + ConfigureTileForMask(13, 128, + DerivedTileRows(128, 4, TileDataType_U32), 4, + 3, right_groups, TileDataType_U32, TileLayout_RowMajor, '1111'); + MarkTileValidRegionDefined(13); + FillIssue374ScaleSentinels( + 13, 3, right_groups as integer {1..8}, TRUE); + + InstallSharedTile((Zeros{6} + 40) as SharedTileID, + _Tiles[[10]], '1111'); + InstallSharedTile((Zeros{6} + 41) as SharedTileID, + _Tiles[[11]], '1111'); + InstallSharedTile((Zeros{6} + 42) as SharedTileID, + _Tiles[[12]], '1111'); + InstallSharedTile((Zeros{6} + 43) as SharedTileID, + _Tiles[[13]], '1111'); + + var start: bits(64) = Zeros{64} + 0x00431181; + start[31:27] = Zeros{5} + 11; + let started = ExecuteCommandInstruction(start, 32); + assert started == CommandExecution_Executed; + SetBundleDataAttributeState( + Zeros{5} + 14, Zeros{5}, Zeros{2}, Zeros{3}, Zeros{3}, + FALSE, FALSE); + _BundleDataAttributesPresent = TRUE; + SetBundleFixedPointAttributeState( + Zeros{6}, Zeros{3}, Zeros{4}, FALSE, FALSE, FALSE, FALSE, + trans_a, trans_b); + SetBundleDimension(0, Zeros{PTO_XLEN} + 17); + SetBundleDimension(1, Zeros{PTO_XLEN} + 3); + SetBundleDimension(2, Zeros{PTO_XLEN} + k); + BindBundleSharedIO((Zeros{6} + 40) as SharedTileID, 0, '1111'); + BindBundleSharedIO((Zeros{6} + 41) as SharedTileID, 0, '1111'); + BindBundleSharedIO((Zeros{6} + 42) as SharedTileID, 0, '1111'); + BindBundleSharedIO((Zeros{6} + 43) as SharedTileID, 0, '1111'); + AddBundleTileBinding( + TRUE, 0, 3, '1111', FALSE, FALSE, 0, 0, TRUE); + assert TileMXScaleGroupCount(18, TileDataType_E2M1X2) == 1; + assert TileMXScaleGroupCount(66, TileDataType_E2M1X2) == 3; + assert TileMXScaleGroupCount(162, TileDataType_E2M1X2) == 6; + assert TileMXScaleGroupCount(194, TileDataType_E2M1X2) == 7; + assert TileMXScaleGroupCount(18, TileDataType_HiF4X2) == 1; + assert TileMXScaleGroupCount(66, TileDataType_HiF4X2) == 2; + assert TileMXScaleGroupCount(162, TileDataType_HiF4X2) == 3; + assert TileMXScaleGroupCount(194, TileDataType_HiF4X2) == 4; + assert TileMXScaleGroupCount(k, TileDataType_E2M1X2) == left_groups; + assert TileMXScaleGroupCount(k, TileDataType_HiF4X2) == right_groups; + AssertIssue374PrivateScaleAddresses(k); + assert BundleMatrixSharedSchemasLegal( + 4, TileDataType_E2M1X2, TileDataType_HiF4X2, + 17, 3, k, 4); + + let completed = ExecuteBundleTileOperation(); + assert completed && _LastFault == Fault_None; + let destination = BundleMatrixDestinationAt(0); + assert _Tiles[[destination]].contents_defined; + assert _Tiles[[destination]].data_type == TileDataType_FP32; + assert _Tiles[[destination]].valid_columns == 3; + assert _Tiles[[destination]].valid_rows == + BundleMatrixCooperativeValidM(17, _CurrentMemoryAgent); + assert _BundleSharedBindings[[0]].consumed; + assert _BundleSharedBindings[[1]].consumed; + assert _BundleSharedBindings[[2]].consumed; + assert _BundleSharedBindings[[3]].consumed; + end; + end; + return 0; +end; diff --git a/tests/asl/scalar/model/sys/semantics/scalar-static-semantics-contract-001.asl b/tests/asl/scalar/model/sys/semantics/scalar-static-semantics-contract-001.asl index b03b1c3dc..44fdfef8c 100644 --- a/tests/asl/scalar/model/sys/semantics/scalar-static-semantics-contract-001.asl +++ b/tests/asl/scalar/model/sys/semantics/scalar-static-semantics-contract-001.asl @@ -1,5 +1,5 @@ // Generated by scripts/generate-mnemonic-avs.py. Do not edit. -// PTO-TEST: {"id":"PTO-AVS-SCALAR-MODEL-SYS-SEMANTICS-STATIC-001","source":"asl/scalar/model/sys/semantics.asl","requirements":[],"kind":"static-invariant","summary":"PTO-SCALAR-MODEL-SYS-SEMANTICS compiles as an independent normative unit","pass_condition":"the complete model and this unit's static invariant compile","related_sources":[]} +// PTO-TEST: {"id":"PTO-AVS-SCALAR-MODEL-SYS-SEMANTICS-STATIC-001","source":"asl/scalar/model/sys/semantics.asl","requirements":["PTO-THREAD-ID-PE-IDENTITY-001"],"kind":"static-invariant","summary":"PTO-SCALAR-MODEL-SYS-SEMANTICS compiles as an independent normative unit","pass_condition":"the complete model and this unit's static invariant compile","related_sources":[]} func main() => integer begin assert TRUE; diff --git a/tests/asl/tile/model/legality/allocation-capacity/tile-bound-legality-001.asl b/tests/asl/tile/model/legality/allocation-capacity/tile-bound-legality-001.asl index f4558b872..656d46859 100644 --- a/tests/asl/tile/model/legality/allocation-capacity/tile-bound-legality-001.asl +++ b/tests/asl/tile/model/legality/allocation-capacity/tile-bound-legality-001.asl @@ -38,6 +38,12 @@ begin (odd_fp16_rows + 1) as integer {0..65535}, 17, TileDataType_FP16, 2048); assert DerivedTileRows(2048, 17, TileDataType_E2M1X2) == 227; + // Generic Shared-capable RowMajor four-bit storage keeps its historical + // odd-pitch descriptor domain. Matrix consumption applies the narrower + // original-source even-pitch rule at its own boundary. + assert DerivedTileRows(1024, 255, TileDataType_E2M1X2) == 8; + assert TileShapeMatchesCapacity( + 1024, 8, 255, TileDataType_E2M1X2); assert DerivedTileRows(2048, 17, TileDataType_U8) == 0; assert TileShapeMatchesCapacity(128, 16, 1, TileDataType_U64); assert TileShapeMatchesCapacity(8192, 16384, 1,