-
Notifications
You must be signed in to change notification settings - Fork 408
[Pack][Timing] Pre-Cluster Timing Analysis May Not Be Aware of Molecules #2972
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
Comments
I like the plan. Thanks Alex.On Apr 11, 2025, at 6:09 PM, AlexandreSinger ***@***.***> wrote:
The PreClusterDelayCalculator computes the max edge delay of a timing connection in the following function:
https://github.com/verilog-to-routing/vtr-verilog-to-routing/blob/d6fe4b509ef5d3f24891e3b88da301d0e011e176/vpr/src/timing/PreClusterDelayCalculator.h#L30-L46
All nets that connect atom blocks together are labelled as INTERCONNECT in the timing_graph_builder here:
https://github.com/verilog-to-routing/vtr-verilog-to-routing/blob/d6fe4b509ef5d3f24891e3b88da301d0e011e176/vpr/src/timing/timing_graph_builder.cpp#L297-L302
https://github.com/verilog-to-routing/vtr-verilog-to-routing/blob/d6fe4b509ef5d3f24891e3b88da301d0e011e176/vpr/src/timing/timing_graph_builder.cpp#L670-L690
The timing graph is created before clustering. The prepacker then occurs after creating the timing graph, but before clustering. The prepacker will pre-cluster atoms together. These molecules will be observed by the packer (i.e. molecules will not get broken). Since the timing graph was created before the prepacker and it does not get updated after prepacking (as far as I am aware), this implies that the max edge delay computed by this calculator is not taking the prepacked molecules into account.
If a timing graph edge is between two atoms within the same molecule, the internal delay of that implemented molecule should be used instead of the inter_cluster_net_delay value.
Proposed next steps:
Verify that the assumptions above is true by adding an assertion within the max_edge_delay. The PreClusterDelayCalculator has access to the prepacker, it can check if two atoms are in the same molecule.
If we verify that this is correct, we should add a case to this method which will check if the edge is absorbed into a molecule and use the more accurate gain in this case.
Verify the pre-clustering timing report to ensure that the molecule delays are being observed.
See #2965 (comment) for context
@vaughnbetz Let me know if I am missing anything here.—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you were mentioned.Message ID: ***@***.***>
AlexandreSinger created an issue (verilog-to-routing/vtr-verilog-to-routing#2972)
The PreClusterDelayCalculator computes the max edge delay of a timing connection in the following function:
https://github.com/verilog-to-routing/vtr-verilog-to-routing/blob/d6fe4b509ef5d3f24891e3b88da301d0e011e176/vpr/src/timing/PreClusterDelayCalculator.h#L30-L46
All nets that connect atom blocks together are labelled as INTERCONNECT in the timing_graph_builder here:
https://github.com/verilog-to-routing/vtr-verilog-to-routing/blob/d6fe4b509ef5d3f24891e3b88da301d0e011e176/vpr/src/timing/timing_graph_builder.cpp#L297-L302
https://github.com/verilog-to-routing/vtr-verilog-to-routing/blob/d6fe4b509ef5d3f24891e3b88da301d0e011e176/vpr/src/timing/timing_graph_builder.cpp#L670-L690
The timing graph is created before clustering. The prepacker then occurs after creating the timing graph, but before clustering. The prepacker will pre-cluster atoms together. These molecules will be observed by the packer (i.e. molecules will not get broken). Since the timing graph was created before the prepacker and it does not get updated after prepacking (as far as I am aware), this implies that the max edge delay computed by this calculator is not taking the prepacked molecules into account.
If a timing graph edge is between two atoms within the same molecule, the internal delay of that implemented molecule should be used instead of the inter_cluster_net_delay value.
Proposed next steps:
Verify that the assumptions above is true by adding an assertion within the max_edge_delay. The PreClusterDelayCalculator has access to the prepacker, it can check if two atoms are in the same molecule.
If we verify that this is correct, we should add a case to this method which will check if the edge is absorbed into a molecule and use the more accurate gain in this case.
Verify the pre-clustering timing report to ensure that the molecule delays are being observed.
See #2965 (comment) for context
@vaughnbetz Let me know if I am missing anything here.
—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you were mentioned.Message ID: ***@***.***>
|
# for free
to join this conversation on GitHub.
Already have an account?
# to comment
The PreClusterDelayCalculator computes the max edge delay of a timing connection in the following function:
vtr-verilog-to-routing/vpr/src/timing/PreClusterDelayCalculator.h
Lines 30 to 46 in d6fe4b5
All nets that connect atom blocks together are labelled as INTERCONNECT in the timing_graph_builder here:
vtr-verilog-to-routing/vpr/src/timing/timing_graph_builder.cpp
Lines 297 to 302 in d6fe4b5
vtr-verilog-to-routing/vpr/src/timing/timing_graph_builder.cpp
Lines 670 to 690 in d6fe4b5
The timing graph is created before clustering. The prepacker then occurs after creating the timing graph, but before clustering. The prepacker will pre-cluster atoms together. These molecules will be observed by the packer (i.e. molecules will not get broken). Since the timing graph was created before the prepacker and it does not get updated after prepacking (as far as I am aware), this implies that the max edge delay computed by this calculator is not taking the prepacked molecules into account.
If a timing graph edge is between two atoms within the same molecule, the internal delay of that implemented molecule should be used instead of the inter_cluster_net_delay value.
Proposed next steps:
See #2965 (comment) for context
@vaughnbetz Let me know if I am missing anything here.
The text was updated successfully, but these errors were encountered: