Module Panorama - NPU Operator Benchmark Framework
Auto-generated: 2026-06-03 | Sources: src/kernel_eval/, src/auto_pipeline/, scripts/, tests/
1. Architecture Overview
+--------------------------------------------------------------------+
| CLI / YAML Config |
+-------------------+--------------------------------+---------------+
| |
+-----------v-----------+ +-----------v-----------+
| auto_pipeline | | kernel_eval |
| (Code Generation) | | (Evaluation) |
+-----------+-----------+ +-----------+-----------+
| |
+---------------+---------------+ +------------+------------+
| Generator | Converter | | Evaluator | Report |
| (akg/pypto/ | (to_cann/ | | (accuracy/ | (html/ |
| opencode) | to_stanford) | | perf/sub) | scoring) |
+-------+-------+-------+------+ +-----+------+-----+----+
| | | |
+-------+-------+-------+-------+ |
| | |
subprocess: python -m kernel_eval.cli eval |
| |
+-------v-------+ |
| Registry |<---------------------------+
| (7 tables) |
+-------+-------+
|
+-----------+-----------+
| benches/cann.py |
| benches/stanford.py |
+-----------------------+
Two-domain design: auto_pipeline (code generation) and kernel_eval (evaluation) are fully decoupled -- they interact only through subprocess CLI calls and directory conventions, sharing no in-process state.
2. Registered Modules
2.1 kernel_eval Registries (7 tables)
| Registry |
Key Type |
Registered Items |
LoaderRegistry |
eval_system |
cann (CannTaskLoader/CannCaseLoader), stanford (StanfordTaskLoader/StanfordCaseLoader) |
GoldenLoaderRegistry |
eval_system |
cann (GoldenLoader), stanford (StanfordGoldenLoader) |
OperatorMatcherRegistry |
eval_system |
cann (OperatorMatcher), stanford (StanfordMatcher) |
CheckerRegistry |
name |
relative_error (RelativeErrorChecker), cann_default (alias), allclose (AllCloseChecker) |
ScoringSchemeRegistry |
name |
cann (CannScoringScheme), simple_comparison, recording_only, stanford (StanfordScoringScheme) |
CaseSpecRegistry |
name |
cann (CannCaseSpec), stanford (CaseSpec base) |
BenchRegistry |
bench_name |
cann, stanford |
2.2 auto_pipeline Registries (3 tables)
| Registry |
Key |
Registered Items |
| Runner |
name |
opencode (OpenCodeAgent) |
| Generator |
type |
akg-agent (AkgAgent), pypto (PyptoOrchestratorAgent) |
| Converter |
(source, target) |
pypto->cann, pypto->stanford, akg-agent->cann, akg-agent->stanford |
| PromptBuilder |
bench_name |
cann (CannPromptBuilder), stanford (StanfordPromptBuilder) |
3. BenchConfig: Component Binding
BenchConfig is the composition core -- it binds 6 component names into a coherent evaluation stack:
CANN Bench (cann)
| Component |
Registry |
Registered Name |
Implementation |
| TaskLoader |
LoaderRegistry |
cann |
CannTaskLoader |
| CaseLoader |
LoaderRegistry |
cann |
CannCaseLoader |
| GoldenLoader |
GoldenLoaderRegistry |
cann |
GoldenLoader |
| OperatorMatcher |
OperatorMatcherRegistry |
cann |
OperatorMatcher |
| Checker |
CheckerRegistry |
relative_error |
RelativeErrorChecker |
| ScoringScheme |
ScoringSchemeRegistry |
cann |
CannScoringScheme |
| CaseSpec |
CaseSpecRegistry |
cann |
CannCaseSpec |
| Golden Precision |
- |
fp64_cpu |
float64 + CPU |
| Tasks Root |
- |
tasks |
- |
Stanford Bench (stanford)
| Component |
Registry |
Registered Name |
Implementation |
| TaskLoader |
LoaderRegistry |
stanford |
StanfordTaskLoader |
| CaseLoader |
LoaderRegistry |
stanford |
StanfordCaseLoader |
| GoldenLoader |
GoldenLoaderRegistry |
stanford |
StanfordGoldenLoader |
| OperatorMatcher |
OperatorMatcherRegistry |
stanford |
StanfordMatcher |
| Checker |
CheckerRegistry |
allclose |
AllCloseChecker |
| ScoringScheme |
ScoringSchemeRegistry |
stanford |
StanfordScoringScheme |
| CaseSpec |
CaseSpecRegistry |
stanford |
CaseSpec (base) |
| Golden Precision |
- |
native_npu |
native dtype + NPU |
| Tasks Root |
- |
thirdparty/KernelBench/... |
- |
4. Combination Matrix
4.1 End-to-End Pipeline Combinations
| Generator |
Benchmark |
PromptBuilder |
Converter |
conversion_runner |
Status |
akg-agent |
cann |
CannPromptBuilder |
AkgToCannConverter |
None |
Implemented |
akg-agent |
stanford |
StanfordPromptBuilder |
AkgToStanfordConverter |
None |
Implemented |
pypto |
cann |
CannPromptBuilder |
PyptoToCannConverter |
OpenCodeAgent |
Implemented |
pypto |
stanford |
StanfordPromptBuilder |
PyptoToStanfordConverter |
OpenCodeAgent |
Implemented |
opencode |
cann |
CannPromptBuilder |
- |
- |
Runner only, no Generator |
opencode |
stanford |
StanfordPromptBuilder |
- |
- |
Runner only, no Generator |
4.2 kernel_eval Component Cross-Bench Reuse
| Component |
CANN Bench |
Stanford Bench |
Cross-reusable? |
| RelativeErrorChecker |
Default |
- |
Yes |
| AllCloseChecker |
- |
Default |
Yes |
| CannScoringScheme |
Default |
- |
Yes (interface-compatible) |
| StanfordScoringScheme |
- |
Default |
Yes (interface-compatible) |
| SimpleComparisonScheme |
Available |
- |
Yes |
| RecordingOnlyScheme |
Available |
- |
Yes |
| CannTaskLoader |
Bound |
- |
No (dir format differs) |
| StanfordTaskLoader |
- |
Bound |
No (dir format differs) |
| OperatorMatcher (cann) |
Bound |
- |
No (whl/pkg format) |
| StanfordMatcher |
- |
Bound |
No (ai_op.py format) |
Summary: Checker and Scoring are freely composable across benches. Loader and Matcher are strongly bound to their bench's directory structure and file format.
4.3 Generator x Converter (Cartesian Product)
|
to_cann |
to_stanford |
| akg-agent |
Implemented |
Implemented |
| pypto |
Implemented |
Implemented |
All 4 combinations are fully implemented.
5. Invalid Combinations
| Combination |
Reason |
opencode as Generator |
Only registered as Runner; create_generator("opencode") raises ValueError |
| Generator + unregistered bench |
create_converter KeyError on _CONVERTER_FACTORIES |
| Stanford submission -> CANN bench |
CANN requires build.sh + cann_bench/; Stanford only produces ai_op.py |
| CANN submission -> Stanford bench |
Stanford expects ai_op.py; CANN produces whl packages |
| Mix Loader from bench A + Matcher from bench B |
Directory format mismatch |
| GoldenLoader cross-bench |
Each bench has unique golden file layout |
6. Potential Combinations (Not Yet Implemented)
| Opportunity |
Description |
Effort |
opencode as Generator |
Wrap via PromptGenerator (already in core.py), add (opencode, cann) and (opencode, stanford) converter registrations |
Medium |
| New bench domain |
BenchRegistry supports dynamic registration; add Loader/Checker/Scoring + Converter |
Medium |
| Cross-bench Checker swap |
Use allclose for CANN or relative_error for Stanford -- just change BenchConfig.checker field |
Trivial |
| Cross-bench Scoring swap |
Use cann scoring for Stanford -- change BenchConfig.scoring_scheme field |
Trivial |
7. Dependency Graph
7.1 kernel_eval Eval Layer
Evaluator (orchestrator)
+-- OpRunner
| +-- PerfEvaluator
| | +-- InputPool (anti-cache-attack)
| | +-- DeviceManager
| +-- DeviceManager
+-- AccuracyEvaluator
| +-- CheckerRegistry -> RelativeErrorChecker / AllCloseChecker
| +-- compare.py (MERE/MARE engine)
| +-- thresholds.py (5 precision tables)
| +-- type_checker.py (FakeTensor guard)
+-- SubprocessRunner
| +-- FailureSynthesizer -> CaseLoader
+-- ProcessPoolCoordinator (multi-card parallel)
+-- PackageManager -> compile/install whl -> APIGuard
+-- DataGenerator -> dtype_mapper
+-- ParamBuilder
7.2 auto_pipeline Layer
BenchmarkPipeline (orchestrator)
+-- CannBenchClient (case loading)
| +-- build_case_material -> PromptBuilder (cann/stanford)
+-- Generator (Protocol)
| +-- AkgAgent (in-process AKG SDK)
| +-- PyptoOrchestratorAgent (7-stage orchestrator)
| +-- OpenCodeAgent (run_opencode)
+-- Converter (Protocol)
| +-- BaseConverter -> optional Runner (for LLM conversion)
| +-- AkgToCannConverter / AkgToStanfordConverter
| +-- PyptoToCannConverter / PyptoToStanfordConverter
+-- Submission -> subprocess: python -m kernel_eval.cli eval
7.3 Cross-Domain Data Flow
YAML Config
|
v
auto_pipeline CLI (cli.py)
|-- _parse_config: agent.type + benchmark.name
|-- create_generator(agent.type) -> Generator
|-- create_converter(agent.type, benchmark.name) -> Converter
|
v
BenchmarkPipeline.run_case:
1. CannBenchClient.load_case -> CannBenchCase
2. PromptBuilder.build_case_material -> CaseMaterial
3. Generator.generate(GeneratorInput) -> Artifact
4. Converter.convert(bench_name, case, artifact) -> Submission(source_dir)
5. CannBenchClient.eval_submission
|
| subprocess boundary (directory + JSON only)
v
kernel_eval CLI (cli.py eval --bench-name <name> --source-dir <dir>)
|-- Evaluator(bench_name) -> BenchConfig -> full component stack
|-- evaluate_case x N -> EvalSessionResult -> JSON report
8. Supporting Modules
8.1 Independence Ratings
| Module |
Independence |
Notes |
utils/thresholds |
5/5 |
Pure data tables + query functions, zero deps |
utils/naming |
5/5 |
Pure string transforms, zero deps |
utils/dtype_mapper |
4/5 |
Only depends on torch |
utils/tensor_utils |
4/5 |
Only depends on torch |
utils/baseline_resolver |
4/5 |
Only stdlib + logging |
utils/param_builder |
4/5 |
Only depends on inspect |
utils/compare |
3/5 |
Depends on thresholds, self-contained |
utils/path_resolver |
3/5 |
Depends on base.loaders |
security/api_guard |
4/5 |
Only depends on torch |
security/torch_op_guard |
4/5 |
Only depends on torch |
security/type_checker |
4/5 |
Only depends on torch |
data/data_generator |
3/5 |
Depends on dtype_mapper |
data/package_manager |
2/5 |
Depends on config + security + registry |
report/* |
2/5 |
Depends on eval.results data structures + config |
utils/device_manager |
2/5 |
Depends on config singleton |
config.py |
3/5 |
Depends on thresholds (lazy import) |
8.2 Cross-Domain Reuse Potential
| Priority |
Module |
Reuse Method |
Use Case |
| High |
thresholds |
Direct import |
Pipeline precision pre-check / result parsing |
| High |
naming |
Direct import |
Operator name matching & directory mapping |
| High |
baseline_resolver |
Direct import |
Baseline query & speedup calculation |
| Medium |
security/* |
Direct import |
If pipeline installs whl in-process, needs APIGuard |
| Medium |
data_generator |
Direct import |
Pipeline self-test / golden verification |
| Medium |
compare |
Direct import |
In-pipeline precision comparison |
| Low |
device_manager |
Via CLI args |
Current subprocess model suffices |
| Low |
report/* |
Via CLI args |
Report generated by eval subprocess |
| Low |
package_manager |
Via CLI args |
Compile/install handled by eval subprocess |
Key insight: Pure-function/pure-data modules (thresholds, naming, baseline_resolver, dtype_mapper) can be directly imported by auto_pipeline with zero coupling risk. Stateful modules (device_manager, config) and workflow modules (package_manager, report) should remain isolated behind the CLI subprocess boundary.
9. Configuration Sharing
The two domains maintain separate configurations unified through CLI argument contracts:
| Domain |
Config Source |
Key Fields |
auto_pipeline |
YAML config (config/ dir) + core.py dataclass |
agent.type, benchmark.name, repo_root, device_id |
kernel_eval |
Config global singleton (config.py) |
tasks_root, device_type, warmup, repeat, checker_name, precision_thresholds |
| Bridge |
CLI args: --bench-name, --source-dir, --device, --device-id |
_create_config_from_args() translates args -> Config |
The bench_name string serves as the configuration anchor for both domains:
- auto_pipeline: selects Converter, PromptBuilder, submission format validation
- kernel_eval:
get_bench_config(bench_name) pulls the full component stack
10. Module Count Summary
| Domain |
Modules |
Classes |
Registries |
Registered Items |
| kernel_eval/base |
7 files |
16 classes |
0 |
- |
| kernel_eval/registry |
8 files |
8 classes |
7 |
18 items |
| kernel_eval/benches |
10 files |
20 classes |
- |
(self-registering) |
| kernel_eval/eval |
9 files |
12 classes |
- |
- |
| kernel_eval/checkers |
2 files |
4 classes |
- |
(via CheckerRegistry) |
| kernel_eval/utils |
9 files |
15+ functions |
- |
- |
| kernel_eval/security |
3 files |
4 classes |
- |
- |
| kernel_eval/data |
2 files |
3 classes |
- |
- |
| kernel_eval/report |
5 files |
6 classes |
- |
- |
| auto_pipeline/generator |
7 files |
4 classes |
2 |
3 items |
| auto_pipeline/converter |
7 files |
6 classes |
1 |
4 items |
| auto_pipeline/prompt |
3 files |
3 classes |
1 |
2 items |
| auto_pipeline/core |
1 file |
10 classes |
- |
- |
| Total |
~73 files |
~111 classes |
11 registries |
27 registered items |