Skip to content

Commit 0668171

Browse files
committed
docs: update doc.md status handoff
1 parent e1e0d68 commit 0668171

File tree

1 file changed

+110
-0
lines changed

1 file changed

+110
-0
lines changed

doc.md

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
# Surrogate autotuner (OpenROAD + ORFS) — status / handoff (2026-01-10)
2+
3+
Canonical end-to-end guides (these are what we expect users to follow):
4+
5+
- ORFS normal branch: `surrogate_autotuner_guide.md`
6+
- ORFS rebased branch: `flow/surrogate_autotuner_guide.md`
7+
8+
This `doc.md` is a “current status” handoff that ties together the 4 branches,
9+
their pairing rules, gating, and known limitations/results.
10+
11+
## Current branch set (precisedanon)
12+
13+
The deliverable is **four branches total** (two repos × normal/rebased):
14+
15+
### ORFS (OpenROAD-flow-scripts)
16+
17+
- `orfs-surrogate-normal`
18+
- Base: `93c42b2e6` + **1 commit** (minimal surrogate integration + docs)
19+
- OpenROAD submodule pin: `tools/OpenROAD @ 0b3616e102` (`openroad-surrogate-normal`)
20+
- Guide: `surrogate_autotuner_guide.md`
21+
- `orfs-surrogate-rebased`
22+
- Rebased on The-OpenROAD-Project `master` (then surrogate plumbing + docs)
23+
- OpenROAD submodule pin: `tools/OpenROAD @ f5de6e7462` (`openroad-surrogate-rebased`)
24+
- Guide: `flow/surrogate_autotuner_guide.md`
25+
26+
### OpenROAD (tools/OpenROAD)
27+
28+
- `openroad-surrogate-normal`
29+
- Base: `7bc521f36a` + **1 commit** `0b3616e102` (“surrogate: add autotune support”)
30+
- Surrogate commands are compiled in and available without extra gating.
31+
- `openroad-surrogate-rebased`
32+
- Base: OpenROAD `upstream/master` + `a04f00a450` + `f5de6e7462`
33+
- Compile-time gate: `-D ENABLE_SURROGATE=ON` (default `OFF`)
34+
- Runtime gate: `OPENROAD_ENABLE_SURROGATE=1` (default `OFF`)
35+
- Surrogate TCL commands are only registered when both gates are enabled.
36+
37+
Pairing rules:
38+
39+
- `orfs-surrogate-normal``openroad-surrogate-normal`
40+
- `orfs-surrogate-rebased``openroad-surrogate-rebased`
41+
42+
## What is shipped (ORFS surface area)
43+
44+
New `flow/Makefile` targets:
45+
46+
- `make -C flow surrogate_tune` (calls OpenROAD `surrogate_optimize` on the current synthesized netlist)
47+
- `make -C flow surrogate_tune_synthaware` (clock sweep: rewrite SDC + re-synth per clock, then tune)
48+
- `make -C flow surrogate_autotune` (orchestrates synth-aware tuning; can optionally run `finish` validations)
49+
50+
Implementation entry points:
51+
52+
- ORFS: `flow/scripts/surrogate_tune.tcl`, `flow/scripts/surrogate_tune_synthaware.py`, `flow/scripts/surrogate_autotune.py`
53+
- OpenROAD: `surrogate_optimize` and `surrogate_supported_features` (C++: `tools/OpenROAD/src/Surrogate.cc`)
54+
55+
## Supported values (objectives + knobs)
56+
57+
### Objectives (`SURROGATE_OBJECTIVE`)
58+
59+
Supported objective names (minimize):
60+
61+
- `effective_clock_period` (default)
62+
- `routed_wirelength`
63+
- `power`
64+
- `instance_area`
65+
- `area`
66+
67+
Note: empirical “expected gains” are currently only characterized on disk for
68+
`effective_clock_period` and `routed_wirelength` at ~`600s` and `K=14` (see below).
69+
70+
### Knob space keys
71+
72+
This integration is intentionally **restricted** vs ORFS’s baseline autotuner.
73+
Only a small fixed set of knob names is supported; unknown keys are ignored.
74+
75+
See the guides for the full “supported knob → ORFS variable” table and valid ranges.
76+
77+
## Expected gains (what users should expect)
78+
79+
From on-disk runs with `SURROGATE_TIME_BUDGET_S=600` and `SURROGATE_VALIDATE_N=14`
80+
(K=14), across `{asap7,nangate45,sky130hd} × {aes,ibex,jpeg}`:
81+
82+
- `routed_wirelength`: median gain `3.35%` (p25 `0.96%`, p75 `7.37%`), best observed `15.78%`, worst `0%`
83+
- `effective_clock_period`: median gain `2.99%` (p25 `1.61%`, p75 `4.71%`), best observed `11.58%`, worst `0%`
84+
85+
Not yet characterized at ~`600s` on disk: `power`, `instance_area`, `area`.
86+
87+
## Outputs / artifacts
88+
89+
Outputs:
90+
91+
- `flow/results/<platform>/<design>/<variant>/surrogate_optimize.json`
92+
- `flow/results/<platform>/<design>/<variant>/surrogate_synthaware.json`
93+
- `flow/results/<platform>/<design>/<variant>/surrogate_autotune.json`
94+
95+
Logs:
96+
97+
- `flow/logs/<platform>/<design>/<variant>/surrogate_tune.log`
98+
- `flow/logs/<platform>/<design>/<variant>/surrogate_tune_synthaware.log`
99+
- `flow/logs/<platform>/<design>/<variant>/surrogate_autotune.log`
100+
101+
## Known limitations / TODOs (explicit)
102+
103+
- Objective support beyond `{effective_clock_period, routed_wirelength}` is **not yet validated** with enough on-disk runs to quote expected gain ranges.
104+
- The knob space is intentionally restricted; this is not a drop-in replacement for baseline ORFS autotuning.
105+
106+
## Disk footprint (practical note)
107+
108+
Full `finish` runs can generate large artifacts under `flow/results/**` (e.g. `.odb`, `.def`, `.gds`, `.spef`).
109+
If you need to reclaim disk, the safest first pass is to keep `flow/logs/**` and remove large, reproducible outputs
110+
under `flow/results/**` for old variants you don’t need.

0 commit comments

Comments
 (0)