gpl: fix incremental mode#9610
Conversation
refresh isConverged for second incremental stage anticipate setting instances as locked, fix considering locked instances at initial placement 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>
… all unlocked) 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>
|
This changes should be no-op for master (since during stage 3-4 we rsz is not performing any modification on I triggered a secure-CI at: https://jenkins.openroad.tools/blue/organizations/jenkins/OpenROAD-flow-scripts-Private/detail/secure-gpl-fix-incremental/4/pipeline |
There was a problem hiding this comment.
Code Review
This pull request introduces several fixes and improvements for the incremental global placement mode. The changes to handle locked instances within the Nesterov placer and the enhancements to debug visualization appear correct and well-implemented. However, I've identified a potential issue in the initial placement logic that may not correctly fix locked instances to their positions. Additionally, there's a minor point of improvement in the heuristics for the final placement stage.
| if (inst->isLocked()) { | ||
| listX.emplace_back(idx, idx, 1.0f); | ||
| listY.emplace_back(idx, idx, 1.0f); | ||
| fixedInstForceVecX_(idx) = inst->cx(); | ||
| fixedInstForceVecY_(idx) = inst->cy(); | ||
| } |
There was a problem hiding this comment.
While adding a diagonal term to the matrix for locked instances is a step towards fixing their positions, this implementation is incomplete and may not work as intended. The subsequent loop that processes nets will add significant forces from connected movable instances, effectively pulling the 'locked' instances away from their fixed positions. With large net weights, a locked instance's position will be dominated by its neighbors rather than its specified fixed location.
To correctly fix the instances, they should be treated as fixed terminals throughout the matrix construction. This means the net processing loop should not add any matrix terms for connections involving locked instances; instead, they should contribute to the right-hand side (force vector) for any movable instances they are connected to.
There was a problem hiding this comment.
The secure-CI run with ID 5 should address this. I am waiting for it to finish to make sure it is no-op, as expected.
|
clang-tidy review says "All clean, LGTM! 👍" |
2 similar comments
|
clang-tidy review says "All clean, LGTM! 👍" |
|
clang-tidy review says "All clean, LGTM! 👍" |
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>
|
clang-tidy review says "All clean, LGTM! 👍" |
1 similar comment
|
clang-tidy review says "All clean, LGTM! 👍" |
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
|
clang-tidy review says "All clean, LGTM! 👍" |
|
I noticed gpl incremental in stage 3-4 is potentially resetting the whole placement and undoing RD and TD work! I created a separated PR for skipping incremental when we don't find any unlocked instances at: #9650 |
|
clang-tidy review says "All clean, LGTM! 👍" |

This PR fixes multiple issues occurring in gpl incremental mode.
Changes include:
This PR addresses issue #9542