nvidia/tilegym-improve-cutile-kernel-perf
Iteratively optimize cuTile kernel performance through systematic profiling, bottleneck analysis, IR comparison, and targeted tuning. Covers tile sizes, occupancy, autotune configs, TMA, latency hints, persistent scheduling, num_ctas, flush_to_zero, and IR-level debugging. Use when asked to "optimize cutile kernel", "improve kernel perf", "tune cutile performance", "make kernel faster", or iteratively benchmark and refine a cuTile GPU kernel in the TileGym project.
npx skills add https://github.com/NVIDIA/TileGym --skill tilegym-improve-cutile-kernel-perf
Systematically profile, diagnose bottlenecks, and iteratively tune a cuTile kernel's performance in the TileGym repository.
Follow the three phases in order: Setup the environment and baseline, run the Experimentation loop with a tracked log, then iterate The experiment loop until perf goals are met or further gains plateau.
Work with user to prepare optimization environment:
cutile-perf-<kernel_name>-<date> from current branch. Checkout git checkout -b <branch name>src/tilegym/suites/<suite>/cutile/ or src/tilegym/ops/cutile/@ct.kernel decorated function(s), the launch wrapper (ct.launch() or ct_experimental.autotune_launch()), the @register_impl registration, and current autotune configs (if any)Note: classification is only used to pick the optimization priority order in the experiment loop. The core metric is always latency (ms).
references/optimization-playbook.md: Step-by-step recipes for each optimization (A through J) with before/after code examplesreferences/perf-knobs-catalog.md: Complete catalog of all tunable parameters (TMA, persistent scheduling, occupancy, tile sizes, latency hints, etc.)references/cutile-api-reference.md: cuTile API reference and 18 critical rulesreferences/performance-model.md: Roofline/performance model, bottleneck diagnosis, autotuningreferences/ir-dump-guide.md: IR dump, analysis, and error diagnosisreferences/cutile-patterns-reference.md: Common cuTile patterns and conversion quick-referenceEvery experiment iteration applies ONE optimization to the target kernel, verifies correctness, re-benchmarks, and records results. Each iteration should be enforced to finish within 10 minutes.
latency (ms)latency (ms) shall not regress > 2% compared to baseline.src/tilegym/suites/<suite>/cutile/ or src/tilegym/ops/cutile/: kernel body, tile sizes, occupancy, num_ctas, TMA usage, latency hints, flush_to_zero, autotune configs, persistent scheduling, and other cuTile-specific parameterspython -m pytest tests/suites/.../test_<kernel_name>.py -k "test_ and cutile and not test_perf" -v
For each iteration:
python -m pytest ... --print-record → extract latency (ms)Benchmark cmdlines:
python -m pytest tests/suites/.../test_<kernel_name>.py -k "test_perf and cutile" --print-record -v
latency sample:
Cutile: {'forward': {'mean': 3.7903138461538455, 'std': 0.0016941310873207053, 'rel_std': 0.044696327430505396, 'median': 3.789880999999999, 'min': 3.7883389999999992, 'max': 3.7941230000000004, 'nrep': 13, 'peak_mem_mb': 913}} ms
Use @sandbox/perf_results.md to record each iteration's results. It should only contain a Markdown table with 5 columns:
iteration: iteration number, starting from 0 (baseline)optimization: what was applied (e.g., "baseline", "TMA replace gather", "persistent scheduling")latency_ms: kernel latency in milliseconds, six decimal pointscorrectness: PASS or FAILstatus: Whether this iteration was keep, revert, or crashExample content:
| iteration | optimization | latency_ms | correctness | status |
|----------:|:-------------------|-----------:|:------------|-------:|
| 0 | baseline | 0.820000 | PASS | keep |
| 1 | TMA replace gather | 0.390000 | PASS | keep |
Create the tabular header if the file was empty. Append one line for each iteration.
The first iteration (iteration 0) will not change any code and simply run the correctness test and performance benchmark. Results will be listed at the first row as baseline.
Core methodology is to apply ONE optimization per iteration from the playbook, verify correctness, benchmark, and decide whether to keep or revert. Try one optimization at a time, and have clean experiment records.
LOOP:
references/optimization-playbook.md:flush_to_zero/rounding_mode=APPROX changed results, tile size OOB, allow_tma=False semantics, persistent loop bound error| Outcome | Action |
|---------|--------|
| Improvement(latency (ms)) >= 5% | Accept as new baseline, continue |
| Improvement 2-5% | Accept, lower priority for next iteration |
| Improvement < 2% | Accept but stop unless user wants more |
| Regression on any config | Revert immediately, try next optimization |
| No improvement after 2 consecutive iterations | Stop |
| Root cause is scheduling or unknown | Escalate to user |
10. If reverting, git reset back to where you started and try the next optimization in priority order
UNTIL: all attempts are finished, or more than 25 iterations have occurred, or the user interrupts
*Be autonomous*: Ask user clarifications at setup phase. Once stepped into the experiment loop, do not pause to ask user feedback: Use your best judgement for decision making, consult the optimization playbook and perf knobs catalog promptly, and think harder if stuck.
Take nvidia/tilegym-improve-cutile-kernel-perf from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.