gpl: Restart Nesterov momentum after non-virtual timing-driven repair - #11553
Conversation
A non-virtual timing-driven iteration runs repair_design, which replaces large portions of the netlist topology (buffer insertion/removal and the corresponding GCell create/delete). updateGCellState() re-seeds only the new instances, while the global accelerated-gradient momentum coefficient curA and the existing cells' velocity carry the pre-repair trajectory into the changed objective. On nangate45 leon3_vta_bus this makes HPWL diverge (18.76M -> 37.53M um) over the iterations after the repair while density overflow keeps falling, so checkDivergence() (which only triggers on rising overflow) never fires and GPL terminates on the overflow<0.1 criterion with a badly placed net: an SRAM output buffer ends up 4.67 mm from its driver. Restart the FISTA momentum (curA = 1.0) on the first iteration after a non-virtual repair so the extrapolation coefficient starts from zero instead of the stale ~0.99 value, then rebuilds gradually. On the repro the SRAM-output first-sink distance drops from 4674 to 717 um and the final HPWL from 37.53M to 18.67M um, with runtime unchanged. Add the simple01-td-restart regression (simple01-td with max_fanout 2 so both non-virtual repairs rebuild most of the netlist; it fails without the restart) and refresh the goldens of the timing-driven tests whose trajectories change with the restart (new GPL-0111 line, same final QoR). Signed-off-by: Jaehyun Kim <jhkim@precisioninno.com>
Reduce the seven-line rationale at the restart request in runTimingDriven() to two lines; the mechanism is documented once on the reset_nesterov_momentum_ member. Signed-off-by: Jaehyun Kim <jhkim@precisioninno.com>
Merge origin/master (556e89f) into the momentum restart branch. simple01-td-repair.ok conflicted: master dropped the startpoint TNS column from the repair_timing progress table (The-OpenROAD-Project#11455) while this branch changed the placement trajectory. Regenerate the golden from the merged build; it differs from the previous branch golden only in the table columns, the placement results are unchanged. Follow master's test naming change (cae9bfe) in the new simple01-td-restart test by calling diff_files instead of the diff_file abbreviation. Signed-off-by: Jaehyun Kim <jhkim@precisioninno.com>
There was a problem hiding this comment.
Code Review
This pull request introduces a mechanism to restart FISTA momentum in the Nesterov loop after a non-virtual timing-driven iteration replaces the design topology. By resetting the momentum coefficient (curA to 1.0), the placer avoids extrapolating stale pre-repair trajectories onto the updated objective, preventing placement divergence. The changes include introducing the reset_nesterov_momentum_ flag, logging the restart event, adding a new regression test (simple01-td-restart), and updating test reference outputs. There are no review comments provided, so I have no feedback to offer.
|
This should require metrics update, I understand. |
Address review: remove the comments at the restart request in runTimingDriven() and at the restart in doNesterovPlace(). The comment on the reset_nesterov_momentum_ member already explains the mechanism. Signed-off-by: Jaehyun Kim <jhkim@precisioninno.com>
|
I wouldn't call this a workaround, I would call this a legit fix! I tried resetting the gradients in the past but it didn't work. Some folks from a PII client also tried resetting gradients and also weren't successful. This seems like a simple and elegant solution to the problem. I experimented this idea on other divergences occurrences and it does help. A PR is open ATM: #11560 For posterity, here are some results from the dashboard: Clear improvement in TNS and WNS at GPL: Final TNS and WNS, we observe a weak correlation, positive mean nonetheless: |
gpl: revert PR #11553 for momentum reset



Summary
QoR analysis
Commits used for the BASE and TEST
secure-base-0903)7daaaed55b63f16ad43f54c5e743ae751e5be354(master, 2026-09-09 19:07 UTC)c6c0900a1619481c3e09a75c7af410befc8f900e(26Q3-1953, 2026-09-09 16:21 UTC)secure-td-gpl-momentum-fix)16ead012a2f7f1e1e92f230596f7defa3ff3dd80(7daaaed55 + OR bump)cd73f911f7d22341e45df1e56a55020e05a6d148(c6c0900 + this fix, identical content to this PR)CI runs
ORFS QoR, BASE vs TEST (final stage; asap7 values in ps, all others in ns; dWL is detailed-route wirelength)
Result (62 designs)