Add --verify-data CLI flag, Tensor.data property, parallel DataExecutor
- CLI: --verify-data flag enables Phase 2 data verification (ADR-0020) - Tensor.data: returns actual numpy values (verify-data) or zeros placeholder - Tensor.__repr__: shows value summary or data=N/A (placeholder) - DataExecutor: ThreadPoolExecutor for same-timestamp parallel op execution - BenchResult.engine: exposes op_log/memory_store for Phase 2 access Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -21,6 +21,10 @@ def build_parser() -> argparse.ArgumentParser:
|
||||
runp.add_argument(
|
||||
"--device", default=None, help="Target device: 'all' or 'sip:<N>' (default: all)"
|
||||
)
|
||||
runp.add_argument(
|
||||
"--verify-data", action="store_true", default=False,
|
||||
help="Enable Phase 2 data verification (ADR-0020)",
|
||||
)
|
||||
runp.set_defaults(_handler=cmd_run)
|
||||
|
||||
probep = sub.add_parser("probe", help="Probe latency and BW for predefined traffic patterns")
|
||||
@@ -36,9 +40,11 @@ def build_parser() -> argparse.ArgumentParser:
|
||||
return p
|
||||
|
||||
|
||||
def engine_factory(topology: object, device: DeviceSelector) -> SimEngine:
|
||||
def engine_factory(
|
||||
topology: object, device: DeviceSelector, *, enable_data: bool = False,
|
||||
) -> SimEngine:
|
||||
topo_obj = getattr(topology, "topology_obj", topology)
|
||||
return GraphEngine(topo_obj)
|
||||
return GraphEngine(topo_obj, enable_data=enable_data)
|
||||
|
||||
|
||||
def cmd_web(args) -> int:
|
||||
@@ -53,8 +59,12 @@ def cmd_run(args) -> int:
|
||||
topo = resolve_topology(args.topology)
|
||||
bench = resolve_bench(args.bench)
|
||||
device = resolve_device(args.device)
|
||||
verify_data = getattr(args, "verify_data", False)
|
||||
|
||||
result = run_bench(topology=topo, bench_fn=bench, device=device, engine_factory=engine_factory)
|
||||
def _factory(topology, device):
|
||||
return engine_factory(topology, device, enable_data=verify_data)
|
||||
|
||||
result = run_bench(topology=topo, bench_fn=bench, device=device, engine_factory=_factory)
|
||||
|
||||
topo_obj = getattr(topo, "topology_obj", topo)
|
||||
spec = getattr(topo_obj, "spec", None)
|
||||
@@ -62,6 +72,21 @@ def cmd_run(args) -> int:
|
||||
print(format_report(result.traces, title=args.bench, spec=spec))
|
||||
print(result.summary_text())
|
||||
|
||||
# Phase 2: data execution (ADR-0020)
|
||||
if verify_data and result.engine is not None:
|
||||
from kernbench.sim_engine.data_executor import DataExecutor
|
||||
|
||||
op_log = result.engine.op_log
|
||||
store = result.engine.memory_store
|
||||
if op_log and store is not None:
|
||||
executor = DataExecutor(op_log, store)
|
||||
executor.run()
|
||||
n_gemm = sum(1 for r in op_log if r.op_kind == "gemm")
|
||||
n_math = sum(1 for r in op_log if r.op_kind == "math")
|
||||
print(f"[data] Phase 2 complete: {len(op_log)} ops ({n_gemm} gemm, {n_math} math)")
|
||||
else:
|
||||
print("[data] No op_log recorded — skipping Phase 2")
|
||||
|
||||
return 0 if result.completion.ok else 1
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user