forked from verilog-to-routing/vtr-verilog-to-routing
-
Notifications
You must be signed in to change notification settings - Fork 0
Feature analytical placer profiling #12
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
robluo
wants to merge
33
commits into
AlexandreSinger:feature-analytical-placer
Choose a base branch
from
robluo:feature-analytical-placer-profiling
base: feature-analytical-placer
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Feature analytical placer profiling #12
robluo
wants to merge
33
commits into
AlexandreSinger:feature-analytical-placer
from
robluo:feature-analytical-placer-profiling
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Got the clique net model working end to end. Have not tested for legality. Need to compare it to the star and hybrid net models.
Added the star and hybrid formulations. Lots of duplicate code, but things are working end 2 end. The precision of the timer is annoyingly low, would like to get more precision if possible. Would also like to clean up this code into a class so things can be a bit cleaner.
I have some concerns with this formulation since it is struggling to converge. But this was expected based on the Python implementation.
Made the clique, star, and hybrid models directly sparse. They no longer create a dense matrix before getting the sparse view; they directly generate the sparse matrix. Not sure if this is the most efficient way to do this, but it was simple to do and it did reduce the memory footprint. Timing was not effected for execution.
Changed the B2B matrix representation from a dense matrix being viewed as a sparse matrix to generating the sparse matrix on the fly. This reduced the overall memory usage, but also reduce the runtime of the B2B for the largest circuits by a small amount.
Added AnalyticalSolver and PartialPlacement classes. Built the skeleton of the flow.
Lots of hard-coded parts that need to be resolved but works on simple testcase.
Got stuck. Going to wait to get some advice on this.
Through suggestions from Vaughn, moved to molecules since they are a good estimate for which blocks will go together and make full legalization easier.
Emailed Kate to discuss how she solved these issues.
The AnalyticalSolver class should be easily extendable to allow for the creation of new solvers in the future.
Known bug in the code is conjugate gradient would fail to to no convergence
No more NaN from CG solver. Node does not go outside of the board for mcnc first 200 iterations.
The main issue is including star nodes in solver after initialization. PartialPlacement does not have locations for star nodes.
a work in progress. Known issue is conjugate gradient does not converge.
Known issue is the outer loop does not converge.
However, it converges at a higher value than the clique/star formulation
converges better but worth than clique and star
Instead of just riding off of the old place flow, created a custom argument for Analytical Placement (--analytical_place) which will only run the analytical placement flow (skipping over pack and place). Since the device sizing requires the clustered netlist in order to size the grid, this adds a new requirement where the grid size must now be fixed in the architecture file using tje FPGA Grid Layout.
Instead of iterating over the AtomNetlist, created our own netlist object which is a vector of vectors. This can be made much more efficient by using the Netlist class as a base class; however, doing this now to make is easier. In the process of implementing this feature, fixed a bug in the B2B formulation which was causing it not to converge.
Owner
|
Hi @robluo I like most of these changes! My concern is with the profiling code. Often it is good to only have the profiling code on when you want it. My worry is that the profiling code may slow things down. Can you please either add some IFDEFs to remove them when we are not profiling, or isolate these changes onto a profiling branch? |
Added the ability to export PartialPlacements to the flat placement file format defined by VIPER: https://doi.org/10.1145/3665283.3665300
Abstracted the tile locations into a TileGraph class. Abstracted the architecture information into an Architecture Model class. This creates an easier interface to extend on in the future, as we make the legalizer heterogenous and more powerful.
3559f50 to
84d3b3c
Compare
cd87540 to
294af6d
Compare
9f4abd1 to
d5a2306
Compare
907ae6e to
a76313e
Compare
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Increased the size of fixed block architecture description. Added profiling.