Skip to content

[ClusterLegalizer] Cleaned Up Cluster Placement Stats #2728

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

Conversation

AlexandreSinger
Copy link
Contributor

Removed external access to the cluster placement stats.

Made the cluster placement info private for each cluster. The cluster placement info of each cluster was being shared per cluster type. This caused issues when two clusters were being created at the same time.

@github-actions github-actions bot added VPR VPR FPGA Placement & Routing Tool libarchfpga Library for handling FPGA Architecture descriptions lang-cpp C/C++ code labels Sep 17, 2024
@AlexandreSinger
Copy link
Contributor Author

VTR Results:

  vtr_parse_results_legalizer.txt parse_results_new_legalizer.txt
vtr_flow_elapsed_time 1 1.021650042
odin_synth_time    
parmys_synth_time 1 0.999246531
abc_depth 1 1
abc_synth_time 1 1.006581805
num_clb 1 0.999327261
num_memories 1 1
num_mult 1 1
max_vpr_mem 1 1.009962447
num_pre_packed_blocks 1 1
num_post_packed_blocks 1 0.999793597
device_grid_tiles 1 0.999267664
pack_time 1 1.071846971
placed_wirelength_est 1 1.000075079
place_time 1 0.978678405
placed_CPD_est 1 0.999502821
min_chan_width 1 0.998666868
routed_wirelength 1 0.992543873
min_chan_width_route_time 1 1.064750414
crit_path_routed_wirelength 1 0.991811581
critical_path_delay 1 1.006753785
geomean_nonvirtual_intradomain_critical_path_delay 1 1.007078544
crit_path_route_time 1 0.967975153

As expected, the runtime of the packer increased slightly due to this change. This is because a data structure is now being created per cluster instead of per logic block type. Will run Titan to ensure the runtime increase is not too large.

Raw results:
vtr_old_v_new.xlsx

@AlexandreSinger
Copy link
Contributor Author

Titan results:

  tan_parse_results_legalizer.txt parse_results_new_legalizer.txt
vtr_flow_elapsed_time 1 1.047841819
num_LAB 1 0.999095457
num_DSP 1 1
num_M9K 1 1
num_M144K 1 1
max_vpr_mem 1 1.015864127
num_pre_packed_blocks 1 1
num_post_packed_blocks 1 0.99914983
device_grid_tiles 1 0.999284855
pack_time 1 1.079054892
placed_wirelength_est 1 0.995888122
place_time 1 1.067726331
placed_CPD_est 1 0.992960886
routed_wirelength 1 0.996480931
critical_path_delay 1 0.981249309
geomean_nonvirtual_intradomain_critical_path_delay 1 0.996111084
crit_path_route_time 1 0.991888639

Pack time seems to have gone up slightly (8%) but quality seems to be a win across the board interestingly enough.

Here are the raw results:
titan_legalizer_comparison.xlsx

I will update your comments @vaughnbetz and update the golden results.

@AlexandreSinger
Copy link
Contributor Author

@vaughnbetz Actually the Titan result is quite interesting. This should not really have a huge quality difference; yet CPD went down by 2%. I think this may show how much the packing quality affects QoR.

@vaughnbetz
Copy link
Contributor

Interesting! I wonder what is different. In any case I'm fine with merging this. I suggest rebasing / updating the branch and kicking off CI again.
Still worth looking at the cluster placement stats data structure, know that you know updates to it consume over 8% of placement time, but it isn't gating for this PR.

@AlexandreSinger AlexandreSinger force-pushed the feature-cluster-legalizer-api branch 2 times, most recently from 1d3eb07 to 2a1703a Compare September 19, 2024 11:06
Removed external access to the cluster placement stats.

Made the cluster palcement info private for each cluster. The cluster
placement info of each cluster was being shared per cluster
type. This caused issues when two clusters were being created at the
same time.
@AlexandreSinger AlexandreSinger force-pushed the feature-cluster-legalizer-api branch from 2a1703a to fda766d Compare September 20, 2024 00:40
@AlexandreSinger
Copy link
Contributor Author

@vaughnbetz This is now passing CI and I think it is ready to merge.

I had to disable one of the figure_8 tasks in the odin nightly test 1, since it had an issue where it would find a low minimum channel width, then use a higher one to route; but the higher one was unroutable (I wish there was some way to detect that):
image

I also increased the minimum channel width for verify rr graph for odin reg strong. I just made it match the regular reg strong.
image

Both of these were in the Odin tests, so I do not think there is much harm in changing them. The other golden results were updated using the standard method.

@vaughnbetz vaughnbetz merged commit 859198c into verilog-to-routing:master Sep 20, 2024
53 checks passed
@AlexandreSinger AlexandreSinger deleted the feature-cluster-legalizer-api branch November 27, 2024 19:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
lang-cpp C/C++ code libarchfpga Library for handling FPGA Architecture descriptions VPR VPR FPGA Placement & Routing Tool
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants