[Fix][Bench] Record binary ops by canonical identity (#1788)
Problem
Several legacy binary benchmarks pass a short string such as
maximum,minimum, orcmp_eqtoBenchmarkReport.record()instead of passing the Op instance that was actually profiled.String records contain neither the canonical class identity nor
op_module. The nightly report therefore treats a legacy alias and its manifest-driven benchmark as different operators. For example, the sameMaximumFwdOpimplementation can appear once asMaximumFwdOpand again asmaximum. Downstream documentation then has to classify the alias from its name alone, which can also placemaximumunder Reduction because it containsmax.This affects the standard binary arithmetic, comparison, logical, and bitwise benchmark groups. The measurements themselves are valid; the recorded operator identity is not canonical.
Solution
Pass the real Op instance to
BenchmarkReport.record()for both the TileOPs measurement and its baseline:op = op_cls(...) result = bm.profile(op, *inputs) BenchmarkReport.record(op, locals(), result, tag='tileops') result_bl = bm.profile(baseline_fn, *inputs) BenchmarkReport.record(op, locals(), result_bl, tag='torch')
BenchmarkReportthen derives the identity consistently from:op.__class__.__name__ op.__class__.__module__This consolidates legacy aliases under canonical identities such as
MaximumFwdOp,MinimumFwdOp, andEqFwdOp, while preserving the benchmark parameters, measurements, and baseline tags.The change is intentionally limited to identity recording. It does not add display-category metadata or move taxonomy into TileOPs; benchmark page classification remains owned by TileOPs.github.io.
Changes
- record standard binary arithmetic benchmarks with their real Op instances
- record comparison benchmarks with their real Op instances instead of
cmp_*aliases- record logical and bitwise benchmarks with their real Op instances
- preserve canonical class names and
op_modulemetadata in nightly JUnit outputValidation
python -m py_compile benchmarks/ops/bench_binary_elementwise.pygit diff --checkGPU benchmark execution was not available in the local worktree.
Related documentation taxonomy fix: tile-ai/TileOPs.github.io#13
版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9
京公网安备 11010802047560号
TileOPs
Spec-driven GPU operator library for LLMs — designed for AI agents to build, evaluate, and optimize
Built on TileLang
Installation | Quick Start | Docs
Overview
TileOPs is a GPU operator library for LLM training and inference, built on TileLang. Beyond providing a growing collection of production-quality operators, TileOPs explores a spec-driven development model where AI agents can read declarative operator specifications, generate kernel implementations, and evaluate them against hardware-theoretical performance bounds — with minimal human scaffolding.
Architecture
Every operator is split into two layers with a strict boundary:
torch.compile(fullgraph=True)support is declared per op in the manifest.This separation keeps user-facing behavior independent of GPU strategy, allowing agents and developers to modify either layer without side effects on the other.
Key Properties
tileops/manifest/) that specifies signatures, workloads, and roofline formulas, serving as the entry point for both agent code generation and automated validationInstallation
TileOPs is under active development and is installed from source; PyPI releases will begin with the first stable release. A CUDA-capable GPU is required.
Prerequisites
From source
Verify:
Quick Start
Documentation
Design docs and development guides are in
docs/. The full API reference and performance tables are published at TileOPs.github.io.Contributing
See docs/ for design docs. Branch and commit conventions are in
.claude/conventions/types.sh.License
TileOPs is released under the MIT License.