gpl: min tile congestion inflation #10977
Conversation
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>
…min-congestion-inflation
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
There was a problem hiding this comment.
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.
| } | ||
|
|
||
| if (!inflation_ratios.empty()) { | ||
| std::ranges::sort(inflation_ratios.begin(), inflation_ratios.end()); |
There was a problem hiding this comment.
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.
| std::ranges::sort(inflation_ratios.begin(), inflation_ratios.end()); | |
| std::ranges::sort(inflation_ratios); |
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>
|
We do require less gpl iterations during routability mode with this modification. This plot shows the delta versus master. 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. |



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
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
./etc/Build.sh).Related Issues