nvidia/compileiq-search-space
> Use when picking the search_space= argument for Search(). Covers the three provider classes (PtxasSearchSpace, NvccSearchSpace, LocalSearchSpaceBin), how to pin a version/variant/tag, the attention-focused 'att' variant for attention kernels (FlashAttention, GQA, MHA, MLA, FlashInfer Batch Decode), air-gapped mirroring via CIQ_SEARCH_SPACES_DIR, and custom user-defined search spaces built from compileiq.search_spaces.base primitives. Triggers on "search space", "PtxasSearchSpace", "NvccSearchSpace", "air-gapped compileiq", "offline compileiq", "CIQ_SEARCH_SPACES_DIR", "attention variant", "ptxas att".
npx skills add https://github.com/NVIDIA/CompileIQ --skill compileiq-search-space
CompileIQ ships compiler search spaces as release-backed binary blobs that
the providers in compileiq.search_spaces.compilers fetch on demand. This
skill covers the three provider classes, the variants they expose today,
how to use them offline, and how to define a custom search space for
non-compiler tuning.
.bin you have on hand.Reference: compileiq/search_spaces/compilers.py:66-102.
from compileiq.search_spaces.compilers import (
PtxasSearchSpace,
NvccSearchSpace,
LocalSearchSpaceBin,
)
# Default — auto-fetch latest PTXAS 13.3 default variant from GitHub releases
ss = PtxasSearchSpace()
# Pinned for reproducibility
ss = PtxasSearchSpace(version="13.3", variant="default", tag="search-spaces-2026.05")
# **Attention** workloads (FlashAttention / GQA / MHA / MLA / FlashInfer Batch Decode)
ss = PtxasSearchSpace(version="13.3", variant="att")
# NVCC variant for full-pipeline tuning
ss = NvccSearchSpace(version="13.3")
# Single .bin you already have on disk — skips manifest + network
ss = LocalSearchSpaceBin("/path/to/ptxas13.3_search_space.bin")
# Pass to Search
from compileiq.ciq import Search
tuner = Search(objective_function=..., search_space=ss, search_config=...)
From release/search-spaces/manifest-source.yaml:
| Compiler | Version | Variant | File | When to use |
|---|---|---|---|---|
| ptxas | 13.3 | default | ptxas13.3_search_space.bin | Generic PTXAS tuning; the right starting point for most kernels. |
| ptxas | 13.3 | att | ptxas13.3_att_search_space.bin | Attention workloads. att is short for *attention*, not "attribute". This variant is curated for FlashAttention, GQA, MHA, MLA, FlashInfer Batch Decode, and similar attention kernels. Prefer this whenever the kernel is attention-shaped. |
| nvcc | 13.3 | default | nvcc13.3_search_space.bin | Full-compiler (front-end + back-end) tuning when you want NVCC-level knobs, not just PTXAS. |
To enumerate variants in the latest release at any time:
gh release view --json assets --jq '.assets[].name' -R NVIDIA/CompileIQ <tag>
Pre-download the manifest plus all .bin files on a connected host, then point
CompileIQ at the local mirror via CIQ_SEARCH_SPACES_DIR:
# On a connected host
mkdir -p /shared/ciq-search-spaces
gh release download search-spaces-latest -R NVIDIA/CompileIQ -D /shared/ciq-search-spaces
# Move the directory to the air-gapped host (rsync, scp, sneaker-net, …)
# On the air-gapped host
export CIQ_SEARCH_SPACES_DIR=/shared/ciq-search-spaces
python -c "from compileiq.search_spaces.compilers import PtxasSearchSpace; print(PtxasSearchSpace().retrieve())"
Other env-var knobs:
CIQ_SEARCH_SPACES_REPO (default NVIDIA/CompileIQ): override the GitHubrepo the resolver queries — useful for staging or forks.
CIQ_SS_TAG_PREFIX (default search-spaces-): tag prefix used whenresolving tag="latest". Rarely needs changing.
Resolved binaries are cached at ~/.cache/compileiq/<tag>/<sha256_prefix>_<filename>.
The resolver verifies cached files by sha256; a corrupted entry is re-downloaded
on the next call. Safe to wipe — wiping just costs one re-download.
For hyperparameter tuning, autotuner knobs, or any user-defined space, pass
a dict (or list-of-dicts) directly instead of a provider. Primitives live in
compileiq/search_spaces/base.py:
import compileiq.search_spaces.base as ss
search_space = {
"block_size": ss.choice([64, 128, 256, 512]),
"unroll": ss.range(start=1, end=8, step=1),
"use_shmem": ss.literal(True, knockout_prob=0.5),
"lr": ss.log_sampling(start=1e-5, end=1e-1, total=20),
}
| Primitive | Purpose |
|---|---|
| choice([...]) | Sample uniformly from a discrete list. |
| range(start, end, step) | Range-like sampling (also supports float steps). |
| literal(value, knockout_prob=...) | Constant value; knockout_prob lets the GA disable this parameter. |
| log_sampling(start, end, total) | Logarithmic distribution between start and end with total discrete buckets. |
Mixed user + compiler search space (list shape):
search_space = [
{"config_idx": ss.range(0, len(CONFIGS) - 1)}, # user-defined
PtxasSearchSpace(version="13.3"), # compiler-side
]
When the search space is a list, the objective receives a list of the same
length — see compileiq-author-objective for the unpacking pattern.
# Default variant resolves
python -c "
from compileiq.search_spaces.compilers import PtxasSearchSpace
p = PtxasSearchSpace().retrieve()
assert p.exists() and p.stat().st_size > 0, p
print(f'default OK: {p}')
"
# Attention variant resolves
python -c "
from compileiq.search_spaces.compilers import PtxasSearchSpace
p = PtxasSearchSpace(version='13.3', variant='att').retrieve()
assert p.exists() and p.stat().st_size > 0, p
print(f'att OK: {p}')
"
# Misconfigured air-gap mirror produces a clear error
CIQ_SEARCH_SPACES_DIR=/nonexistent python -c "
from compileiq.search_spaces.compilers import PtxasSearchSpace
try:
PtxasSearchSpace().retrieve()
print('UNEXPECTED: should have failed')
except Exception as e:
print(f'expected failure: {type(e).__name__}')
"
att is *attention*, not "attribute". Earlier docs and a test fixturemislabeled the variant as "attribute-based register allocation" — corrected
in this same branch. When recommending the variant to a user, say
"attention" explicitly.
binary search space the optimization core consumes during a search; Booster
Packs are pre-built .acf candidates to apply *outside* a search. Don't
feed a .acf from a Booster Pack to PtxasSearchSpace(...).
LocalSearchSpaceBin doesn't validate .bin contents. It onlyvalidates that the file exists. A malformed file will fail downstream when
the core tries to parse it; the resulting error message points at the
resolver, not the provider.
compileiq-author-objective.compileiq-run-search.Take nvidia/compileiq-search-space 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.