[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-nvidia-tilegym-converting-cutile-to-triton":3,"mdc-gv5row-key":33,"related-repo-nvidia-tilegym-converting-cutile-to-triton":2012,"related-org-nvidia-tilegym-converting-cutile-to-triton":2116},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":22,"repoUrl":23,"updatedAt":24,"license":25,"forks":26,"topics":27,"repo":28,"sourceUrl":31,"mdContent":32},"tilegym-converting-cutile-to-triton","convert cuTile kernels to Triton","Converts cuTile GPU kernels (@ct.kernel) to Triton (@triton.jit). Handles standard in-repo conversion, debugging (cudaErrorIllegalAddress, shape mismatch, numerical mismatch), and mapping cuTile idioms (ct.load\u002Fct.store, ct.Constant, ct.launch) to Triton equivalents. Covers dual-kernel layout flags (e.g. transpose=True\u002FFalse + autotune grid via META) per translations\u002Fadvanced-patterns.md. Use when converting, porting, or translating cuTile kernels to Triton, or debugging existing Triton translations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},"nvidia","NVIDIA","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fnvidia.png",[12,16,19],{"name":13,"slug":14,"type":15},"Performance","performance","tag",{"name":17,"slug":18,"type":15},"Engineering","engineering",{"name":20,"slug":21,"type":15},"Debugging","debugging",2473,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fskills","2026-07-14T05:26:12.562494","CC-BY-4.0 AND Apache-2.0",281,[],{"repoUrl":23,"stars":22,"forks":26,"topics":29,"description":30},[],"AI agent skills published by NVIDIA","https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fskills\u002Ftree\u002FHEAD\u002Fskills\u002Ftilegym-converting-cutile-to-triton","---\nname: tilegym-converting-cutile-to-triton\nversion: \"1.0.0\"\ndescription: Converts cuTile GPU kernels (@ct.kernel) to Triton (@triton.jit). Handles standard in-repo conversion, debugging (cudaErrorIllegalAddress, shape mismatch, numerical mismatch), and mapping cuTile idioms (ct.load\u002Fct.store, ct.Constant, ct.launch) to Triton equivalents. Covers dual-kernel layout flags (e.g. transpose=True\u002FFalse + autotune grid via META) per translations\u002Fadvanced-patterns.md. Use when converting, porting, or translating cuTile kernels to Triton, or debugging existing Triton translations.\nlicense: CC-BY-4.0 AND Apache-2.0\ntools:\n  - Read\n  - Write\n  - Grep\n  - Glob\n  - Bash\nmetadata:\n  author: \"TileGym Team \u003CTileGym@nvidia.com>\"\n  tags:\n    - cutile\n    - triton\n    - conversion\n    - gpu\n    - kernel\n---\n\n# cuTile → Triton Conversion\n\nConvert `@ct.kernel` kernels to `@triton.jit`. API mapping: [references\u002Fapi-mapping.md](.\u002Freferences\u002Fapi-mapping.md) (cuTile → Triton).\n\n*In this skill’s Markdown, Triton launch syntax `kernel［grid］(…)` uses Unicode brackets so link checkers do not parse `[grid](…)` as a hyperlink; use normal ASCII brackets in real Triton code.*\n\n## Instructions\n\nFollow the phase-gated workflow in [translations\u002Fworkflow.md](.\u002Ftranslations\u002Fworkflow.md). Every conversion should go through **analyze → convert → validate → test → benchmark**, with explicit gates before moving on. Use the documents in [Workflow Selection](#workflow-selection) when the task matches a special case (errors, layout flags, perf).\n\n0. **Optimization strategy (perf-sensitive \u002F attention)** — If the op is **attention, FMHA, sliding window, soft cap, or GQA** (e.g. Gemma `gemma_attention`), read **[references\u002Foptimization-strategy.md](.\u002Freferences\u002Foptimization-strategy.md)** **before** converting the inner loop, then apply **[§4 Gemma FMHA checklist](.\u002Freferences\u002Foptimization-strategy.md#4-gemma-fmha--gemma_attention-conversion-checklist-mandatory)**. For other GEMM\u002FBMM\u002Fattention-adjacent kernels, still skim **§2–§3** of that file after TMA is done.\n\n1. **Select path** — Existing TileGym op: standard mode in `translations\u002Fworkflow.md`. If the cuTile source uses `transpose` \u002F `transpose_v`, dual layouts, or MLA-style paths, read [translations\u002Fadvanced-patterns.md](.\u002Ftranslations\u002Fadvanced-patterns.md) **before** writing Triton (two kernels + `META` grid, not one kernel + `tl.trans`).\n\n2. **Pre-flight** — Run the [Pre-flight Analysis](#pre-flight-analysis-run-before-converting) grep commands on the cuTile source. Count `@ct.kernel` definitions; note TMA-relevant `ct.load`\u002F`ct.store`, `ct.launch`, `Constant`, and layout flags.\n\n3. **Read mapping** — Keep [references\u002Fapi-mapping.md](.\u002Freferences\u002Fapi-mapping.md) open for cuTile → Triton API pairs. For runtime failures (illegal address, dtype, strides), use [references\u002Fdebugging.md](.\u002Freferences\u002Fdebugging.md).\n\n4. **Convert** — Copy the [Conversion Checklist](#conversion-checklist) into a todo list and execute in order. Structure and file placement: [translations\u002Ffile-structure.md](translations\u002Ffile-structure.md). **Mandatory:** any **2D+ block-shaped** tile load\u002Fstore uses `tl.make_tensor_descriptor` (TMA), not raw `tl.load(ptr+offs, mask=…)` for full tiles—skipping this is the most common source of large regressions. Host side: Triton bracket launch \u003Ccode>kernel［grid］(args)\u003C\u002Fcode> with tuple or `lambda META: (…)` for autotune; no `ct.launch`.\n\n5. **Validate** — Syntax-check the new Triton module; run the relevant TileGym pytest targets for the op: `pytest tests\u002Fops\u002Ftest_\u003Cop>.py -k \"triton\" -vs`. Fix failures before benchmarking.\n\n6. **Benchmark** — Compare Triton vs cuTile on perf tests. If Triton is clearly slower, follow **PERFORMANCE ANALYSIS (Phase c2t-5)** in [translations\u002Fworkflow.md](.\u002Ftranslations\u002Fworkflow.md) and [references\u002Foptimizing-reference.md](.\u002Freferences\u002Foptimizing-reference.md) for GEMM\u002FBMM\u002Fattention; use [references\u002Foptimization-strategy.md](.\u002Freferences\u002Foptimization-strategy.md) as the ordered checklist. If you see **10–50×** slowdowns, read **CRITICAL PERFORMANCE PATTERNS** in that same workflow file first.\n\n**Execution rules (MUST):**\n\n- Create and track the conversion checklist (e.g. TodoWrite) **before** editing kernel code; complete steps in order—do not skip pre-flight or TMA decisions.\n- For **attention \u002F FMHA \u002F Gemma \u002F GQA \u002F soft cap \u002F sliding window**: read [references\u002Foptimization-strategy.md](.\u002Freferences\u002Foptimization-strategy.md) and apply **§4** **before** treating the conversion as optimized.\n- Do **not** ship raw pointer+mask 2D+ tile loads where TMA applies; document any intentional exception.\n- If tests or benchmarks fail a gate, stop and fix **before** declaring the conversion done—do not stack unverified changes.\n\n## Workflow Selection\n\n- **Existing TileGym op** → Standard Mode: [translations\u002Fworkflow.md](.\u002Ftranslations\u002Fworkflow.md)\n- **Errors** (`cudaErrorIllegalAddress`, shape mismatch, numerical mismatch) → [references\u002Fdebugging.md](.\u002Freferences\u002Fdebugging.md)\n- **Advanced patterns** (TMA, dual layout flags `transpose`, autotune + `META` grid, Array.slice, ct.gather().item()) → **[translations\u002Fadvanced-patterns.md](.\u002Ftranslations\u002Fadvanced-patterns.md)** (MLA-style two kernels, avoid 3–15× regression on `transpose=False`).\n- **Performance** (Triton kernel slower than cuTile, autotuning, profiling) → [translations\u002Fworkflow.md](.\u002Ftranslations\u002Fworkflow.md) (section **PERFORMANCE ANALYSIS (Phase c2t-5)**)\n- **Optimization strategy hub** (ordered checklist: advanced-patterns + optimizing-reference) → **[references\u002Foptimization-strategy.md](.\u002Freferences\u002Foptimization-strategy.md)** — read **first** for attention\u002FFMHA\u002FGemma; then drill into the two source docs as needed\n- **Optimizing GEMM\u002FBMM\u002Fattention** (after TMA, or Triton 10–20% slower) → **[references\u002Foptimizing-reference.md](.\u002Freferences\u002Foptimizing-reference.md)** — EVEN_K fast path, transpose via pointer arithmetic, grid layout, autotune breadth, epilogue subtile; use these patterns during conversion and before perf sign-off (summarized in **optimization-strategy §2–§3**)\n- **Gemma attention \u002F GQA FMHA conversion** → **[references\u002Foptimization-strategy.md §4](.\u002Freferences\u002Foptimization-strategy.md#4-gemma-fmha--gemma_attention-conversion-checklist-mandatory)**\n- **Blackwell optimization** (complex kernels with iterative algorithms, register pressure, loop unrolling) → **[references\u002Foptimizing-reference.md](.\u002Freferences\u002Foptimizing-reference.md) §9** — TMA descriptors, `loop_unroll_factor`, occupancy autotuning, TMEM-friendly block sizes, slab allocator, dual-path kernel design\n- **⚠️ 10-50x REGRESSION** (catastrophic slowdown after conversion) → **[translations\u002Fworkflow.md](.\u002Ftranslations\u002Fworkflow.md)** — section **CRITICAL PERFORMANCE PATTERNS (AVOID 10-50x REGRESSION)**\n- **⚠️ Good perf on `transpose=True` only, collapse on `transpose=False`** (or opposite) → **[translations\u002Fadvanced-patterns.md](.\u002Ftranslations\u002Fadvanced-patterns.md)** — §1 Dual layout flag; two `@triton.jit` kernels + `grid = lambda META: (... META[\"BLOCK_H\"] ...)`\n\n## Pre-flight Analysis (Run BEFORE converting)\n\n```bash\n# Count kernels (only main kernel gets @triton.jit, helpers stay plain def)\ngrep \"@ct\\.kernel\" source.py | wc -l\n\n# Check for patterns needing special handling\ngrep \"ct\\.transpose\\|ct\\.permute\" source.py   # → use tl.trans\u002Ftl.permute\ngrep \"ct\\.astype\" source.py                    # → use .to(dtype)\ngrep \"ct\\.load\\|ct\\.store\" source.py          # → TMA for 2D+ (tl.make_tensor_descriptor), NOT raw tl.load(ptr+offs)\ngrep \"ct\\.launch\" source.py                    # → bracket launch: kernel then [grid] then (args)\ngrep \"ct\\.Constant\\|ct\\.ConstInt\" source.py    # → tl.constexpr\ngrep \"ct\\.cdiv\" source.py                      # → triton.cdiv (host) or Python (a+b-1)\u002F\u002Fb\ngrep \"ct\\.bid\\|ct\\.num_blocks\" source.py       # → tl.program_id\u002Ftl.num_programs\ngrep \"1 \u003C\u003C .*\\.bit_length\" source.py           # → triton.next_power_of_2 if needed\ngrep \"transpose\\|transpose_v\" source.py       # → if hit, read translations\u002Fadvanced-patterns.md (dual kernels + META grid)\n```\n\n## Conversion Checklist\n\nCopy this checklist and track progress:\n\n```\nConversion Progress:\n [ ] Step 0 (attention \u002F Gemma FMHA \u002F GQA \u002F soft cap \u002F sliding window): Read [references\u002Foptimization-strategy.md](.\u002Freferences\u002Foptimization-strategy.md) and apply §4 checklist before inner-loop Triton\n [ ] Step 1: Pre-flight — run grep commands above, note special patterns and 2D+ loads (→ TMA)\n [ ] Step 2: Analyze source cuTile kernel (identify patterns, shapes, dtypes)\n [ ] Step 3: Create Triton file with correct structure (see translations\u002Ffile-structure.md)\n [ ] Step 4: Convert kernel signature (tensor args → pointer args, Constant → constexpr)\n [ ] Step 4b: TMA (MANDATORY for 2D+ loads) — use tl.make_tensor_descriptor for every 2D+ tile load\u002Fstore; do NOT ship raw tl.load(ptr+offs,mask) for block-shaped access (see workflow.md § TMA OPTIMIZATION)\n [ ] Step 5: Convert kernel body (apply gotchas table below + API mapping)\n [ ] Step 6: Convert host wrapper (grid tuple\u002Flambda, bracket-style launch: kernel, grid, then arguments; no ct.launch); call triton.set_allocator(alloc_fn) if using TMA\n [ ] Step 7: Validate — run pytest or syntax check on Triton file\n [ ] Step 8: Test — run pytest, verify X passed 0 failed\n [ ] Step 9: If test fails → fix → re-validate → re-test (loop until green)\n [ ] Step 10: Benchmark — run perf test, compare vs cuTile (see workflow.md § PERFORMANCE ANALYSIS)\n [ ] Step 10b: If GEMM\u002FBMM\u002Fattention and Triton &gt;20% slower → walk [references\u002Foptimization-strategy.md](.\u002Freferences\u002Foptimization-strategy.md) §2–§3 then [references\u002Foptimizing-reference.md](.\u002Freferences\u002Foptimizing-reference.md) (EVEN_K, transpose, grid, autotune, epilogue subtile), then re-benchmark\n [ ] Step 10c: If op has `transpose` \u002F layout flag → read [translations\u002Fadvanced-patterns.md](.\u002Ftranslations\u002Fadvanced-patterns.md); verify **separate kernels** per layout (not transpose-kernel + `tl.trans`); **autotuned** launches use `lambda META: (triton.cdiv(..., META[\"BLOCK_H\"]), ...)` — no fixed `BLOCK_H`\u002F`BLOCK_N` through `apply()` unless autotune is disabled\n\nPost-conversion Verification (TMA is mandatory for 2D+ loads):\n [ ] TMA: All 2D+ tile loads use tl.make_tensor_descriptor(...).load([...]); no raw ptr+mask for block-shaped 2D+ access (else 5x-20x regression)\n [ ] Grid uses tuple or lambda (not 3-tuple required like cuTile)\n [ ] Triton autotune added if cuTile op used kernel_configs\u002Fautotune (see workflow § PERFORMANCE ANALYSIS)\n [ ] Host grid uses triton.cdiv where appropriate (not (a+b-1)\u002F\u002Fb only)\n [ ] Pointer\u002Foffset indexing: Triton uses element offsets (ptr + offs), not block index in tl.load (or use TMA descriptor)\n [ ] ct.astype(x, dtype) → x.to(dtype) in Triton\n [ ] ct.mma(a, b, acc=acc) → tl.dot(a, b, acc) (no keyword in Triton)\n [ ] Optional\u002FNone args: Triton allows None in kernel args if desired (cuTile required dummy+flag)\n [ ] Masking applied when BLOCK_SIZE > actual dimension (same as cuTile); with TMA, masks can often be removed for full tiles\n [ ] Reduction divisor uses actual_size, NOT BLOCK_SIZE\n [ ] fp32\u002Ftf32: Triton defaults allow_tf32=True; match cuTile behavior if you had explicit tf32 cast\n [ ] If any 2D+ load uses raw ptr+mask (exception only): document WHY TMA was not used\n [ ] tl.assume() alignment hints added for strides and pointers\n```\n\n## Gotchas (Most Common Translation Errors) {#gotchas-most-common-translation-errors}\n\nComprehensive table of patterns that frequently break or regress when porting `@ct.kernel` to `@triton.jit` — *mma accumulator, type cast, grid, TMA usage, dtype handling, layout flags, batched matmul, etc.*\n\n**See:** [references\u002Fgotchas.md](.\u002Freferences\u002Fgotchas.md) — read this BEFORE writing the Triton kernel.\n\n## Performance Gotchas (10-50x Regression Risk) {#performance-gotchas-10-50x-regression-risk}\n\n**⚠️ These cause CATASTROPHIC slowdowns. Check BEFORE benchmarking.**\n\nPatterns and their impact: TMA vs raw ptr+mask (5-20×), autotune vs fixed tile sizes (2-3×), `broadcast_to + tl.dot` (10-50×), `extract_slice` chains (2-5×), and more.\n\n**See:** [references\u002Fperformance-gotchas.md](.\u002Freferences\u002Fperformance-gotchas.md) — full regression-risk table.\n\n**Full details:** [translations\u002Fworkflow.md](.\u002Ftranslations\u002Fworkflow.md) — section **CRITICAL PERFORMANCE PATTERNS (AVOID 10-50x REGRESSION)**.\n\nFull API mapping: [references\u002Fapi-mapping.md](.\u002Freferences\u002Fapi-mapping.md).\n\nTriton math dtype (erf\u002Ferfc\u002Fexp\u002Flog\u002Fsqrt) and the \"don't substitute erf with tanh\" pattern: [references\u002Fdebugging.md](.\u002Freferences\u002Fdebugging.md) — section **Triton Math Function Dtype Requirements (CRITICAL)**.\n\n## Optimization strategy (hub)\n\n**File:** [references\u002Foptimization-strategy.md](.\u002Freferences\u002Foptimization-strategy.md)\n\nSummarizes **[translations\u002Fadvanced-patterns.md](.\u002Ftranslations\u002Fadvanced-patterns.md)** (layout flags, dual kernels, autotune+`META`, batched launch, Blackwell pointers) and **[references\u002Foptimizing-reference.md](.\u002Freferences\u002Foptimizing-reference.md)** (post-TMA micro-opts, §9) into **§1–§3** plus a **mandatory §4 Gemma FMHA checklist**.\n\n**Rule:** For **attention \u002F FMHA \u002F Gemma-style** conversions, open **optimization-strategy** in the same session as **workflow** — do not rely on TMA alone for perf sign-off.\n\n## Reference Documents {#reference-documents}\n\nRead from **cuTile → Triton** perspective. Core files live in this skill under ``.\n\n| Category | Document | Content |\n|----------|----------|---------|\n| **Strategy** | **[optimization-strategy.md](.\u002Freferences\u002Foptimization-strategy.md)** | **Ordered hub:** advanced-patterns + optimizing-reference; **§4 Gemma FMHA mandatory checklist** |\n| **Workflows** | [translations\u002Fworkflow.md](translations\u002Fworkflow.md) | Standard c2t conversion (phases + checklist) |\n| | [translations\u002Ffile-structure.md](translations\u002Ffile-structure.md) | Where to place Triton files when converting from cuTile |\n| | **[translations\u002Fadvanced-patterns.md](.\u002Ftranslations\u002Fadvanced-patterns.md)** | **Dual layout flags (transpose), autotune + `META` grid, MLA-style two kernels** |\n| **API** | [api-mapping.md](.\u002Freferences\u002Fapi-mapping.md) | cuTile → Triton mapping |\n| | [optimizing-reference.md](.\u002Freferences\u002Foptimizing-reference.md) | **GEMM\u002FBMM\u002Fattention optimizations** (EVEN_K, transpose, grid, autotune, epilogue subtile) |\n| **Gotchas** | [gotchas.md](.\u002Freferences\u002Fgotchas.md) | **Common cuTile→Triton translation errors** (mma, dtype, grid, TMA, layout flags) |\n| | [performance-gotchas.md](.\u002Freferences\u002Fperformance-gotchas.md) | **10-50× regression-risk table** (TMA vs ptr+mask, broadcast_to, extract_slice chains, autotune) |\n| **Testing & errors** | [references\u002Fdebugging.md](.\u002Freferences\u002Fdebugging.md) | **Triton runtime errors** (cudaErrorIllegalAddress, pointer type, stride overflow) |\n\n## Worked Examples\n\nUse **cutile_kernel.py as source** and **triton_kernel.py as target**:\n\n| Example | Directory | Complexity |\n|---------|-----------|------------|\n| Vector Add | [examples\u002F01_vector_add\u002F](examples\u002F01_vector_add\u002F) | Basic |\n| Softmax | [examples\u002F02_softmax\u002F](examples\u002F02_softmax\u002F) | Intermediate |\n| LayerNorm | [examples\u002F03_layernorm\u002F](examples\u002F03_layernorm\u002F) | Intermediate |\n| MatMul | [examples\u002F04_matmul\u002F](examples\u002F04_matmul\u002F) | Advanced |\n| Attention | [examples\u002F05_attention\u002F](examples\u002F05_attention\u002F) | Advanced |\n\nRead `cutile_kernel.py` first, then `triton_kernel.py`, to see the inverse mapping.\n\n## ⚠️ MANDATORY COMPLETION CHECKLIST (DO NOT SKIP)\n\n**A conversion is NOT COMPLETE until ALL items are checked. Copy and complete:**\n\n```\nMANDATORY COMPLETION GATES:\n [ ] 1. CORRECTNESS: pytest passes with 0 failures\n     Command: python -m pytest {test_path} -k \"test_op and triton\" -vs --tb=short\n     Gate: \"X passed, 0 failed\"\n\n [ ] 2. TMA OPTIMIZATION: All 2D+ tile loads use tl.make_tensor_descriptor\n     Verify: grep -n \"tl.load.*mask\" triton_file.py | wc -l  # Should be 0 for 2D+ ops\n     Skip = 5-20x performance regression\n\n [ ] 3. PERFORMANCE TEST: Triton within 20% of cuTile baseline\n     Command: python -m pytest {test_path} -k \"test_perf\" --print-record -v\n     OR: Run benchmark script: cd tests\u002Fbenchmark && python bench_{op}.py\n     Gate: Triton TFLOPS >= 0.8 * CuTile TFLOPS\n\n [ ] 4. PERFORMANCE COMPARISON RECORDED:\n     Document results:\n     | Config | Triton (TFLOPS) | CuTile (TFLOPS) | Ratio |\n     |--------|-----------------|-----------------|-------|\n     | [fill] | [fill]          | [fill]          | [fill]|\n\nCONVERSION COMPLETE: All 4 gates passed? → YES \u002F NO\n```\n\n**Why this matters:**\n- Gate 1 catches functional bugs\n- Gate 2 prevents catastrophic 5-20x regressions (most common mistake)\n- Gate 3 validates that optimization was effective\n- Gate 4 creates accountability record\n\n**If any gate fails:** Fix and re-verify before declaring complete.\n",{"data":34,"body":50},{"name":4,"version":35,"description":6,"license":25,"tools":36,"metadata":42},"1.0.0",[37,38,39,40,41],"Read","Write","Grep","Glob","Bash",{"author":43,"tags":44},"TileGym Team \u003CTileGym@nvidia.com>",[45,46,47,48,49],"cutile","triton","conversion","gpu","kernel",{"type":51,"children":52},"root",[53,62,94,119,126,155,509,517,585,590,857,863,1222,1227,1232,1242,1248,1272,1289,1295,1303,1324,1340,1359,1369,1385,1391,1404,1447,1478,1484,1496,1767,1773,1791,1921,1942,1948,1956,1965,1973,1996,2006],{"type":54,"tag":55,"props":56,"children":58},"element","h1",{"id":57},"cutile-triton-conversion",[59],{"type":60,"value":61},"text","cuTile → Triton Conversion",{"type":54,"tag":63,"props":64,"children":65},"p",{},[66,68,75,77,83,85,92],{"type":60,"value":67},"Convert ",{"type":54,"tag":69,"props":70,"children":72},"code",{"className":71},[],[73],{"type":60,"value":74},"@ct.kernel",{"type":60,"value":76}," kernels to ",{"type":54,"tag":69,"props":78,"children":80},{"className":79},[],[81],{"type":60,"value":82},"@triton.jit",{"type":60,"value":84},". API mapping: ",{"type":54,"tag":86,"props":87,"children":89},"a",{"href":88},".\u002Freferences\u002Fapi-mapping.md",[90],{"type":60,"value":91},"references\u002Fapi-mapping.md",{"type":60,"value":93}," (cuTile → Triton).",{"type":54,"tag":63,"props":95,"children":96},{},[97],{"type":54,"tag":98,"props":99,"children":100},"em",{},[101,103,109,111,117],{"type":60,"value":102},"In this skill’s Markdown, Triton launch syntax ",{"type":54,"tag":69,"props":104,"children":106},{"className":105},[],[107],{"type":60,"value":108},"kernel［grid］(…)",{"type":60,"value":110}," uses Unicode brackets so link checkers do not parse ",{"type":54,"tag":69,"props":112,"children":114},{"className":113},[],[115],{"type":60,"value":116},"[grid](…)",{"type":60,"value":118}," as a hyperlink; use normal ASCII brackets in real Triton code.",{"type":54,"tag":120,"props":121,"children":123},"h2",{"id":122},"instructions",[124],{"type":60,"value":125},"Instructions",{"type":54,"tag":63,"props":127,"children":128},{},[129,131,137,139,145,147,153],{"type":60,"value":130},"Follow the phase-gated workflow in ",{"type":54,"tag":86,"props":132,"children":134},{"href":133},".\u002Ftranslations\u002Fworkflow.md",[135],{"type":60,"value":136},"translations\u002Fworkflow.md",{"type":60,"value":138},". Every conversion should go through ",{"type":54,"tag":140,"props":141,"children":142},"strong",{},[143],{"type":60,"value":144},"analyze → convert → validate → test → benchmark",{"type":60,"value":146},", with explicit gates before moving on. Use the documents in ",{"type":54,"tag":86,"props":148,"children":150},{"href":149},"#workflow-selection",[151],{"type":60,"value":152},"Workflow Selection",{"type":60,"value":154}," when the task matches a special case (errors, layout flags, perf).",{"type":54,"tag":156,"props":157,"children":159},"ol",{"start":158},0,[160,222,284,340,364,440,458],{"type":54,"tag":161,"props":162,"children":163},"li",{},[164,169,171,176,178,184,186,195,197,202,204,213,215,220],{"type":54,"tag":140,"props":165,"children":166},{},[167],{"type":60,"value":168},"Optimization strategy (perf-sensitive \u002F attention)",{"type":60,"value":170}," — If the op is ",{"type":54,"tag":140,"props":172,"children":173},{},[174],{"type":60,"value":175},"attention, FMHA, sliding window, soft cap, or GQA",{"type":60,"value":177}," (e.g. Gemma ",{"type":54,"tag":69,"props":179,"children":181},{"className":180},[],[182],{"type":60,"value":183},"gemma_attention",{"type":60,"value":185},"), read ",{"type":54,"tag":140,"props":187,"children":188},{},[189],{"type":54,"tag":86,"props":190,"children":192},{"href":191},".\u002Freferences\u002Foptimization-strategy.md",[193],{"type":60,"value":194},"references\u002Foptimization-strategy.md",{"type":60,"value":196}," ",{"type":54,"tag":140,"props":198,"children":199},{},[200],{"type":60,"value":201},"before",{"type":60,"value":203}," converting the inner loop, then apply ",{"type":54,"tag":140,"props":205,"children":206},{},[207],{"type":54,"tag":86,"props":208,"children":210},{"href":209},".\u002Freferences\u002Foptimization-strategy.md#4-gemma-fmha--gemma_attention-conversion-checklist-mandatory",[211],{"type":60,"value":212},"§4 Gemma FMHA checklist",{"type":60,"value":214},". For other GEMM\u002FBMM\u002Fattention-adjacent kernels, still skim ",{"type":54,"tag":140,"props":216,"children":217},{},[218],{"type":60,"value":219},"§2–§3",{"type":60,"value":221}," of that file after TMA is done.",{"type":54,"tag":161,"props":223,"children":224},{},[225,230,232,237,239,245,247,253,255,261,262,266,268,274,276,282],{"type":54,"tag":140,"props":226,"children":227},{},[228],{"type":60,"value":229},"Select path",{"type":60,"value":231}," — Existing TileGym op: standard mode in ",{"type":54,"tag":69,"props":233,"children":235},{"className":234},[],[236],{"type":60,"value":136},{"type":60,"value":238},". If the cuTile source uses ",{"type":54,"tag":69,"props":240,"children":242},{"className":241},[],[243],{"type":60,"value":244},"transpose",{"type":60,"value":246}," \u002F ",{"type":54,"tag":69,"props":248,"children":250},{"className":249},[],[251],{"type":60,"value":252},"transpose_v",{"type":60,"value":254},", dual layouts, or MLA-style paths, read ",{"type":54,"tag":86,"props":256,"children":258},{"href":257},".\u002Ftranslations\u002Fadvanced-patterns.md",[259],{"type":60,"value":260},"translations\u002Fadvanced-patterns.md",{"type":60,"value":196},{"type":54,"tag":140,"props":263,"children":264},{},[265],{"type":60,"value":201},{"type":60,"value":267}," writing Triton (two kernels + ",{"type":54,"tag":69,"props":269,"children":271},{"className":270},[],[272],{"type":60,"value":273},"META",{"type":60,"value":275}," grid, not one kernel + ",{"type":54,"tag":69,"props":277,"children":279},{"className":278},[],[280],{"type":60,"value":281},"tl.trans",{"type":60,"value":283},").",{"type":54,"tag":161,"props":285,"children":286},{},[287,292,294,300,302,307,309,315,317,323,325,331,332,338],{"type":54,"tag":140,"props":288,"children":289},{},[290],{"type":60,"value":291},"Pre-flight",{"type":60,"value":293}," — Run the ",{"type":54,"tag":86,"props":295,"children":297},{"href":296},"#pre-flight-analysis-run-before-converting",[298],{"type":60,"value":299},"Pre-flight Analysis",{"type":60,"value":301}," grep commands on the cuTile source. Count ",{"type":54,"tag":69,"props":303,"children":305},{"className":304},[],[306],{"type":60,"value":74},{"type":60,"value":308}," definitions; note TMA-relevant ",{"type":54,"tag":69,"props":310,"children":312},{"className":311},[],[313],{"type":60,"value":314},"ct.load",{"type":60,"value":316},"\u002F",{"type":54,"tag":69,"props":318,"children":320},{"className":319},[],[321],{"type":60,"value":322},"ct.store",{"type":60,"value":324},", ",{"type":54,"tag":69,"props":326,"children":328},{"className":327},[],[329],{"type":60,"value":330},"ct.launch",{"type":60,"value":324},{"type":54,"tag":69,"props":333,"children":335},{"className":334},[],[336],{"type":60,"value":337},"Constant",{"type":60,"value":339},", and layout flags.",{"type":54,"tag":161,"props":341,"children":342},{},[343,348,350,354,356,362],{"type":54,"tag":140,"props":344,"children":345},{},[346],{"type":60,"value":347},"Read mapping",{"type":60,"value":349}," — Keep ",{"type":54,"tag":86,"props":351,"children":352},{"href":88},[353],{"type":60,"value":91},{"type":60,"value":355}," open for cuTile → Triton API pairs. For runtime failures (illegal address, dtype, strides), use ",{"type":54,"tag":86,"props":357,"children":359},{"href":358},".\u002Freferences\u002Fdebugging.md",[360],{"type":60,"value":361},"references\u002Fdebugging.md",{"type":60,"value":363},".",{"type":54,"tag":161,"props":365,"children":366},{},[367,372,374,380,382,387,389,394,396,401,403,409,411,417,419,424,426,432,434,439],{"type":54,"tag":140,"props":368,"children":369},{},[370],{"type":60,"value":371},"Convert",{"type":60,"value":373}," — Copy the ",{"type":54,"tag":86,"props":375,"children":377},{"href":376},"#conversion-checklist",[378],{"type":60,"value":379},"Conversion Checklist",{"type":60,"value":381}," into a todo list and execute in order. Structure and file placement: ",{"type":54,"tag":86,"props":383,"children":385},{"href":384},"translations\u002Ffile-structure.md",[386],{"type":60,"value":384},{"type":60,"value":388},". ",{"type":54,"tag":140,"props":390,"children":391},{},[392],{"type":60,"value":393},"Mandatory:",{"type":60,"value":395}," any ",{"type":54,"tag":140,"props":397,"children":398},{},[399],{"type":60,"value":400},"2D+ block-shaped",{"type":60,"value":402}," tile load\u002Fstore uses ",{"type":54,"tag":69,"props":404,"children":406},{"className":405},[],[407],{"type":60,"value":408},"tl.make_tensor_descriptor",{"type":60,"value":410}," (TMA), not raw ",{"type":54,"tag":69,"props":412,"children":414},{"className":413},[],[415],{"type":60,"value":416},"tl.load(ptr+offs, mask=…)",{"type":60,"value":418}," for full tiles—skipping this is the most common source of large regressions. Host side: Triton bracket launch ",{"type":54,"tag":69,"props":420,"children":421},{},[422],{"type":60,"value":423},"kernel［grid］(args)",{"type":60,"value":425}," with tuple or ",{"type":54,"tag":69,"props":427,"children":429},{"className":428},[],[430],{"type":60,"value":431},"lambda META: (…)",{"type":60,"value":433}," for autotune; no ",{"type":54,"tag":69,"props":435,"children":437},{"className":436},[],[438],{"type":60,"value":330},{"type":60,"value":363},{"type":54,"tag":161,"props":441,"children":442},{},[443,448,450,456],{"type":54,"tag":140,"props":444,"children":445},{},[446],{"type":60,"value":447},"Validate",{"type":60,"value":449}," — Syntax-check the new Triton module; run the relevant TileGym pytest targets for the op: ",{"type":54,"tag":69,"props":451,"children":453},{"className":452},[],[454],{"type":60,"value":455},"pytest tests\u002Fops\u002Ftest_\u003Cop>.py -k \"triton\" -vs",{"type":60,"value":457},". Fix failures before benchmarking.",{"type":54,"tag":161,"props":459,"children":460},{},[461,466,468,473,475,479,481,487,489,493,495,500,502,507],{"type":54,"tag":140,"props":462,"children":463},{},[464],{"type":60,"value":465},"Benchmark",{"type":60,"value":467}," — Compare Triton vs cuTile on perf tests. If Triton is clearly slower, follow ",{"type":54,"tag":140,"props":469,"children":470},{},[471],{"type":60,"value":472},"PERFORMANCE ANALYSIS (Phase c2t-5)",{"type":60,"value":474}," in ",{"type":54,"tag":86,"props":476,"children":477},{"href":133},[478],{"type":60,"value":136},{"type":60,"value":480}," and ",{"type":54,"tag":86,"props":482,"children":484},{"href":483},".\u002Freferences\u002Foptimizing-reference.md",[485],{"type":60,"value":486},"references\u002Foptimizing-reference.md",{"type":60,"value":488}," for GEMM\u002FBMM\u002Fattention; use ",{"type":54,"tag":86,"props":490,"children":491},{"href":191},[492],{"type":60,"value":194},{"type":60,"value":494}," as the ordered checklist. If you see ",{"type":54,"tag":140,"props":496,"children":497},{},[498],{"type":60,"value":499},"10–50×",{"type":60,"value":501}," slowdowns, read ",{"type":54,"tag":140,"props":503,"children":504},{},[505],{"type":60,"value":506},"CRITICAL PERFORMANCE PATTERNS",{"type":60,"value":508}," in that same workflow file first.",{"type":54,"tag":63,"props":510,"children":511},{},[512],{"type":54,"tag":140,"props":513,"children":514},{},[515],{"type":60,"value":516},"Execution rules (MUST):",{"type":54,"tag":518,"props":519,"children":520},"ul",{},[521,532,562,574],{"type":54,"tag":161,"props":522,"children":523},{},[524,526,530],{"type":60,"value":525},"Create and track the conversion checklist (e.g. TodoWrite) ",{"type":54,"tag":140,"props":527,"children":528},{},[529],{"type":60,"value":201},{"type":60,"value":531}," editing kernel code; complete steps in order—do not skip pre-flight or TMA decisions.",{"type":54,"tag":161,"props":533,"children":534},{},[535,537,542,544,548,550,555,556,560],{"type":60,"value":536},"For ",{"type":54,"tag":140,"props":538,"children":539},{},[540],{"type":60,"value":541},"attention \u002F FMHA \u002F Gemma \u002F GQA \u002F soft cap \u002F sliding window",{"type":60,"value":543},": read ",{"type":54,"tag":86,"props":545,"children":546},{"href":191},[547],{"type":60,"value":194},{"type":60,"value":549}," and apply ",{"type":54,"tag":140,"props":551,"children":552},{},[553],{"type":60,"value":554},"§4",{"type":60,"value":196},{"type":54,"tag":140,"props":557,"children":558},{},[559],{"type":60,"value":201},{"type":60,"value":561}," treating the conversion as optimized.",{"type":54,"tag":161,"props":563,"children":564},{},[565,567,572],{"type":60,"value":566},"Do ",{"type":54,"tag":140,"props":568,"children":569},{},[570],{"type":60,"value":571},"not",{"type":60,"value":573}," ship raw pointer+mask 2D+ tile loads where TMA applies; document any intentional exception.",{"type":54,"tag":161,"props":575,"children":576},{},[577,579,583],{"type":60,"value":578},"If tests or benchmarks fail a gate, stop and fix ",{"type":54,"tag":140,"props":580,"children":581},{},[582],{"type":60,"value":201},{"type":60,"value":584}," declaring the conversion done—do not stack unverified changes.",{"type":54,"tag":120,"props":586,"children":588},{"id":587},"workflow-selection",[589],{"type":60,"value":152},{"type":54,"tag":518,"props":591,"children":592},{},[593,607,629,669,690,716,741,759,788,812],{"type":54,"tag":161,"props":594,"children":595},{},[596,601,603],{"type":54,"tag":140,"props":597,"children":598},{},[599],{"type":60,"value":600},"Existing TileGym op",{"type":60,"value":602}," → Standard Mode: ",{"type":54,"tag":86,"props":604,"children":605},{"href":133},[606],{"type":60,"value":136},{"type":54,"tag":161,"props":608,"children":609},{},[610,615,617,623,625],{"type":54,"tag":140,"props":611,"children":612},{},[613],{"type":60,"value":614},"Errors",{"type":60,"value":616}," (",{"type":54,"tag":69,"props":618,"children":620},{"className":619},[],[621],{"type":60,"value":622},"cudaErrorIllegalAddress",{"type":60,"value":624},", shape mismatch, numerical mismatch) → ",{"type":54,"tag":86,"props":626,"children":627},{"href":358},[628],{"type":60,"value":361},{"type":54,"tag":161,"props":630,"children":631},{},[632,637,639,644,646,651,653,660,662,668],{"type":54,"tag":140,"props":633,"children":634},{},[635],{"type":60,"value":636},"Advanced patterns",{"type":60,"value":638}," (TMA, dual layout flags ",{"type":54,"tag":69,"props":640,"children":642},{"className":641},[],[643],{"type":60,"value":244},{"type":60,"value":645},", autotune + ",{"type":54,"tag":69,"props":647,"children":649},{"className":648},[],[650],{"type":60,"value":273},{"type":60,"value":652}," grid, Array.slice, ct.gather().item()) → ",{"type":54,"tag":140,"props":654,"children":655},{},[656],{"type":54,"tag":86,"props":657,"children":658},{"href":257},[659],{"type":60,"value":260},{"type":60,"value":661}," (MLA-style two kernels, avoid 3–15× regression on ",{"type":54,"tag":69,"props":663,"children":665},{"className":664},[],[666],{"type":60,"value":667},"transpose=False",{"type":60,"value":283},{"type":54,"tag":161,"props":670,"children":671},{},[672,676,678,682,684,688],{"type":54,"tag":140,"props":673,"children":674},{},[675],{"type":60,"value":13},{"type":60,"value":677}," (Triton kernel slower than cuTile, autotuning, profiling) → ",{"type":54,"tag":86,"props":679,"children":680},{"href":133},[681],{"type":60,"value":136},{"type":60,"value":683}," (section ",{"type":54,"tag":140,"props":685,"children":686},{},[687],{"type":60,"value":472},{"type":60,"value":689},")",{"type":54,"tag":161,"props":691,"children":692},{},[693,698,700,707,709,714],{"type":54,"tag":140,"props":694,"children":695},{},[696],{"type":60,"value":697},"Optimization strategy hub",{"type":60,"value":699}," (ordered checklist: advanced-patterns + optimizing-reference) → ",{"type":54,"tag":140,"props":701,"children":702},{},[703],{"type":54,"tag":86,"props":704,"children":705},{"href":191},[706],{"type":60,"value":194},{"type":60,"value":708}," — read ",{"type":54,"tag":140,"props":710,"children":711},{},[712],{"type":60,"value":713},"first",{"type":60,"value":715}," for attention\u002FFMHA\u002FGemma; then drill into the two source docs as needed",{"type":54,"tag":161,"props":717,"children":718},{},[719,724,726,733,735,740],{"type":54,"tag":140,"props":720,"children":721},{},[722],{"type":60,"value":723},"Optimizing GEMM\u002FBMM\u002Fattention",{"type":60,"value":725}," (after TMA, or Triton 10–20% slower) → ",{"type":54,"tag":140,"props":727,"children":728},{},[729],{"type":54,"tag":86,"props":730,"children":731},{"href":483},[732],{"type":60,"value":486},{"type":60,"value":734}," — EVEN_K fast path, transpose via pointer arithmetic, grid layout, autotune breadth, epilogue subtile; use these patterns during conversion and before perf sign-off (summarized in ",{"type":54,"tag":140,"props":736,"children":737},{},[738],{"type":60,"value":739},"optimization-strategy §2–§3",{"type":60,"value":689},{"type":54,"tag":161,"props":742,"children":743},{},[744,749,751],{"type":54,"tag":140,"props":745,"children":746},{},[747],{"type":60,"value":748},"Gemma attention \u002F GQA FMHA conversion",{"type":60,"value":750}," → ",{"type":54,"tag":140,"props":752,"children":753},{},[754],{"type":54,"tag":86,"props":755,"children":756},{"href":209},[757],{"type":60,"value":758},"references\u002Foptimization-strategy.md §4",{"type":54,"tag":161,"props":760,"children":761},{},[762,767,769,778,780,786],{"type":54,"tag":140,"props":763,"children":764},{},[765],{"type":60,"value":766},"Blackwell optimization",{"type":60,"value":768}," (complex kernels with iterative algorithms, register pressure, loop unrolling) → ",{"type":54,"tag":140,"props":770,"children":771},{},[772,776],{"type":54,"tag":86,"props":773,"children":774},{"href":483},[775],{"type":60,"value":486},{"type":60,"value":777}," §9",{"type":60,"value":779}," — TMA descriptors, ",{"type":54,"tag":69,"props":781,"children":783},{"className":782},[],[784],{"type":60,"value":785},"loop_unroll_factor",{"type":60,"value":787},", occupancy autotuning, TMEM-friendly block sizes, slab allocator, dual-path kernel design",{"type":54,"tag":161,"props":789,"children":790},{},[791,796,798,805,807],{"type":54,"tag":140,"props":792,"children":793},{},[794],{"type":60,"value":795},"⚠️ 10-50x REGRESSION",{"type":60,"value":797}," (catastrophic slowdown after conversion) → ",{"type":54,"tag":140,"props":799,"children":800},{},[801],{"type":54,"tag":86,"props":802,"children":803},{"href":133},[804],{"type":60,"value":136},{"type":60,"value":806}," — section ",{"type":54,"tag":140,"props":808,"children":809},{},[810],{"type":60,"value":811},"CRITICAL PERFORMANCE PATTERNS (AVOID 10-50x REGRESSION)",{"type":54,"tag":161,"props":813,"children":814},{},[815,833,835,842,844,849,851],{"type":54,"tag":140,"props":816,"children":817},{},[818,820,826,828],{"type":60,"value":819},"⚠️ Good perf on ",{"type":54,"tag":69,"props":821,"children":823},{"className":822},[],[824],{"type":60,"value":825},"transpose=True",{"type":60,"value":827}," only, collapse on ",{"type":54,"tag":69,"props":829,"children":831},{"className":830},[],[832],{"type":60,"value":667},{"type":60,"value":834}," (or opposite) → ",{"type":54,"tag":140,"props":836,"children":837},{},[838],{"type":54,"tag":86,"props":839,"children":840},{"href":257},[841],{"type":60,"value":260},{"type":60,"value":843}," — §1 Dual layout flag; two ",{"type":54,"tag":69,"props":845,"children":847},{"className":846},[],[848],{"type":60,"value":82},{"type":60,"value":850}," kernels + ",{"type":54,"tag":69,"props":852,"children":854},{"className":853},[],[855],{"type":60,"value":856},"grid = lambda META: (... META[\"BLOCK_H\"] ...)",{"type":54,"tag":120,"props":858,"children":860},{"id":859},"pre-flight-analysis-run-before-converting",[861],{"type":60,"value":862},"Pre-flight Analysis (Run BEFORE converting)",{"type":54,"tag":864,"props":865,"children":870},"pre",{"className":866,"code":867,"language":868,"meta":869,"style":869},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Count kernels (only main kernel gets @triton.jit, helpers stay plain def)\ngrep \"@ct\\.kernel\" source.py | wc -l\n\n# Check for patterns needing special handling\ngrep \"ct\\.transpose\\|ct\\.permute\" source.py   # → use tl.trans\u002Ftl.permute\ngrep \"ct\\.astype\" source.py                    # → use .to(dtype)\ngrep \"ct\\.load\\|ct\\.store\" source.py          # → TMA for 2D+ (tl.make_tensor_descriptor), NOT raw tl.load(ptr+offs)\ngrep \"ct\\.launch\" source.py                    # → bracket launch: kernel then [grid] then (args)\ngrep \"ct\\.Constant\\|ct\\.ConstInt\" source.py    # → tl.constexpr\ngrep \"ct\\.cdiv\" source.py                      # → triton.cdiv (host) or Python (a+b-1)\u002F\u002Fb\ngrep \"ct\\.bid\\|ct\\.num_blocks\" source.py       # → tl.program_id\u002Ftl.num_programs\ngrep \"1 \u003C\u003C .*\\.bit_length\" source.py           # → triton.next_power_of_2 if needed\ngrep \"transpose\\|transpose_v\" source.py       # → if hit, read translations\u002Fadvanced-patterns.md (dual kernels + META grid)\n","bash","",[871],{"type":54,"tag":69,"props":872,"children":873},{"__ignoreMap":869},[874,886,933,943,952,982,1012,1042,1072,1102,1132,1162,1192],{"type":54,"tag":875,"props":876,"children":879},"span",{"class":877,"line":878},"line",1,[880],{"type":54,"tag":875,"props":881,"children":883},{"style":882},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[884],{"type":60,"value":885},"# Count kernels (only main kernel gets @triton.jit, helpers stay plain def)\n",{"type":54,"tag":875,"props":887,"children":889},{"class":877,"line":888},2,[890,896,902,908,913,918,923,928],{"type":54,"tag":875,"props":891,"children":893},{"style":892},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[894],{"type":60,"value":895},"grep",{"type":54,"tag":875,"props":897,"children":899},{"style":898},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[900],{"type":60,"value":901}," \"",{"type":54,"tag":875,"props":903,"children":905},{"style":904},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[906],{"type":60,"value":907},"@ct\\.kernel",{"type":54,"tag":875,"props":909,"children":910},{"style":898},[911],{"type":60,"value":912},"\"",{"type":54,"tag":875,"props":914,"children":915},{"style":904},[916],{"type":60,"value":917}," source.py",{"type":54,"tag":875,"props":919,"children":920},{"style":898},[921],{"type":60,"value":922}," |",{"type":54,"tag":875,"props":924,"children":925},{"style":892},[926],{"type":60,"value":927}," wc",{"type":54,"tag":875,"props":929,"children":930},{"style":904},[931],{"type":60,"value":932}," -l\n",{"type":54,"tag":875,"props":934,"children":936},{"class":877,"line":935},3,[937],{"type":54,"tag":875,"props":938,"children":940},{"emptyLinePlaceholder":939},true,[941],{"type":60,"value":942},"\n",{"type":54,"tag":875,"props":944,"children":946},{"class":877,"line":945},4,[947],{"type":54,"tag":875,"props":948,"children":949},{"style":882},[950],{"type":60,"value":951},"# Check for patterns needing special handling\n",{"type":54,"tag":875,"props":953,"children":955},{"class":877,"line":954},5,[956,960,964,969,973,977],{"type":54,"tag":875,"props":957,"children":958},{"style":892},[959],{"type":60,"value":895},{"type":54,"tag":875,"props":961,"children":962},{"style":898},[963],{"type":60,"value":901},{"type":54,"tag":875,"props":965,"children":966},{"style":904},[967],{"type":60,"value":968},"ct\\.transpose\\|ct\\.permute",{"type":54,"tag":875,"props":970,"children":971},{"style":898},[972],{"type":60,"value":912},{"type":54,"tag":875,"props":974,"children":975},{"style":904},[976],{"type":60,"value":917},{"type":54,"tag":875,"props":978,"children":979},{"style":882},[980],{"type":60,"value":981},"   # → use tl.trans\u002Ftl.permute\n",{"type":54,"tag":875,"props":983,"children":985},{"class":877,"line":984},6,[986,990,994,999,1003,1007],{"type":54,"tag":875,"props":987,"children":988},{"style":892},[989],{"type":60,"value":895},{"type":54,"tag":875,"props":991,"children":992},{"style":898},[993],{"type":60,"value":901},{"type":54,"tag":875,"props":995,"children":996},{"style":904},[997],{"type":60,"value":998},"ct\\.astype",{"type":54,"tag":875,"props":1000,"children":1001},{"style":898},[1002],{"type":60,"value":912},{"type":54,"tag":875,"props":1004,"children":1005},{"style":904},[1006],{"type":60,"value":917},{"type":54,"tag":875,"props":1008,"children":1009},{"style":882},[1010],{"type":60,"value":1011},"                    # → use .to(dtype)\n",{"type":54,"tag":875,"props":1013,"children":1015},{"class":877,"line":1014},7,[1016,1020,1024,1029,1033,1037],{"type":54,"tag":875,"props":1017,"children":1018},{"style":892},[1019],{"type":60,"value":895},{"type":54,"tag":875,"props":1021,"children":1022},{"style":898},[1023],{"type":60,"value":901},{"type":54,"tag":875,"props":1025,"children":1026},{"style":904},[1027],{"type":60,"value":1028},"ct\\.load\\|ct\\.store",{"type":54,"tag":875,"props":1030,"children":1031},{"style":898},[1032],{"type":60,"value":912},{"type":54,"tag":875,"props":1034,"children":1035},{"style":904},[1036],{"type":60,"value":917},{"type":54,"tag":875,"props":1038,"children":1039},{"style":882},[1040],{"type":60,"value":1041},"          # → TMA for 2D+ (tl.make_tensor_descriptor), NOT raw tl.load(ptr+offs)\n",{"type":54,"tag":875,"props":1043,"children":1045},{"class":877,"line":1044},8,[1046,1050,1054,1059,1063,1067],{"type":54,"tag":875,"props":1047,"children":1048},{"style":892},[1049],{"type":60,"value":895},{"type":54,"tag":875,"props":1051,"children":1052},{"style":898},[1053],{"type":60,"value":901},{"type":54,"tag":875,"props":1055,"children":1056},{"style":904},[1057],{"type":60,"value":1058},"ct\\.launch",{"type":54,"tag":875,"props":1060,"children":1061},{"style":898},[1062],{"type":60,"value":912},{"type":54,"tag":875,"props":1064,"children":1065},{"style":904},[1066],{"type":60,"value":917},{"type":54,"tag":875,"props":1068,"children":1069},{"style":882},[1070],{"type":60,"value":1071},"                    # → bracket launch: kernel then [grid] then (args)\n",{"type":54,"tag":875,"props":1073,"children":1075},{"class":877,"line":1074},9,[1076,1080,1084,1089,1093,1097],{"type":54,"tag":875,"props":1077,"children":1078},{"style":892},[1079],{"type":60,"value":895},{"type":54,"tag":875,"props":1081,"children":1082},{"style":898},[1083],{"type":60,"value":901},{"type":54,"tag":875,"props":1085,"children":1086},{"style":904},[1087],{"type":60,"value":1088},"ct\\.Constant\\|ct\\.ConstInt",{"type":54,"tag":875,"props":1090,"children":1091},{"style":898},[1092],{"type":60,"value":912},{"type":54,"tag":875,"props":1094,"children":1095},{"style":904},[1096],{"type":60,"value":917},{"type":54,"tag":875,"props":1098,"children":1099},{"style":882},[1100],{"type":60,"value":1101},"    # → tl.constexpr\n",{"type":54,"tag":875,"props":1103,"children":1105},{"class":877,"line":1104},10,[1106,1110,1114,1119,1123,1127],{"type":54,"tag":875,"props":1107,"children":1108},{"style":892},[1109],{"type":60,"value":895},{"type":54,"tag":875,"props":1111,"children":1112},{"style":898},[1113],{"type":60,"value":901},{"type":54,"tag":875,"props":1115,"children":1116},{"style":904},[1117],{"type":60,"value":1118},"ct\\.cdiv",{"type":54,"tag":875,"props":1120,"children":1121},{"style":898},[1122],{"type":60,"value":912},{"type":54,"tag":875,"props":1124,"children":1125},{"style":904},[1126],{"type":60,"value":917},{"type":54,"tag":875,"props":1128,"children":1129},{"style":882},[1130],{"type":60,"value":1131},"                      # → triton.cdiv (host) or Python (a+b-1)\u002F\u002Fb\n",{"type":54,"tag":875,"props":1133,"children":1135},{"class":877,"line":1134},11,[1136,1140,1144,1149,1153,1157],{"type":54,"tag":875,"props":1137,"children":1138},{"style":892},[1139],{"type":60,"value":895},{"type":54,"tag":875,"props":1141,"children":1142},{"style":898},[1143],{"type":60,"value":901},{"type":54,"tag":875,"props":1145,"children":1146},{"style":904},[1147],{"type":60,"value":1148},"ct\\.bid\\|ct\\.num_blocks",{"type":54,"tag":875,"props":1150,"children":1151},{"style":898},[1152],{"type":60,"value":912},{"type":54,"tag":875,"props":1154,"children":1155},{"style":904},[1156],{"type":60,"value":917},{"type":54,"tag":875,"props":1158,"children":1159},{"style":882},[1160],{"type":60,"value":1161},"       # → tl.program_id\u002Ftl.num_programs\n",{"type":54,"tag":875,"props":1163,"children":1165},{"class":877,"line":1164},12,[1166,1170,1174,1179,1183,1187],{"type":54,"tag":875,"props":1167,"children":1168},{"style":892},[1169],{"type":60,"value":895},{"type":54,"tag":875,"props":1171,"children":1172},{"style":898},[1173],{"type":60,"value":901},{"type":54,"tag":875,"props":1175,"children":1176},{"style":904},[1177],{"type":60,"value":1178},"1 \u003C\u003C .*\\.bit_length",{"type":54,"tag":875,"props":1180,"children":1181},{"style":898},[1182],{"type":60,"value":912},{"type":54,"tag":875,"props":1184,"children":1185},{"style":904},[1186],{"type":60,"value":917},{"type":54,"tag":875,"props":1188,"children":1189},{"style":882},[1190],{"type":60,"value":1191},"           # → triton.next_power_of_2 if needed\n",{"type":54,"tag":875,"props":1193,"children":1195},{"class":877,"line":1194},13,[1196,1200,1204,1209,1213,1217],{"type":54,"tag":875,"props":1197,"children":1198},{"style":892},[1199],{"type":60,"value":895},{"type":54,"tag":875,"props":1201,"children":1202},{"style":898},[1203],{"type":60,"value":901},{"type":54,"tag":875,"props":1205,"children":1206},{"style":904},[1207],{"type":60,"value":1208},"transpose\\|transpose_v",{"type":54,"tag":875,"props":1210,"children":1211},{"style":898},[1212],{"type":60,"value":912},{"type":54,"tag":875,"props":1214,"children":1215},{"style":904},[1216],{"type":60,"value":917},{"type":54,"tag":875,"props":1218,"children":1219},{"style":882},[1220],{"type":60,"value":1221},"       # → if hit, read translations\u002Fadvanced-patterns.md (dual kernels + META grid)\n",{"type":54,"tag":120,"props":1223,"children":1225},{"id":1224},"conversion-checklist",[1226],{"type":60,"value":379},{"type":54,"tag":63,"props":1228,"children":1229},{},[1230],{"type":60,"value":1231},"Copy this checklist and track progress:",{"type":54,"tag":864,"props":1233,"children":1237},{"className":1234,"code":1236,"language":60},[1235],"language-text","Conversion Progress:\n [ ] Step 0 (attention \u002F Gemma FMHA \u002F GQA \u002F soft cap \u002F sliding window): Read [references\u002Foptimization-strategy.md](.\u002Freferences\u002Foptimization-strategy.md) and apply §4 checklist before inner-loop Triton\n [ ] Step 1: Pre-flight — run grep commands above, note special patterns and 2D+ loads (→ TMA)\n [ ] Step 2: Analyze source cuTile kernel (identify patterns, shapes, dtypes)\n [ ] Step 3: Create Triton file with correct structure (see translations\u002Ffile-structure.md)\n [ ] Step 4: Convert kernel signature (tensor args → pointer args, Constant → constexpr)\n [ ] Step 4b: TMA (MANDATORY for 2D+ loads) — use tl.make_tensor_descriptor for every 2D+ tile load\u002Fstore; do NOT ship raw tl.load(ptr+offs,mask) for block-shaped access (see workflow.md § TMA OPTIMIZATION)\n [ ] Step 5: Convert kernel body (apply gotchas table below + API mapping)\n [ ] Step 6: Convert host wrapper (grid tuple\u002Flambda, bracket-style launch: kernel, grid, then arguments; no ct.launch); call triton.set_allocator(alloc_fn) if using TMA\n [ ] Step 7: Validate — run pytest or syntax check on Triton file\n [ ] Step 8: Test — run pytest, verify X passed 0 failed\n [ ] Step 9: If test fails → fix → re-validate → re-test (loop until green)\n [ ] Step 10: Benchmark — run perf test, compare vs cuTile (see workflow.md § PERFORMANCE ANALYSIS)\n [ ] Step 10b: If GEMM\u002FBMM\u002Fattention and Triton &gt;20% slower → walk [references\u002Foptimization-strategy.md](.\u002Freferences\u002Foptimization-strategy.md) §2–§3 then [references\u002Foptimizing-reference.md](.\u002Freferences\u002Foptimizing-reference.md) (EVEN_K, transpose, grid, autotune, epilogue subtile), then re-benchmark\n [ ] Step 10c: If op has `transpose` \u002F layout flag → read [translations\u002Fadvanced-patterns.md](.\u002Ftranslations\u002Fadvanced-patterns.md); verify **separate kernels** per layout (not transpose-kernel + `tl.trans`); **autotuned** launches use `lambda META: (triton.cdiv(..., META[\"BLOCK_H\"]), ...)` — no fixed `BLOCK_H`\u002F`BLOCK_N` through `apply()` unless autotune is disabled\n\nPost-conversion Verification (TMA is mandatory for 2D+ loads):\n [ ] TMA: All 2D+ tile loads use tl.make_tensor_descriptor(...).load([...]); no raw ptr+mask for block-shaped 2D+ access (else 5x-20x regression)\n [ ] Grid uses tuple or lambda (not 3-tuple required like cuTile)\n [ ] Triton autotune added if cuTile op used kernel_configs\u002Fautotune (see workflow § PERFORMANCE ANALYSIS)\n [ ] Host grid uses triton.cdiv where appropriate (not (a+b-1)\u002F\u002Fb only)\n [ ] Pointer\u002Foffset indexing: Triton uses element offsets (ptr + offs), not block index in tl.load (or use TMA descriptor)\n [ ] ct.astype(x, dtype) → x.to(dtype) in Triton\n [ ] ct.mma(a, b, acc=acc) → tl.dot(a, b, acc) (no keyword in Triton)\n [ ] Optional\u002FNone args: Triton allows None in kernel args if desired (cuTile required dummy+flag)\n [ ] Masking applied when BLOCK_SIZE > actual dimension (same as cuTile); with TMA, masks can often be removed for full tiles\n [ ] Reduction divisor uses actual_size, NOT BLOCK_SIZE\n [ ] fp32\u002Ftf32: Triton defaults allow_tf32=True; match cuTile behavior if you had explicit tf32 cast\n [ ] If any 2D+ load uses raw ptr+mask (exception only): document WHY TMA was not used\n [ ] tl.assume() alignment hints added for strides and pointers\n",[1238],{"type":54,"tag":69,"props":1239,"children":1240},{"__ignoreMap":869},[1241],{"type":60,"value":1236},{"type":54,"tag":120,"props":1243,"children":1245},{"id":1244},"gotchas-most-common-translation-errors-gotchas-most-common-translation-errors",[1246],{"type":60,"value":1247},"Gotchas (Most Common Translation Errors) {#gotchas-most-common-translation-errors}",{"type":54,"tag":63,"props":1249,"children":1250},{},[1251,1253,1258,1260,1265,1267],{"type":60,"value":1252},"Comprehensive table of patterns that frequently break or regress when porting ",{"type":54,"tag":69,"props":1254,"children":1256},{"className":1255},[],[1257],{"type":60,"value":74},{"type":60,"value":1259}," to ",{"type":54,"tag":69,"props":1261,"children":1263},{"className":1262},[],[1264],{"type":60,"value":82},{"type":60,"value":1266}," — ",{"type":54,"tag":98,"props":1268,"children":1269},{},[1270],{"type":60,"value":1271},"mma accumulator, type cast, grid, TMA usage, dtype handling, layout flags, batched matmul, etc.",{"type":54,"tag":63,"props":1273,"children":1274},{},[1275,1280,1281,1287],{"type":54,"tag":140,"props":1276,"children":1277},{},[1278],{"type":60,"value":1279},"See:",{"type":60,"value":196},{"type":54,"tag":86,"props":1282,"children":1284},{"href":1283},".\u002Freferences\u002Fgotchas.md",[1285],{"type":60,"value":1286},"references\u002Fgotchas.md",{"type":60,"value":1288}," — read this BEFORE writing the Triton kernel.",{"type":54,"tag":120,"props":1290,"children":1292},{"id":1291},"performance-gotchas-10-50x-regression-risk-performance-gotchas-10-50x-regression-risk",[1293],{"type":60,"value":1294},"Performance Gotchas (10-50x Regression Risk) {#performance-gotchas-10-50x-regression-risk}",{"type":54,"tag":63,"props":1296,"children":1297},{},[1298],{"type":54,"tag":140,"props":1299,"children":1300},{},[1301],{"type":60,"value":1302},"⚠️ These cause CATASTROPHIC slowdowns. Check BEFORE benchmarking.",{"type":54,"tag":63,"props":1304,"children":1305},{},[1306,1308,1314,1316,1322],{"type":60,"value":1307},"Patterns and their impact: TMA vs raw ptr+mask (5-20×), autotune vs fixed tile sizes (2-3×), ",{"type":54,"tag":69,"props":1309,"children":1311},{"className":1310},[],[1312],{"type":60,"value":1313},"broadcast_to + tl.dot",{"type":60,"value":1315}," (10-50×), ",{"type":54,"tag":69,"props":1317,"children":1319},{"className":1318},[],[1320],{"type":60,"value":1321},"extract_slice",{"type":60,"value":1323}," chains (2-5×), and more.",{"type":54,"tag":63,"props":1325,"children":1326},{},[1327,1331,1332,1338],{"type":54,"tag":140,"props":1328,"children":1329},{},[1330],{"type":60,"value":1279},{"type":60,"value":196},{"type":54,"tag":86,"props":1333,"children":1335},{"href":1334},".\u002Freferences\u002Fperformance-gotchas.md",[1336],{"type":60,"value":1337},"references\u002Fperformance-gotchas.md",{"type":60,"value":1339}," — full regression-risk table.",{"type":54,"tag":63,"props":1341,"children":1342},{},[1343,1348,1349,1353,1354,1358],{"type":54,"tag":140,"props":1344,"children":1345},{},[1346],{"type":60,"value":1347},"Full details:",{"type":60,"value":196},{"type":54,"tag":86,"props":1350,"children":1351},{"href":133},[1352],{"type":60,"value":136},{"type":60,"value":806},{"type":54,"tag":140,"props":1355,"children":1356},{},[1357],{"type":60,"value":811},{"type":60,"value":363},{"type":54,"tag":63,"props":1360,"children":1361},{},[1362,1364,1368],{"type":60,"value":1363},"Full API mapping: ",{"type":54,"tag":86,"props":1365,"children":1366},{"href":88},[1367],{"type":60,"value":91},{"type":60,"value":363},{"type":54,"tag":63,"props":1370,"children":1371},{},[1372,1374,1378,1379,1384],{"type":60,"value":1373},"Triton math dtype (erf\u002Ferfc\u002Fexp\u002Flog\u002Fsqrt) and the \"don't substitute erf with tanh\" pattern: ",{"type":54,"tag":86,"props":1375,"children":1376},{"href":358},[1377],{"type":60,"value":361},{"type":60,"value":806},{"type":54,"tag":140,"props":1380,"children":1381},{},[1382],{"type":60,"value":1383},"Triton Math Function Dtype Requirements (CRITICAL)",{"type":60,"value":363},{"type":54,"tag":120,"props":1386,"children":1388},{"id":1387},"optimization-strategy-hub",[1389],{"type":60,"value":1390},"Optimization strategy (hub)",{"type":54,"tag":63,"props":1392,"children":1393},{},[1394,1399,1400],{"type":54,"tag":140,"props":1395,"children":1396},{},[1397],{"type":60,"value":1398},"File:",{"type":60,"value":196},{"type":54,"tag":86,"props":1401,"children":1402},{"href":191},[1403],{"type":60,"value":194},{"type":54,"tag":63,"props":1405,"children":1406},{},[1407,1409,1416,1418,1423,1425,1432,1434,1439,1441,1446],{"type":60,"value":1408},"Summarizes ",{"type":54,"tag":140,"props":1410,"children":1411},{},[1412],{"type":54,"tag":86,"props":1413,"children":1414},{"href":257},[1415],{"type":60,"value":260},{"type":60,"value":1417}," (layout flags, dual kernels, autotune+",{"type":54,"tag":69,"props":1419,"children":1421},{"className":1420},[],[1422],{"type":60,"value":273},{"type":60,"value":1424},", batched launch, Blackwell pointers) and ",{"type":54,"tag":140,"props":1426,"children":1427},{},[1428],{"type":54,"tag":86,"props":1429,"children":1430},{"href":483},[1431],{"type":60,"value":486},{"type":60,"value":1433}," (post-TMA micro-opts, §9) into ",{"type":54,"tag":140,"props":1435,"children":1436},{},[1437],{"type":60,"value":1438},"§1–§3",{"type":60,"value":1440}," plus a ",{"type":54,"tag":140,"props":1442,"children":1443},{},[1444],{"type":60,"value":1445},"mandatory §4 Gemma FMHA checklist",{"type":60,"value":363},{"type":54,"tag":63,"props":1448,"children":1449},{},[1450,1455,1457,1462,1464,1469,1471,1476],{"type":54,"tag":140,"props":1451,"children":1452},{},[1453],{"type":60,"value":1454},"Rule:",{"type":60,"value":1456}," For ",{"type":54,"tag":140,"props":1458,"children":1459},{},[1460],{"type":60,"value":1461},"attention \u002F FMHA \u002F Gemma-style",{"type":60,"value":1463}," conversions, open ",{"type":54,"tag":140,"props":1465,"children":1466},{},[1467],{"type":60,"value":1468},"optimization-strategy",{"type":60,"value":1470}," in the same session as ",{"type":54,"tag":140,"props":1472,"children":1473},{},[1474],{"type":60,"value":1475},"workflow",{"type":60,"value":1477}," — do not rely on TMA alone for perf sign-off.",{"type":54,"tag":120,"props":1479,"children":1481},{"id":1480},"reference-documents-reference-documents",[1482],{"type":60,"value":1483},"Reference Documents {#reference-documents}",{"type":54,"tag":63,"props":1485,"children":1486},{},[1487,1489,1494],{"type":60,"value":1488},"Read from ",{"type":54,"tag":140,"props":1490,"children":1491},{},[1492],{"type":60,"value":1493},"cuTile → Triton",{"type":60,"value":1495}," perspective. Core files live in this skill under ``.",{"type":54,"tag":1497,"props":1498,"children":1499},"table",{},[1500,1524],{"type":54,"tag":1501,"props":1502,"children":1503},"thead",{},[1504],{"type":54,"tag":1505,"props":1506,"children":1507},"tr",{},[1508,1514,1519],{"type":54,"tag":1509,"props":1510,"children":1511},"th",{},[1512],{"type":60,"value":1513},"Category",{"type":54,"tag":1509,"props":1515,"children":1516},{},[1517],{"type":60,"value":1518},"Document",{"type":54,"tag":1509,"props":1520,"children":1521},{},[1522],{"type":60,"value":1523},"Content",{"type":54,"tag":1525,"props":1526,"children":1527},"tbody",{},[1528,1566,1589,1607,1638,1662,1686,1715,1739],{"type":54,"tag":1505,"props":1529,"children":1530},{},[1531,1540,1551],{"type":54,"tag":1532,"props":1533,"children":1534},"td",{},[1535],{"type":54,"tag":140,"props":1536,"children":1537},{},[1538],{"type":60,"value":1539},"Strategy",{"type":54,"tag":1532,"props":1541,"children":1542},{},[1543],{"type":54,"tag":140,"props":1544,"children":1545},{},[1546],{"type":54,"tag":86,"props":1547,"children":1548},{"href":191},[1549],{"type":60,"value":1550},"optimization-strategy.md",{"type":54,"tag":1532,"props":1552,"children":1553},{},[1554,1559,1561],{"type":54,"tag":140,"props":1555,"children":1556},{},[1557],{"type":60,"value":1558},"Ordered hub:",{"type":60,"value":1560}," advanced-patterns + optimizing-reference; ",{"type":54,"tag":140,"props":1562,"children":1563},{},[1564],{"type":60,"value":1565},"§4 Gemma FMHA mandatory checklist",{"type":54,"tag":1505,"props":1567,"children":1568},{},[1569,1577,1584],{"type":54,"tag":1532,"props":1570,"children":1571},{},[1572],{"type":54,"tag":140,"props":1573,"children":1574},{},[1575],{"type":60,"value":1576},"Workflows",{"type":54,"tag":1532,"props":1578,"children":1579},{},[1580],{"type":54,"tag":86,"props":1581,"children":1582},{"href":136},[1583],{"type":60,"value":136},{"type":54,"tag":1532,"props":1585,"children":1586},{},[1587],{"type":60,"value":1588},"Standard c2t conversion (phases + checklist)",{"type":54,"tag":1505,"props":1590,"children":1591},{},[1592,1595,1602],{"type":54,"tag":1532,"props":1593,"children":1594},{},[],{"type":54,"tag":1532,"props":1596,"children":1597},{},[1598],{"type":54,"tag":86,"props":1599,"children":1600},{"href":384},[1601],{"type":60,"value":384},{"type":54,"tag":1532,"props":1603,"children":1604},{},[1605],{"type":60,"value":1606},"Where to place Triton files when converting from cuTile",{"type":54,"tag":1505,"props":1608,"children":1609},{},[1610,1613,1623],{"type":54,"tag":1532,"props":1611,"children":1612},{},[],{"type":54,"tag":1532,"props":1614,"children":1615},{},[1616],{"type":54,"tag":140,"props":1617,"children":1618},{},[1619],{"type":54,"tag":86,"props":1620,"children":1621},{"href":257},[1622],{"type":60,"value":260},{"type":54,"tag":1532,"props":1624,"children":1625},{},[1626],{"type":54,"tag":140,"props":1627,"children":1628},{},[1629,1631,1636],{"type":60,"value":1630},"Dual layout flags (transpose), autotune + ",{"type":54,"tag":69,"props":1632,"children":1634},{"className":1633},[],[1635],{"type":60,"value":273},{"type":60,"value":1637}," grid, MLA-style two kernels",{"type":54,"tag":1505,"props":1639,"children":1640},{},[1641,1649,1657],{"type":54,"tag":1532,"props":1642,"children":1643},{},[1644],{"type":54,"tag":140,"props":1645,"children":1646},{},[1647],{"type":60,"value":1648},"API",{"type":54,"tag":1532,"props":1650,"children":1651},{},[1652],{"type":54,"tag":86,"props":1653,"children":1654},{"href":88},[1655],{"type":60,"value":1656},"api-mapping.md",{"type":54,"tag":1532,"props":1658,"children":1659},{},[1660],{"type":60,"value":1661},"cuTile → Triton mapping",{"type":54,"tag":1505,"props":1663,"children":1664},{},[1665,1668,1676],{"type":54,"tag":1532,"props":1666,"children":1667},{},[],{"type":54,"tag":1532,"props":1669,"children":1670},{},[1671],{"type":54,"tag":86,"props":1672,"children":1673},{"href":483},[1674],{"type":60,"value":1675},"optimizing-reference.md",{"type":54,"tag":1532,"props":1677,"children":1678},{},[1679,1684],{"type":54,"tag":140,"props":1680,"children":1681},{},[1682],{"type":60,"value":1683},"GEMM\u002FBMM\u002Fattention optimizations",{"type":60,"value":1685}," (EVEN_K, transpose, grid, autotune, epilogue subtile)",{"type":54,"tag":1505,"props":1687,"children":1688},{},[1689,1697,1705],{"type":54,"tag":1532,"props":1690,"children":1691},{},[1692],{"type":54,"tag":140,"props":1693,"children":1694},{},[1695],{"type":60,"value":1696},"Gotchas",{"type":54,"tag":1532,"props":1698,"children":1699},{},[1700],{"type":54,"tag":86,"props":1701,"children":1702},{"href":1283},[1703],{"type":60,"value":1704},"gotchas.md",{"type":54,"tag":1532,"props":1706,"children":1707},{},[1708,1713],{"type":54,"tag":140,"props":1709,"children":1710},{},[1711],{"type":60,"value":1712},"Common cuTile→Triton translation errors",{"type":60,"value":1714}," (mma, dtype, grid, TMA, layout flags)",{"type":54,"tag":1505,"props":1716,"children":1717},{},[1718,1721,1729],{"type":54,"tag":1532,"props":1719,"children":1720},{},[],{"type":54,"tag":1532,"props":1722,"children":1723},{},[1724],{"type":54,"tag":86,"props":1725,"children":1726},{"href":1334},[1727],{"type":60,"value":1728},"performance-gotchas.md",{"type":54,"tag":1532,"props":1730,"children":1731},{},[1732,1737],{"type":54,"tag":140,"props":1733,"children":1734},{},[1735],{"type":60,"value":1736},"10-50× regression-risk table",{"type":60,"value":1738}," (TMA vs ptr+mask, broadcast_to, extract_slice chains, autotune)",{"type":54,"tag":1505,"props":1740,"children":1741},{},[1742,1750,1757],{"type":54,"tag":1532,"props":1743,"children":1744},{},[1745],{"type":54,"tag":140,"props":1746,"children":1747},{},[1748],{"type":60,"value":1749},"Testing & errors",{"type":54,"tag":1532,"props":1751,"children":1752},{},[1753],{"type":54,"tag":86,"props":1754,"children":1755},{"href":358},[1756],{"type":60,"value":361},{"type":54,"tag":1532,"props":1758,"children":1759},{},[1760,1765],{"type":54,"tag":140,"props":1761,"children":1762},{},[1763],{"type":60,"value":1764},"Triton runtime errors",{"type":60,"value":1766}," (cudaErrorIllegalAddress, pointer type, stride overflow)",{"type":54,"tag":120,"props":1768,"children":1770},{"id":1769},"worked-examples",[1771],{"type":60,"value":1772},"Worked Examples",{"type":54,"tag":63,"props":1774,"children":1775},{},[1776,1778,1783,1784,1789],{"type":60,"value":1777},"Use ",{"type":54,"tag":140,"props":1779,"children":1780},{},[1781],{"type":60,"value":1782},"cutile_kernel.py as source",{"type":60,"value":480},{"type":54,"tag":140,"props":1785,"children":1786},{},[1787],{"type":60,"value":1788},"triton_kernel.py as target",{"type":60,"value":1790},":",{"type":54,"tag":1497,"props":1792,"children":1793},{},[1794,1815],{"type":54,"tag":1501,"props":1795,"children":1796},{},[1797],{"type":54,"tag":1505,"props":1798,"children":1799},{},[1800,1805,1810],{"type":54,"tag":1509,"props":1801,"children":1802},{},[1803],{"type":60,"value":1804},"Example",{"type":54,"tag":1509,"props":1806,"children":1807},{},[1808],{"type":60,"value":1809},"Directory",{"type":54,"tag":1509,"props":1811,"children":1812},{},[1813],{"type":60,"value":1814},"Complexity",{"type":54,"tag":1525,"props":1816,"children":1817},{},[1818,1839,1860,1880,1901],{"type":54,"tag":1505,"props":1819,"children":1820},{},[1821,1826,1834],{"type":54,"tag":1532,"props":1822,"children":1823},{},[1824],{"type":60,"value":1825},"Vector Add",{"type":54,"tag":1532,"props":1827,"children":1828},{},[1829],{"type":54,"tag":86,"props":1830,"children":1832},{"href":1831},"examples\u002F01_vector_add\u002F",[1833],{"type":60,"value":1831},{"type":54,"tag":1532,"props":1835,"children":1836},{},[1837],{"type":60,"value":1838},"Basic",{"type":54,"tag":1505,"props":1840,"children":1841},{},[1842,1847,1855],{"type":54,"tag":1532,"props":1843,"children":1844},{},[1845],{"type":60,"value":1846},"Softmax",{"type":54,"tag":1532,"props":1848,"children":1849},{},[1850],{"type":54,"tag":86,"props":1851,"children":1853},{"href":1852},"examples\u002F02_softmax\u002F",[1854],{"type":60,"value":1852},{"type":54,"tag":1532,"props":1856,"children":1857},{},[1858],{"type":60,"value":1859},"Intermediate",{"type":54,"tag":1505,"props":1861,"children":1862},{},[1863,1868,1876],{"type":54,"tag":1532,"props":1864,"children":1865},{},[1866],{"type":60,"value":1867},"LayerNorm",{"type":54,"tag":1532,"props":1869,"children":1870},{},[1871],{"type":54,"tag":86,"props":1872,"children":1874},{"href":1873},"examples\u002F03_layernorm\u002F",[1875],{"type":60,"value":1873},{"type":54,"tag":1532,"props":1877,"children":1878},{},[1879],{"type":60,"value":1859},{"type":54,"tag":1505,"props":1881,"children":1882},{},[1883,1888,1896],{"type":54,"tag":1532,"props":1884,"children":1885},{},[1886],{"type":60,"value":1887},"MatMul",{"type":54,"tag":1532,"props":1889,"children":1890},{},[1891],{"type":54,"tag":86,"props":1892,"children":1894},{"href":1893},"examples\u002F04_matmul\u002F",[1895],{"type":60,"value":1893},{"type":54,"tag":1532,"props":1897,"children":1898},{},[1899],{"type":60,"value":1900},"Advanced",{"type":54,"tag":1505,"props":1902,"children":1903},{},[1904,1909,1917],{"type":54,"tag":1532,"props":1905,"children":1906},{},[1907],{"type":60,"value":1908},"Attention",{"type":54,"tag":1532,"props":1910,"children":1911},{},[1912],{"type":54,"tag":86,"props":1913,"children":1915},{"href":1914},"examples\u002F05_attention\u002F",[1916],{"type":60,"value":1914},{"type":54,"tag":1532,"props":1918,"children":1919},{},[1920],{"type":60,"value":1900},{"type":54,"tag":63,"props":1922,"children":1923},{},[1924,1926,1932,1934,1940],{"type":60,"value":1925},"Read ",{"type":54,"tag":69,"props":1927,"children":1929},{"className":1928},[],[1930],{"type":60,"value":1931},"cutile_kernel.py",{"type":60,"value":1933}," first, then ",{"type":54,"tag":69,"props":1935,"children":1937},{"className":1936},[],[1938],{"type":60,"value":1939},"triton_kernel.py",{"type":60,"value":1941},", to see the inverse mapping.",{"type":54,"tag":120,"props":1943,"children":1945},{"id":1944},"️-mandatory-completion-checklist-do-not-skip",[1946],{"type":60,"value":1947},"⚠️ MANDATORY COMPLETION CHECKLIST (DO NOT SKIP)",{"type":54,"tag":63,"props":1949,"children":1950},{},[1951],{"type":54,"tag":140,"props":1952,"children":1953},{},[1954],{"type":60,"value":1955},"A conversion is NOT COMPLETE until ALL items are checked. Copy and complete:",{"type":54,"tag":864,"props":1957,"children":1960},{"className":1958,"code":1959,"language":60},[1235],"MANDATORY COMPLETION GATES:\n [ ] 1. CORRECTNESS: pytest passes with 0 failures\n     Command: python -m pytest {test_path} -k \"test_op and triton\" -vs --tb=short\n     Gate: \"X passed, 0 failed\"\n\n [ ] 2. TMA OPTIMIZATION: All 2D+ tile loads use tl.make_tensor_descriptor\n     Verify: grep -n \"tl.load.*mask\" triton_file.py | wc -l  # Should be 0 for 2D+ ops\n     Skip = 5-20x performance regression\n\n [ ] 3. PERFORMANCE TEST: Triton within 20% of cuTile baseline\n     Command: python -m pytest {test_path} -k \"test_perf\" --print-record -v\n     OR: Run benchmark script: cd tests\u002Fbenchmark && python bench_{op}.py\n     Gate: Triton TFLOPS >= 0.8 * CuTile TFLOPS\n\n [ ] 4. PERFORMANCE COMPARISON RECORDED:\n     Document results:\n     | Config | Triton (TFLOPS) | CuTile (TFLOPS) | Ratio |\n     |--------|-----------------|-----------------|-------|\n     | [fill] | [fill]          | [fill]          | [fill]|\n\nCONVERSION COMPLETE: All 4 gates passed? → YES \u002F NO\n",[1961],{"type":54,"tag":69,"props":1962,"children":1963},{"__ignoreMap":869},[1964],{"type":60,"value":1959},{"type":54,"tag":63,"props":1966,"children":1967},{},[1968],{"type":54,"tag":140,"props":1969,"children":1970},{},[1971],{"type":60,"value":1972},"Why this matters:",{"type":54,"tag":518,"props":1974,"children":1975},{},[1976,1981,1986,1991],{"type":54,"tag":161,"props":1977,"children":1978},{},[1979],{"type":60,"value":1980},"Gate 1 catches functional bugs",{"type":54,"tag":161,"props":1982,"children":1983},{},[1984],{"type":60,"value":1985},"Gate 2 prevents catastrophic 5-20x regressions (most common mistake)",{"type":54,"tag":161,"props":1987,"children":1988},{},[1989],{"type":60,"value":1990},"Gate 3 validates that optimization was effective",{"type":54,"tag":161,"props":1992,"children":1993},{},[1994],{"type":60,"value":1995},"Gate 4 creates accountability record",{"type":54,"tag":63,"props":1997,"children":1998},{},[1999,2004],{"type":54,"tag":140,"props":2000,"children":2001},{},[2002],{"type":60,"value":2003},"If any gate fails:",{"type":60,"value":2005}," Fix and re-verify before declaring complete.",{"type":54,"tag":2007,"props":2008,"children":2009},"style",{},[2010],{"type":60,"value":2011},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":2013,"total":2115},[2014,2029,2043,2057,2069,2086,2101],{"slug":2015,"name":2015,"fn":2016,"description":2017,"org":2018,"tags":2019,"stars":22,"repoUrl":23,"updatedAt":2028},"accelerated-computing-cudf","accelerate data processing with cuDF","Official NVIDIA-authored guidance for NVIDIA cuDF GPU DataFrames, pandas acceleration, dask-cuDF, ETL, joins, groupby, CSV\u002FParquet I\u002FO, nullable semantics, and multi-GPU DataFrame workloads.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2020,2023,2026,2027],{"name":2021,"slug":2022,"type":15},"Data Analysis","data-analysis",{"name":2024,"slug":2025,"type":15},"Data Engineering","data-engineering",{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},"2026-07-14T05:28:43.176466",{"slug":2030,"name":2030,"fn":2031,"description":2032,"org":2033,"tags":2034,"stars":22,"repoUrl":23,"updatedAt":2042},"aiq-deploy","deploy and manage NVIDIA AI-Q infrastructure","Use when asked to install, deploy, run, validate, troubleshoot, or stop NVIDIA AI-Q Blueprint infrastructure.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2035,2038,2041],{"name":2036,"slug":2037,"type":15},"Deployment","deployment",{"name":2039,"slug":2040,"type":15},"Infrastructure","infrastructure",{"name":9,"slug":8,"type":15},"2026-07-14T05:29:06.667109",{"slug":2044,"name":2044,"fn":2045,"description":2046,"org":2047,"tags":2048,"stars":22,"repoUrl":23,"updatedAt":2056},"aiq-research","conduct deep research with AI-Q","Use when asked to run deep research or AI-Q research through a reachable NVIDIA AI-Q Blueprint backend.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2049,2052,2053],{"name":2050,"slug":2051,"type":15},"Agents","agents",{"name":9,"slug":8,"type":15},{"name":2054,"slug":2055,"type":15},"Research","research","2026-07-14T05:28:06.816956",{"slug":2058,"name":2058,"fn":2059,"description":2060,"org":2061,"tags":2062,"stars":22,"repoUrl":23,"updatedAt":2068},"amc-run-sample-calibration","run AMC sample dataset calibration","Run end-to-end calibration on the shipped sample dataset (sdg_08_2_sample_data_010926.zip) against a running AMC microservice. Use when user says 'test sample dataset', 'run sample calibration', 'verify AMC install', or 'launch and test'.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2063,2064,2065],{"name":2021,"slug":2022,"type":15},{"name":9,"slug":8,"type":15},{"name":2066,"slug":2067,"type":15},"Testing","testing","2026-07-17T05:29:03.913266",{"slug":2070,"name":2070,"fn":2071,"description":2072,"org":2073,"tags":2074,"stars":22,"repoUrl":23,"updatedAt":2085},"amc-run-video-calibration","calibrate video datasets with AutoMagicCalib","Calibrate a new dataset from pre-recorded video files via the AutoMagicCalib REST API. Use when user has local MP4s and says 'calibrate my videos', 'run AMC on these videos', or similar. For RTSP\u002Flive streams, use amc-run-rtsp-calibration instead.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2075,2078,2081,2082],{"name":2076,"slug":2077,"type":15},"Automation","automation",{"name":2079,"slug":2080,"type":15},"Imaging","imaging",{"name":9,"slug":8,"type":15},{"name":2083,"slug":2084,"type":15},"Video","video","2026-07-17T05:28:53.905004",{"slug":2087,"name":2087,"fn":2088,"description":2089,"org":2090,"tags":2091,"stars":22,"repoUrl":23,"updatedAt":2100},"amc-setup-calibration-stack","deploy AutoMagicCalib microservice with Docker","Launch AutoMagicCalib microservice and web UI from NGC release images via Docker Compose. Use when user says 'deploy auto calibration', 'launch auto calibration', 'launch AMC', 'start MS+UI', or 'set up auto-magic-calib'. Requires NGC API key.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2092,2093,2096,2097],{"name":2036,"slug":2037,"type":15},{"name":2094,"slug":2095,"type":15},"Docker","docker",{"name":9,"slug":8,"type":15},{"name":2098,"slug":2099,"type":15},"Operations","operations","2026-07-17T05:28:56.913999",{"slug":2102,"name":2102,"fn":2103,"description":2104,"org":2105,"tags":2106,"stars":22,"repoUrl":23,"updatedAt":2114},"cudaq-guide","develop quantum applications with CUDA-Q","CUDA-Q onboarding guide for installation, test programs, GPU simulation, QPU hardware, and quantum applications.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2107,2108,2111],{"name":9,"slug":8,"type":15},{"name":2109,"slug":2110,"type":15},"Quantum Computing","quantum-computing",{"name":2112,"slug":2113,"type":15},"Simulation","simulation","2026-07-14T05:26:58.898253",305,{"items":2117,"total":2266},[2118,2136,2152,2163,2175,2187,2200,2214,2225,2234,2248,2257],{"slug":2119,"name":2119,"fn":2120,"description":2121,"org":2122,"tags":2123,"stars":2133,"repoUrl":2134,"updatedAt":2135},"nemoclaw-user-guide","retrieve NemoClaw documentation and configuration","Guides human users' AI agents to the NemoClaw docs MCP server and canonical Fern documentation in Markdown form. Use when users ask how to install, configure, operate, troubleshoot, secure, or learn NemoClaw with an AI coding assistant. Trigger keywords - nemoclaw docs, use nemoclaw with ai agent, nemoclaw mcp docs, nemoclaw install help, nemoclaw quickstart, nemoclaw markdown docs, llms.txt, agent skills.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2124,2127,2130],{"name":2125,"slug":2126,"type":15},"Documentation","documentation",{"name":2128,"slug":2129,"type":15},"MCP","mcp",{"name":2131,"slug":2132,"type":15},"Search","search",21777,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FNemoClaw","2026-07-20T06:00:01.461044",{"slug":2137,"name":2137,"fn":2138,"description":2139,"org":2140,"tags":2141,"stars":2149,"repoUrl":2150,"updatedAt":2151},"mcore-build-and-dependency","manage Megatron-LM development environments","Container-based dev environment setup and dependency management for Megatron-LM. Covers acquiring and launching the CI container, uv package management, and updating uv.lock.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2142,2145,2146],{"name":2143,"slug":2144,"type":15},"Containers","containers",{"name":2036,"slug":2037,"type":15},{"name":2147,"slug":2148,"type":15},"Python","python",17049,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FMegatron-LM","2026-07-27T06:06:11.249662",{"slug":2153,"name":2153,"fn":2154,"description":2155,"org":2156,"tags":2157,"stars":2149,"repoUrl":2150,"updatedAt":2162},"mcore-bump-base-image","update NVIDIA PyTorch base images","Bump the NVIDIA PyTorch base image (`nvcr.io\u002Fnvidia\u002Fpytorch:YY.MM-py3`) used by Megatron-LM CI. Covers the two pin sites (GitHub CI in `docker\u002F.ngc_version.dev` and GitLab CI in `.gitlab\u002Fstages\u002F01.build.yml`), the post-bump CI loop (re-run functional tests, refresh golden values, mark broken tests), and the gotchas that bit PRs",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2158,2161],{"name":2159,"slug":2160,"type":15},"CI\u002FCD","ci-cd",{"name":2036,"slug":2037,"type":15},"2026-07-14T05:25:59.97109",{"slug":2164,"name":2164,"fn":2165,"description":2166,"org":2167,"tags":2168,"stars":2149,"repoUrl":2150,"updatedAt":2174},"mcore-cicd","manage CI\u002FCD pipelines for Megatron-LM","CI\u002FCD reference for Megatron-LM. Covers CI pipeline structure, PR scope labels, triggering internal GitLab CI (which force-pushes the current branch to a pull-request\u002FBRANCH ref — always dry-run and verify the destination first; never run against shared or protected branches), and CI failure investigation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2169,2170,2171],{"name":2159,"slug":2160,"type":15},{"name":2036,"slug":2037,"type":15},{"name":2172,"slug":2173,"type":15},"GitHub","github","2026-07-27T06:06:12.278222",{"slug":2176,"name":2176,"fn":2177,"description":2178,"org":2179,"tags":2180,"stars":2149,"repoUrl":2150,"updatedAt":2186},"mcore-create-issue","investigate CI failures and create issues","Investigate a failing GitHub Actions run or job and create a GitHub issue for the failure.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2181,2182,2183],{"name":20,"slug":21,"type":15},{"name":2172,"slug":2173,"type":15},{"name":2184,"slug":2185,"type":15},"Triage","triage","2026-07-14T05:25:57.442089",{"slug":2188,"name":2188,"fn":2189,"description":2190,"org":2191,"tags":2192,"stars":2149,"repoUrl":2150,"updatedAt":2199},"mcore-linting-and-formatting","lint and format Megatron-LM code","Linting and formatting for Megatron-LM. Covers running autoformat.sh, tools (ruff, black, isort, pylint, mypy), and code style rules.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2193,2196],{"name":2194,"slug":2195,"type":15},"Best Practices","best-practices",{"name":2197,"slug":2198,"type":15},"Code Analysis","code-analysis","2026-07-14T05:25:56.18433",{"slug":2201,"name":2201,"fn":2202,"description":2203,"org":2204,"tags":2205,"stars":2149,"repoUrl":2150,"updatedAt":2213},"mcore-migrate-gpt-to-hybrid","migrate Megatron-LM models to HybridModel","Migration guide for moving Megatron Core GPTModel checkpoints, model providers, training commands, and layer mappings to HybridModel.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2206,2209,2212],{"name":2207,"slug":2208,"type":15},"Machine Learning","machine-learning",{"name":2210,"slug":2211,"type":15},"Migration","migration",{"name":9,"slug":8,"type":15},"2026-07-17T06:07:11.777011",{"slug":2215,"name":2215,"fn":2216,"description":2217,"org":2218,"tags":2219,"stars":2149,"repoUrl":2150,"updatedAt":2224},"mcore-onboard-gb200-1node-tests","onboard functional tests for GB200","Onboard 1-node GitHub MR functional tests for GB200 from existing mr-scoped 2-node tests.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2220,2223],{"name":2221,"slug":2222,"type":15},"QA","qa",{"name":2066,"slug":2067,"type":15},"2026-07-14T05:25:53.673039",{"slug":2226,"name":2226,"fn":2227,"description":2228,"org":2229,"tags":2230,"stars":2149,"repoUrl":2150,"updatedAt":2233},"mcore-run-on-slurm","launch distributed training jobs on SLURM","How to launch distributed Megatron-LM training jobs on a SLURM cluster. Covers a minimal sbatch skeleton, environment-variable setup for torch.distributed.run, CUDA_DEVICE_MAX_CONNECTIONS rules across hardware and parallelism modes, container conventions, monitoring, and per-rank failure diagnosis.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2231,2232],{"name":2036,"slug":2037,"type":15},{"name":2039,"slug":2040,"type":15},"2026-07-14T05:25:49.362534",{"slug":2235,"name":2235,"fn":2236,"description":2237,"org":2238,"tags":2239,"stars":2149,"repoUrl":2150,"updatedAt":2247},"mcore-split-pr","split pull requests to reduce review load","Split a PR into multiple PRs to reduce the number of required CODEOWNERS reviewer groups.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2240,2243,2244],{"name":2241,"slug":2242,"type":15},"Code Review","code-review",{"name":2172,"slug":2173,"type":15},{"name":2245,"slug":2246,"type":15},"Pull Requests","pull-requests","2026-07-14T05:26:01.226578",{"slug":2249,"name":2249,"fn":2250,"description":2251,"org":2252,"tags":2253,"stars":2149,"repoUrl":2150,"updatedAt":2256},"mcore-testing","run and manage Megatron-LM tests","Test system for Megatron-LM. Covers test layout, recipe YAML structure, adding and running unit and functional tests, golden values, marker filters, and CI parity.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2254,2255],{"name":2221,"slug":2222,"type":15},{"name":2066,"slug":2067,"type":15},"2026-07-14T05:25:54.928983",{"slug":2258,"name":2258,"fn":2259,"description":2260,"org":2261,"tags":2262,"stars":2149,"repoUrl":2150,"updatedAt":2265},"nightly-sync","manage nightly main-to-dev sync workflows","Domain knowledge for the nightly main-to-dev sync workflow. Covers merge strategy, CI architecture, failure investigation, and known issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2263,2264],{"name":2076,"slug":2077,"type":15},{"name":2159,"slug":2160,"type":15},"2026-07-30T05:29:03.275638",496]