Gpl incremental - #11596
Gpl incremental#11596LucasYuki wants to merge 12 commits into
Conversation
Signed-off-by: LucasYuki <lucasyuki@yahoo.com.br>
Signed-off-by: LucasYuki <lucasyuki@yahoo.com.br>
…sityPenaltyGuard Signed-off-by: LucasYuki <lucasyuki@yahoo.com.br>
There was a problem hiding this comment.
Code Review
This pull request introduces an incremental density-penalty guard and a filler cell redistribution mechanism to improve convergence and stability during incremental placement. Key changes include the addition of redistributeFillerCells in NesterovBase to distribute filler cells into free bin capacity, and the implementation of guardIncrementalDensityPenalty in NesterovPlace to escalate the density penalty factor when overflow regresses. Feedback on these changes highlights several critical improvement opportunities: adding defensive null checks for np_ in replace.cpp to prevent potential segmentation faults, capping the density penalty growth factor to avoid numerical overflow or NaN propagation, and validating or resetting coordinates if Phase 1 diverges before proceeding to Phase 2.
|
I ran the flow with these modifications (using The-OpenROAD-Project/OpenROAD-flow-scripts#4594).
Of these designs, only the asap7 / cva6 reached the second phase, and in this phase (with all instances unlocked) only 6 iterations were necessary to reach the target overflow. This is the design that was having a lot of degradation due to the incremental mode, as described in issue 11358. The final timing metrics of these designs were: Setup WS (ns)
Setup TNS (ns)
Hold WS (ns)
Fmax (MHz)
Setup Violation Count
|
Signed-off-by: LucasYuki <lucasyuki@yahoo.com.br>
Signed-off-by: LucasYuki <lucasyuki@yahoo.com.br>
|
Codex:
|
|
Claude: == Priority 1 (correctness) ==
== Priority 3 (testing) ==
|
Signed-off-by: LucasYuki <lucasyuki@yahoo.com.br>
Signed-off-by: LucasYuki <lucasyuki@yahoo.com.br>
Signed-off-by: LucasYuki <lucasyuki@yahoo.com.br>
Signed-off-by: LucasYuki <lucasyuki@yahoo.com.br>
Signed-off-by: LucasYuki <lucasyuki@yahoo.com.br>
Signed-off-by: LucasYuki <lucasyuki@yahoo.com.br>
|
@maliberty, I fixed the issues that Claude and Gemini. Fixed (
Confirmed, no change needed:
Priority 2 (QoR) — here's the real data: Real before/after ORFS output for the four designs this PR actually touches (confirmed separately that the other 63 of 68 common designs produce byte-identical Peak overflow reached during global placement (lower is better):
Final timing, from
Summary: setup slack/TNS improves on all four, hold slack is roughly flat, fmax is flat-to-slightly-better, and setup violation count improves on three of four — Separately, On the odb test's "locked cells can't converge" warning sign: dug into the actual legalization numbers in Still open — acknowledging rather than claiming fixed:
|
|
@gudeh merge when you are satisfied and approve |
Summary
Reworks GPL's incremental placement (
Replace::doIncrementalPlace()), which places newly-added/unplaced instances with everything else locked:NesterovPlace::getAverageOverflow(), not just a fixed proxy threshold), recovers from phase-1 divergence instead of letting it abort the whole incremental call, and escalates (doubles) the density penalty in place whenever overflow regresses past its best-seen value, instead of applying one fixed penalty and hoping it converges.Type of Change
Impact
PlaceOptions; behavior changes are internal todoIncrementalPlace().Verification
./etc/Build.sh).Related Issues