Skip to content

par: account for cut delay in timing-aware refinement - #12076

Open
Chaitanya-970 wants to merge 3 commits into
The-OpenROAD-Project:masterfrom
Chaitanya-970:fix-11982-partition-cut-delay
Open

Chaitanya-970 wants to merge 3 commits into
The-OpenROAD-Project:masterfrom
Chaitanya-970:fix-11982-partition-cut-delay

Conversation

@Chaitanya-970

@Chaitanya-970 Chaitanya-970 commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

Summary

-extra_delay had no effect on partition optimization unless guardbanding was enabled. Account for the delay of each partition boundary when calculating path costs and refinement gains.

The per-cut penalty applies only when -extra_delay is explicitly provided. Runs that omit it keep their existing behavior.

Type of Change

  • Bug fix
  • Documentation update

Impact

An explicit cut delay can favor fewer critical-path cuts at the cost of more cut nets. The default 1 ns delay remains in use for timing-cut statistics and the optional slack guardband.

Update gains along affected timing paths without modifying shared timing data, and document how cut delay and guardbanding interact.

Verification

  • Built with Bazel; all 11 partitioner test targets pass.
  • Added C++ tests for path costs, move gains, refinement, and default reporting.
  • Added Tcl and Python tests for omitted, explicit 1 ns, and zero delay.
  • Existing partition and Verilog tests pass with their original golden files.
  • GCD and AES default partitions match the original baseline.
  • Checked all six reported explicit-delay combinations and repository formatting.

Related Issues

Fixes #11982

Include each path boundary's estimated delay in candidate path costs and
move gains, even when guardbanding is disabled. Refresh gains along affected
timing paths and count repeated coarse-path incidences only once.

Add evaluator, gain, refinement and command regressions, update the default
GCD results, and document the delay model and optional guardband.

Fixes The-OpenROAD-Project#11982

Signed-off-by: Chaitanya-970 <chaitanyabh97@gmail.com>
@Chaitanya-970
Chaitanya-970 requested a review from a team as a code owner October 30, 2026 14:10

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request enhances the timing-aware partitioning algorithm in the par module by integrating estimated cut delays directly into path costs and timing-cut statistics during refinement. It updates GoldenEvaluator and Refiner to dynamically compute path timing scores based on the number of cuts and the -extra_delay parameter, and adjusts neighbor-finding logic to propagate gains along timing paths. A new test suite (TestCutDelay) and integration tests are added to verify these changes. The review feedback recommends optimizing the hot path in GoldenEvaluator::GetPathTimingScore by bypassing std::pow when the timing exponent is 1.0f and using float literals to avoid implicit double promotion.

Comment thread src/par/src/Evaluator.cpp Resolved
Signed-off-by: Chaitanya-970 <chaitanyabh97@gmail.com>
@maliberty

Copy link
Copy Markdown
Member

Why change the default behavior?

- question (main): the default behavior changes. With the default 1e-9 extra_delay, the cut term is
  ~2x the clock period per cut on gcd, so timing completely outweighs cutsize. Total cut nets go 37 → 59 (+59%)
  on gcd and 154 → 165 on AES. Is the larger cutsize acceptable as a new default? Options:
  default -extra_delay to 0 or a fraction of the clock period, or apply the per-cut term only when
  -extra_delay is set explicitly.

@Chaitanya-970

Copy link
Copy Markdown
Contributor Author

Why change the default behavior?

- question (main): the default behavior changes. With the default 1e-9 extra_delay, the cut term is
  ~2x the clock period per cut on gcd, so timing completely outweighs cutsize. Total cut nets go 37 → 59 (+59%)
  on gcd and 154 → 165 on AES. Is the larger cutsize acceptable as a new default? Options:
  default -extra_delay to 0 or a fraction of the clock period, or apply the per-cut term only when
  -extra_delay is set explicitly.

ahh yes, applying 1 ns to the new cost changed the partitioning too much.

i’ll apply the per-cut penalty only when -extra_delay is explicitly provided.

Track whether extra_delay was supplied through Tcl and the Python helper. Preserve the existing delay for guardbanding and timing-cut statistics while leaving default refinement unchanged.

Restore the original GCD golden files and cover omitted, explicit default, and zero delays in Tcl, Python, and evaluator tests.

Signed-off-by: Chaitanya-970 <chaitanyabh97@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

par: triton_part_design -extra_delay does not change the partition unless -guardband_flag true (GoldenEvaluator::UpdateTiming has no caller)

2 participants