Skip to content

[Docs] State the compile boundary in the manifest guide as the entry derives it - #74

Merged
lcy-seso merged 9 commits into
tile-ai:mainfrom
lcy-seso:docs/manifest-compile-boundary
Oct 17, 2026
Merged

lcy-seso merged 9 commits into
tile-ai:mainfrom
lcy-seso:docs/manifest-compile-boundary

Conversation

@lcy-seso

@lcy-seso lcy-seso commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor
  • The guide said an op class declares a compile boundary. has_compile_boundary() derives it from the manifest entry — a call-time tensor input and no composition — and maybe_install_signature installs it when the class is defined.
  • Validator check 7 ("every expression evaluable on SymInt") does not exist; validate_manifest.py checks only that compile_op_names agrees with the entry. The SymInt requirement follows from the cold fullgraph=True compile. The list renumbers from nine checks to eight, and the compile_op_names check joins the code-vs-spec ones.
  • calls, concepts and extensions, English and Chinese. index.md already describes it this way, so these three pages contradicted it.

This is commit 6290443, pushed to docs/op-base-guide twenty minutes after #69 merged and stranded there. Verified against TileOPs f5d666e. docs/op-base-guide can be deleted once this lands.

Backend guide and user guides, for tile-ai/TileOPs#2603

Commits e89df26, 6b3d6b1, 2478640, 46d657a, cd9c557, d7243c8 and f647a50 match the guide to TileOPs main at e1293df2, which includes tile-ai/TileOPs#2603. Chinese first; the English follows it.

  • backends: a target's kernel may define request_tune() and config; a kernel without request_tune() makes the op instance warn once.
  • backends: register_device_facts gets its own section, with a table of where each device type's facts come from. read runs when a call spec first reads facts and when a kernel declaring supported_archs is constructed.
  • backends: contract item 6 applies to ops with a compile boundary. A condition on tensor values is the target kernel's to check, and it raises ValueError.
  • backends: performance reports give timing and baseline handling as two tables. The test claim states the three markers and the numbers a claim comes with. The memo key is the call device.
  • manifest/calls and its figure, and op/lifecycle: a call with no tensor and no device runs on the process accelerator's current device, and builds run with that device made current through torch.accelerator.
  • op/records, op/structure, op/index: tuning requests reach a target's kernels, and kernel_config() reads them.
  • manifest/index, timing, benchmark/writing and its figure: benchmarks run on CUDA or the process's accelerator, with CUPTI on CUDA and device events elsewhere.
  • dispatch/backends: links register_kernel_type to device facts, and a target's kernel to its optional members.
  • The two figures' SVG text was edited by hand; their .puml sources carry the same text.

Dev image, for tile-ai/TileOPs#2602

Commit f775414 follows the image rename: the dev image is ghcr.io/tile-ai/tileops-dev:cuda13.2-torch2.13-tilelang0.1.12, and the old tileops-runner package is deleted.

  • user-guide/development names the new package and its tag form, English and Chinese.
  • backends runs the example's tests in the new image; the old tl-afcebed1-dev tag no longer exists.
  • timing and shared-memory-access keep the old image name: they record the image those numbers were measured on.

…derives it

The manifest guide still described a compile boundary as something an op class declares, and listed SymInt evaluability among the validator's checks. tile-ai/TileOPs#2520 derives the boundary from the manifest entry, and the validator checks only that compile_op_names agrees with the entry; the SymInt requirement follows from the cold fullgraph compile the op must pass.
Copilot AI balanced review requested due to automatic review settings October 17, 2026 04:55

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

An organization owner can choose the repository organization as the billing source for reviews requested by members with a paid Copilot license. Learn about Copilot code review billing.

…ce_facts, and what a non-CUDA backend's tests and reports cover

Follows tile-ai/TileOPs#2595. The backend guide said tuning never reaches a
target, that the op layer rejects every unsupported dtype or shape, that the
op tests run once with the backend's kernel and that reports are produced as
usual; the last two did not hold on a device other than CUDA.

The guide now states the two optional members a target's kernel may define,
how a backend for another device type reports its device facts, which checks
belong to the op layer, build_kernel and the kernel, the conditions for a
backend's test claim about an op, and how benchmarks time and drop baselines
on another device.
The dev and CI images moved out of the shared tileops-runner package into tileops-dev and
tileops-ci-runner, tagged with the CUDA, PyTorch and TileLang versions, and the old package
is deleted. The development guide and the backend example's docker command now name the
new image.
…-device tuning and benchmark statements

Follows tile-ai/TileOPs#2603's review. A reader of register_device_facts now
receives the call's torch.device, which a cpu device can be; request_tune() is
called again on every request and is idempotent per device; the op layer
makes the call's device current only for the process's accelerator type; and
a cpu device is not benchmarked, so contract item 7 and the summary after it
hold on the devices a target runs on.
…eads, config and timing as the code does

Contract items 2 and 7 each held several rules in one table cell. Item 2's
three layers of checks now form their own table, and performance reports
their own section. A device facts reader is called once per call spec,
config is reported when non-empty and the op holds none, and CUDA events
time a row only where CUPTI fails and the run allows the fallback.
…ts target serves the device

tile-ai/TileOPs#2603 settled what a test needs: in_tree_kernels for the
in-tree implementations, cuda_only for CUDA itself, and an architecture mark
for a CUDA architecture, which skips elsewhere. The test-claim section named
only the first two, and did not say the target has to serve the device.
…e and target tuning on main

On TileOPs main a call with no tensor and no device runs on the process's accelerator, not
on CUDA, and builds run with the call's device made current through torch.accelerator. A
target's kernels receive tuning requests and report their config, and benchmarks run on
any accelerator. The manifest, op and dispatch guides still described the CUDA-only
behaviour and a tuning request that never reached a target.

The backend guide states device facts as a table by device type, says read also runs when
a kernel declaring supported_archs is built, gives the report timing and baseline rules as
tables, and keys the memo by the call device. Chinese first; the English follows it.
…ements to where main holds them

The op-layer contract promised every target an opaque operator and fake; only an op with a
compile boundary gets one. A condition on tensor values is the target kernel's to check,
and the op layer passes its error on. The timing and benchmark-writing pages, and the
execution figure, described CUPTI as the only way a round is timed; another accelerator
times with device events. The manifest guide's step 3 is split into one rule per item.
@lcy-seso
lcy-seso merged commit 9584412 into tile-ai:main Oct 17, 2026
3 checks passed
@lcy-seso
lcy-seso deleted the docs/manifest-compile-boundary branch October 17, 2026 16:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants