commit - release 1
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
import argparse
|
||||
import sys
|
||||
|
||||
from benches.loader import resolve_bench
|
||||
from kernbench.cli.probe import cmd_probe
|
||||
from kernbench.cli.report import format_report
|
||||
from kernbench.common.types import SimEngine
|
||||
from kernbench.runtime_api.bench_runner import run_bench
|
||||
from kernbench.runtime_api.types import DeviceSelector, resolve_device
|
||||
from kernbench.sim_engine.engine import GraphEngine
|
||||
from kernbench.topology.builder import resolve_topology
|
||||
|
||||
|
||||
def build_parser() -> argparse.ArgumentParser:
|
||||
p = argparse.ArgumentParser(prog="kernbench")
|
||||
sub = p.add_subparsers(dest="cmd", required=True)
|
||||
|
||||
runp = sub.add_parser("run", help="Run a benchmark")
|
||||
runp.add_argument("--topology", required=True)
|
||||
runp.add_argument("--bench", required=True)
|
||||
runp.add_argument(
|
||||
"--device", default=None, help="Target device: 'all' or 'sip:<N>' (default: all)"
|
||||
)
|
||||
runp.set_defaults(_handler=cmd_run)
|
||||
|
||||
probep = sub.add_parser("probe", help="Probe latency and BW for predefined traffic patterns")
|
||||
probep.add_argument("--topology", required=True)
|
||||
probep.add_argument("--case", default="all", help="Case name or 'all' (default: all)")
|
||||
probep.set_defaults(_handler=cmd_probe)
|
||||
|
||||
return p
|
||||
|
||||
|
||||
def engine_factory(topology: object, device: DeviceSelector) -> SimEngine:
|
||||
topo_obj = getattr(topology, "topology_obj", topology)
|
||||
return GraphEngine(topo_obj)
|
||||
|
||||
|
||||
def cmd_run(args) -> int:
|
||||
print("> Running benchmark with:", args)
|
||||
|
||||
topo = resolve_topology(args.topology)
|
||||
bench = resolve_bench(args.bench)
|
||||
device = resolve_device(args.device)
|
||||
|
||||
result = run_bench(topology=topo, bench_fn=bench, device=device, engine_factory=engine_factory)
|
||||
|
||||
topo_obj = getattr(topo, "topology_obj", topo)
|
||||
spec = getattr(topo_obj, "spec", None)
|
||||
if result.traces:
|
||||
print(format_report(result.traces, title=args.bench, spec=spec))
|
||||
print(result.summary_text())
|
||||
|
||||
return 0 if result.completion.ok else 1
|
||||
|
||||
|
||||
def main(argv=None) -> int:
|
||||
parser = build_parser()
|
||||
args = parser.parse_args(argv)
|
||||
return int(args._handler(args))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
Reference in New Issue
Block a user