-
Notifications
You must be signed in to change notification settings - Fork 414
VPR Placer runtime issue when all design clusters have fixed locations #2484
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
Comments
Thank you for opening this issue. It seems that some move generators call pick_from_block() function to select a block randomly. This function has a while loop that tries to find a movable block. Since all blocks in your run are fixed, this loop's exit condition is not met until all possible options (all clustered blocks) are exhaused. vtr-verilog-to-routing/vpr/src/place/move_utils.cpp Lines 595 to 626 in 451fb4d
If you want to skip placement altogether, I guess you can pass the placement file using --place_file option. @vaughnbetz What is you opinion on this? Should I change pick_from_block() function? We can fix this by trying only a few clustered blocks to find a movable one. Alternatively, we can store all movable blocks in a separate container and select an element of this container randomly. |
Thanks @soheilshahrouz . Probably we should put all the movable blocks (and only movable blocks) in a container and select them randomly, so we are always efficient. |
I was able to convert a .fix_clusters file to a .place file by including '0' subtile entry for all entries and appending netlist checksum and array information as a header. By passing the .place file using the --place_file option, router ran successfully (and much faster) and the results are the same. Thank you |
Great, thanks Rachel. I think without the checksum it will just give a warning, so if that's a pain to maintain I think you can skip it (it's intended to protect people from accidentally using a .place file for the wrong circuit or architecture). |
I was able to obtain the netlist checksum and array size information from runs that did not fix all clusters in the .fix_clusters file. In addition, VPR placer errors out if the .place file doesn't have these 3 lines in its header
Without either (or 3 empty lines as header), placer errors out at the first entry:
_
If only the checksum and array size is provided without an empty line, the placer errors out: _
_ For gaussianblur, the .place file generated by VPR placer contains this header:
|
Thanks; we should probably make this a bit more robust (keep parsing and give a warning). |
VPR Placer has a large runtime when all the input design clusters have fixed locations.
Expected Behaviour
When all clusters are fixed, VPR's place stage should complete very fast as all the clusters are already placed.
Current Behaviour
When all clusters have fixed locations, VPR's placer takes very long time to complete. In contrast, when only IO/PLL clusters are fixed, VPR's placer using annealing completes much faster.
Example / Steps to Reproduce
Used the Titan23 benchmarks and all designs have similar behavior. Sharing example from 'gaussianblur' design to show how large the runtime difference can be.
(i) All cluster locations are fixed
Command:
_
_
Placement Snippet from vpr_stdout.log:
(Ii) Only IO/PLL cluster locations are fixed:
Command:
_
_
Placement Snippet from vpr_stdout.log:
Inputs for the above example can be found in this shared drive.
Context
Trying to compare 'no refinement' vs 'refinement' of cluster locations in VPR.
Your Environment
The text was updated successfully, but these errors were encountered: