from __future__ import annotations
import os
from benchmark.case import cases_for
from benchmark.constants import DEFAULT_FORMATS, DEFAULT_TET_DEVICE, FormatName
from benchmark.log import log
from benchmark.report import parse_ops, write_report
from benchmark.runner import bench_case, cleanup_format_tree
from benchmark.tet import tet_bin
def run_benchmark(
*,
formats: list[FormatName] | None = None,
ops: list[str] | None = None,
skip_ops: bool = False,
jobs: int | None = None,
tet_device: str | None = None,
run_id: str | None = None,
no_clobber: bool = False,
) -> int:
fmt_list: list[FormatName] = list(formats or DEFAULT_FORMATS)
op_list = parse_ops(ops)
job_count = jobs if jobs is not None else int(os.environ.get("BENCH_JOBS", "0"))
device = (
tet_device
if tet_device is not None
else os.environ.get("TET_BENCH_DEVICE", DEFAULT_TET_DEVICE)
)
tet = tet_bin()
log(
f"start formats={fmt_list} ops={op_list} tet={tet} jobs={job_count} "
f"skip_ops={skip_ops} tet_device={device!r}"
)
rows = []
for fmt in fmt_list:
log(f"######## {fmt} ########")
for case in cases_for(fmt):
rows.append(
bench_case(
tet,
case,
jobs=job_count,
ops=op_list,
skip_ops=skip_ops,
tet_device=device,
)
)
cleanup_format_tree(fmt)
write_report(
jobs=job_count,
ops=op_list,
skip_ops=skip_ops,
tet_device=device,
rows=rows,
run_id=run_id,
no_clobber=no_clobber,
)
return 0