·
Last changedVersion:
This version passed the hardening gate. Hardening applied 8 targeted changes and preserved all other text. Classified findings before hardening: 7. Classified findings closed: 6. Classified findings remaining: 1. Unclassified scanner findings remaining: 0. Review findings closed: 11. Review findings remaining: 9.
1
2
4
1
Expand | File | Group | Subtype | Severity | Status |
|---|---|---|---|---|---|
references/ir-dump-guide.md | Tool & MCP Manipulation | Unauthorized tool use | High | Closed | |
references/cutile-api-reference.md | Malicious Code & Command Execution | — | Medium | Closed | |
BENCHMARK.md | Sensitive Data & Secret Exposure | Agent snooping | Medium | Closed | |
references/ir-dump-guide.md | Malicious Code & Command Execution | Command injection | Low | Closed | |
references/performance-model.md | Sensitive Data & Secret Exposure | Hardcoded secret | Low | Open | |
references/ir-dump-guide.md | Supply Chain & Install-Time Trust | Install-time download and execute | Low | Closed | |
references/ir-dump-guide.md | Malicious Code & Command Execution | — | Low | Closed |
7 findings
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:
Create a fresh git branch: Propose a branch name, e.g., cutile-perf-<kernel_name>-<date> from current branch. Checkout git checkout -b <branch name>
Locate the target kernel:
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)Classify the kernel:
Note: classification is only used to pick the optimization priority order in the experiment loop. The core metric is always latency (ms).
Check GPU environment:
Study related references:
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-referenceCreate @sandbox/perf_results.md to track progress. The first run will write a baseline
Confirm and go: Once you get confirmation, kick off the experimentation
Every 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 schedulingFor each iteration:
python -m pytest ... --print-record → extract latency (ms)Benchmark cmdlines:
latency sample:
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:
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:
Check git status: Current git branch/commit we're on
Select and apply ONE optimization from references/optimization-playbook.md:
Verify correctness — if fails, revert immediately. Common causes: flush_to_zero/rounding_mode=APPROX changed results, tile size OOB, allow_tma=False semantics, persistent loop bound error
Re-benchmark and compare against current baseline
Git commit
Record results to @sandbox/perf_results.md
Decision rules:
| Outcome | Action |
|---|---|
Improvement( | 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 | Escalate to user |
If keeping, advance the baseline numbers and continue loop
If reverting, 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.
Get started with chainctlchainctl skill install public/nvidia/tilegym-improve-cutile-kernel-perf:latest
Bring Chainguard's hardening pipeline to your first-party skills — custom rulesets, automated remediation, full audit trail.
skills.cgr.dev/public/github.com/nvidia/skills/tilegym-improve-cutile-kernel-perf:latest
Apache-2.0
BENCHMARK.md
HARDENING.md
SKILL.md
evals/evals.json
references/cutile-api-reference.md
references/cutile-patterns-reference.md
references/ir-dump-guide.md
references/optimization-playbook.md
references/perf-knobs-catalog.md
references/performance-model.md
skill-card.md
skill.oms.sig