2"""Run the representative C/C++ numeric benchmark and enforce the release gate."""
8from pathlib
import Path
11def run(program: Path, mode: str, path: Path) -> dict:
12 completed = subprocess.run(
13 [str(program), mode, str(path)], check=
True, capture_output=
True, text=
True
15 return json.loads(completed.stdout)
18def median_result(runs: list[dict]) -> dict:
20 "seconds": statistics.median(item[
"seconds"]
for item
in runs),
21 "peak_kib": statistics.median(item[
"peak_kib"]
for item
in runs),
26 if len(sys.argv) != 3:
28 program = Path(sys.argv[1]).resolve()
29 data = Path(sys.argv[2]).resolve()
32 for iteration
in range(5):
34 cpp_runs.append(run(program,
"cpp-full", data))
35 c_runs.append(run(program,
"c-full", data))
37 c_runs.append(run(program,
"c-full", data))
38 cpp_runs.append(run(program,
"cpp-full", data))
39 c_result = median_result(c_runs)
40 cpp_result = median_result(cpp_runs)
43 for iteration
in range(5):
45 cpp_write_runs.append(run(program,
"cpp-write", data.parent /
"gate-cpp-write.sdds"))
46 c_write_runs.append(run(program,
"c-write", data.parent /
"gate-c-write.sdds"))
48 c_write_runs.append(run(program,
"c-write", data.parent /
"gate-c-write.sdds"))
49 cpp_write_runs.append(run(program,
"cpp-write", data.parent /
"gate-cpp-write.sdds"))
50 c_write = median_result(c_write_runs)
51 cpp_write = median_result(cpp_write_runs)
52 read_throughput_ratio = c_result[
"seconds"] / cpp_result[
"seconds"]
53 read_memory_ratio = cpp_result[
"peak_kib"] / max(c_result[
"peak_kib"], 1)
54 write_throughput_ratio = c_write[
"seconds"] / cpp_write[
"seconds"]
55 write_memory_ratio = cpp_write[
"peak_kib"] / max(c_write[
"peak_kib"], 1)
60 "cpp_write": cpp_write,
61 "cpp_read_throughput_ratio": read_throughput_ratio,
62 "cpp_read_peak_memory_ratio": read_memory_ratio,
63 "cpp_write_throughput_ratio": write_throughput_ratio,
64 "cpp_write_peak_memory_ratio": write_memory_ratio,
65 "throughput_gate": 0.85,
68 print(json.dumps(report, indent=2, sort_keys=
True))
69 return 0
if (read_throughput_ratio >= 0.85
and write_throughput_ratio >= 0.85
and
70 read_memory_ratio <= 1.25
and write_memory_ratio <= 1.25)
else 1
73if __name__ ==
"__main__":
74 raise SystemExit(main())