[AP][Solver] Per-Connection Timing Optimization #3155
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The B2B solver originally used a simple net weighting model to incorperate timing into the objective. This works well, but a more direct approach to timing should provide a better solution.
Added extra edges to the B2B formulation which encode per-connection delays into the objective.
Simply, these edges incentivice the solver to shrink the distance between driver and sinks where shrinking that distance would improve the delay the most (focusing more on currently critical edges).
To encode this objective, I compute the instantaneuous derivative of the delay of an connection with respect to the distance (normalized such that the units are not in seconds) and use that as a weight for a pin to pin connection between each driver and its sinks.
More tuning is likely need to find good factors for each term. For now this was what worked well on the VTR benchmarks.