Skip to content

gpl: min tile congestion inflation #10977

Open
gudeh wants to merge 38 commits into
The-OpenROAD-Project:masterfrom
gudeh:gpl-min-congestion-inflation
Open

gpl: min tile congestion inflation #10977
gudeh wants to merge 38 commits into
The-OpenROAD-Project:masterfrom
gudeh:gpl-min-congestion-inflation

Conversation

@gudeh

@gudeh gudeh commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Summary

This PR transforms an existing fixed value into a tunable TCL parameter (routability_min_congestion_for_inflation). It is also modifies the default from 1.01 to 0.95.

When in routability mode, we check each congestion tile, and we only inflate the instances within such tile if it is above the min congestion variable. In other words, this variable is a threshold to apply the inflation to instances or not, depending on the calculated congestion (RUDY) at the tile.

Type of Change

  • Refactoring

Impact

Experiments show we require far less routability reverts with a lower min tile congestion inflation value.

With the lower min congestion the reach of inflation goes further away from the center of a congestion hotspot.

Verification

  • I have verified that the local build succeeds (./etc/Build.sh).
  • I have run the relevant tests and they pass.
  • My code follows the repository's formatting guidelines.
  • I have signed my commits (DCO).

Related Issues

gudeh added 30 commits December 13, 2025 13:12
this parameter is a threshold for how much congestion in a tile is required to trigger inflation on its cells

Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
reducing this value we extend the reach of cells to be inflated

Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
incorrect README value for min inflation, and maintain consistency between GRT and RUDY versions

Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
@gudeh
gudeh requested a review from a team as a code owner July 23, 2026 13:22
@gudeh
gudeh requested a review from LucasYuki July 23, 2026 13:22

@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 introduces a new option -routability_min_congestion_for_inflation to control the minimum congestion threshold for tile inflation, updates the inflation ratio calculation accordingly, and adds detailed logging and statistics for inflation ratios. The review feedback highlights critical issues including potential division-by-zero errors if the threshold is set to 0.0, a potential crash in the new printGCellInflation function due to unsafe vector indexing, a discrepancy between the documented and actual default values for the new option, and a minor C++20 sorting style improvement.

Comment thread src/gpl/src/routeBase.cpp Outdated
Comment thread src/gpl/src/routeBase.cpp Outdated
Comment thread src/gpl/src/routeBase.cpp
Comment thread src/gpl/README.md Outdated
Comment thread src/gpl/src/routeBase.cpp
}

if (!inflation_ratios.empty()) {
std::ranges::sort(inflation_ratios.begin(), inflation_ratios.end());

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.

medium

Using std::ranges::sort with iterator pairs is less idiomatic in C++20. It is cleaner and more consistent with other parts of the codebase (such as line 1111) to pass the container directly.

Suggested change
std::ranges::sort(inflation_ratios.begin(), inflation_ratios.end());
std::ranges::sort(inflation_ratios);

gudeh added 3 commits July 23, 2026 13:25
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
@gudeh

gudeh commented Jul 24, 2026

Copy link
Copy Markdown
Contributor Author

We do require less gpl iterations during routability mode with this modification. This plot shows the delta versus master.
image

data source:https://docs.google.com/spreadsheets/d/1HL--4oBzEjAHPVs7d092-1V5ALQ2_9jb4luOAxUW9M8/edit?usp=sharing

from secure-CI:https://jenkins.openroad.tools/job/OpenROAD-flow-scripts-Private/job/secure-gpl-min-congestion-inflation/

We also go from 42 to 46 designs that successfully achieve the target congestion.

@gudeh

gudeh commented Jul 24, 2026

Copy link
Copy Markdown
Contributor Author

In the past I opted to not create this PR because I noticed an inverse correlation between routing congestion and timing. Although now this seems at least more subtle.

image image

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.

1 participant