-
Notifications
You must be signed in to change notification settings - Fork 428
[AP][Solver][3D] 3D AP Solver Support #3265
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
base: master
Are you sure you want to change the base?
[AP][Solver][3D] 3D AP Solver Support #3265
Conversation
Upgraded the solver in the AP flow to support a "Z" dimension representing the layer. This code only kicks on when the architecture has more than one layer, since in the single layer case there is no point to compute the Z dimension.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, but a few comments embedded.
Should also add a before and after runtime etc. comparison on the 2D case.
// For multi-die FPGAs, we apply extra weight in the layer dimension | ||
// since moving between layers tends to cost more wiring than moving | ||
// within the same layer. | ||
double multidie_net_w = wl_net_w * layer_distance_cost_fac_; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
How is this set? Ideally we'd set these as 1/wiring supply for each dimension. Note that x and y should have different factors too when the wiring supply in each dimension is different (e.g. S10, 7-series)
|
||
/// @brief For most FPGA architectures, the cost of moving horizontally is | ||
/// equivalent to the cost moving vertically (i.e. moving in increasing | ||
/// x-dimension has the same cost as moving the same amount in the |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not true for S10 and 7-series (different wiring supplies). Also may not be true for timing in many architectures.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should be able to get these cost factors from some Soheil/Amin code in the annealer (they compute prefix sums of wiring supply in each dimension; should be able to ask for total wiring in x or y or z from them.
// (other than the first iteration). These are stored to be used as anchor | ||
// blocks during the solver. | ||
vtr::vector<APBlockId, double> block_x_locs_legalized; | ||
vtr::vector<APBlockId, double> block_y_locs_legalized; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Probably want to say that for speed, the various _z values are ignored / not updated or used if a device has only one die.
<add_atom name_pattern="out:p_45" /> | ||
</partition> | ||
<partition name="p_48"> | ||
<add_region subtile="-1" layer_low="1" layer_high="1" x_low="9" x_high="9" y_low="8" y_high="8" /> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do you want all the IOs on layer 1? Or would it be a stronger test if there were some on each layer?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For this specific example, the IOs are only located on layer 1 and the CLBs are located on layer 0. This is a simple test architecture to just ensure that different blocks are placed on different layers.
Upgraded the solver in the AP flow to support a "Z" dimension representing the layer. This code only kicks on when the architecture has more than one layer, since in the single layer case there is no point to compute the Z dimension.