gqa(adr): ADR-0065 review fixes — KERNEL phase/repetition split, auto-bind conflict + MATH-TCM invariants, FIFO conservatism note, logical_bytes per-op summation
ADR-0065 review fixes: - D3 semantics clarified: position determines *phase* (pre-loop / head / in-accumulation / per-output-tile / post-loop), scope determines *repetition*. KERNEL = "once per CompositeCmd invocation", not "once per kernel launch" — removes ambiguity around softmax_merge's KERNEL scope at different positions before/after GEMM. - D4 MATH-TCM invariant: Phase 1 limits DMA auto-insertion to GEMM operands and head outputs; MATH operand with space="hbm" raises validation error at TLContext emit. Catches kernel misuse early; a MATH-with-HBM path is future work (explicit tl.load + MATH composite). - D6 #6 NEW: auto-bind conflict — explicit GEMM `a=` + prologue primary_out simultaneously → validation error (prevents "which value wins" ambiguity). - D6 #7 NEW: MATH operand TCM-only restatement. - Consequences/Negative: strict-FIFO conservatism note — safe but may under-expose composite-level overlap when handle-sharing composites could in principle run in parallel. - Test Requirements #10, #11: auto-bind conflict + MATH-HBM validation error tests. ADR-0064 Revision 2 clarification: - D2 counting rule: per-op summation, no deduplication. Same handle appearing in multiple OpSpecs or in rw_handles is counted independently — matches HW reality (each descriptor field is a distinct address slot, rw_handles is separate metadata block). Example walked through (mul_bcast with O in src_a + out + rw_handles). DDD-0065 follow-on: - §3.2: new test file test_tl_composite_validation.py covers auto-bind conflict, MATH-TCM, GEMM-count invariants. - §4.3: phase vs repetition split aligned with ADR-0065 D3. - §6 lowering pipeline: step 5 adds auto-bind conflict check; step 8 NEW — operand space validation; step 9 (size cap); step 10 (emit). - §8 strict-FIFO conservatism note: explains why next-tile #1 cross-tile pipelining still works under FIFO (no rw overlap), and where the conservatism would hurt (future handle-sharing recipes). - §10 verification: invariant-guard tests (auto-bind conflict, MATH TCM, per-op summation accuracy). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -139,6 +139,17 @@ def _extra_bytes(v) -> int:
|
||||
(`DmaReadCmd`, `MathCmd` 등도 같은 룰 — dataclass 당 property 1 개,
|
||||
약 3 줄.)
|
||||
|
||||
**카운팅 룰 — per-op 합산, dedup 없음.** `OpSpec` 안의 각 `TensorHandle`
|
||||
참조는 독립적으로 카운트 — 같은 핸들이 여러 OpSpec 에 등장하거나
|
||||
`rw_handles` 에도 있어도 마찬가지. `rw_handles` block 은 cross-composite
|
||||
해저드 추적 (ADR-0065 D6.3) 의 메타데이터로 `ops` 의 operand 참조와
|
||||
**별도** 카운트. 중복 제거 없음. HW 와 일치: descriptor 가 각 operand
|
||||
slot 을 독립 address field 로 인코딩하고 dispatcher 가 `rw_handles` 를
|
||||
별도 metadata block 으로 추적. 예: `OpSpec(kind="mul_bcast", operands=
|
||||
{"src_a": O, "src_b": corr}, out=O)` 는 핸들 `O` 를 *두 번* 카운트
|
||||
(`src_a` 한 번, `out` 한 번); 만약 `O` 가 둘러싼 CompositeCmd 의
|
||||
`rw_handles` 에도 있으면 세 번째 카운트.
|
||||
|
||||
### D3. Default — 일반 composite ≈ 43 ns 기준
|
||||
|
||||
Anchor: **DMA-staged GEMM 경로용 단일-OpSpec composite** —
|
||||
|
||||
Reference in New Issue
Block a user