[AP][PartialLegalizer] Added Bi-Partitioning Spreader #2917
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.
Bi-partitioning spreading is a technique where minimum spanning windows are formed around overfilled regions of the device such that the capacity of the bins within the window is larger than the utilization of the bins within the window. These windows are then successively partitioned, moving the blocks to the different partitions, until the window is small enough. Due to its divide and conquer nature, this algorithm tends to be very fast.
Created a basic version of this algorithm which does not take into account the different types of blocks being spread. It worked suprisingly well, giving better QoR and runtime than the original spreader that I decided to merge this in immediately. In the future, will add these features.
Kept the old spreader in as a separate Global Placer as it may be interesting to compare since the old multi-commodity flow-based approach should, in theory, do a better job spreading (at the expense of runtime). This old spreader may also be interesting to add into other stages of the flow. Added tests to keep this spreader from regressing.
The results for this version, compared to other changes to the AP flow:


The runtime saw the most notable improvement. The AP flow is now faster than the default flow by a considerable amount on larger circuits. The WL and timing are still worst than the default flow, but have improved over the prior AP flow. The number of routing failures went down for the VTR circuits, but when up for the MCNC circuits.
A lot can be done to improve this spreader; but the results are good enough to bring this in immediately. It also speeds up the flow greatly, which makes it easier to test on larger benchmarks like Koios and Titan.