-
Notifications
You must be signed in to change notification settings - Fork 400
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
Congestion placement #2384
Congestion placement #2384
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -397,6 +397,8 @@ struct ParsePlaceAlgorithm { | |
conv_value.set_value(CRITICALITY_TIMING_PLACE); | ||
} else if (str == "slack_timing") { | ||
conv_value.set_value(SLACK_TIMING_PLACE); | ||
} else if (str == "congestion_aware"){ | ||
conv_value.set_value(CONGESTION_AWARE_PLACE); | ||
} else { | ||
std::stringstream msg; | ||
msg << "Invalid conversion from '" << str << "' to e_place_algorithm (expected one of: " << argparse::join(default_choices(), ", ") << ")"; | ||
|
@@ -418,6 +420,8 @@ struct ParsePlaceAlgorithm { | |
conv_value.set_value("bounding_box"); | ||
} else if (val == CRITICALITY_TIMING_PLACE) { | ||
conv_value.set_value("criticality_timing"); | ||
} else if (val == CONGESTION_AWARE_PLACE) { | ||
conv_value.set_value("congestion_aware"); | ||
} else { | ||
VTR_ASSERT(val == SLACK_TIMING_PLACE); | ||
conv_value.set_value("slack_timing"); | ||
|
@@ -426,7 +430,7 @@ struct ParsePlaceAlgorithm { | |
} | ||
|
||
std::vector<std::string> default_choices() { | ||
return {"bounding_box", "criticality_timing", "slack_timing"}; | ||
return {"bounding_box", "criticality_timing", "slack_timing", "congestion_aware"}; | ||
} | ||
}; | ||
|
||
|
@@ -1344,6 +1348,8 @@ argparse::ArgumentParser create_arg_parser(std::string prog_name, t_options& arg | |
" Sets the routing congestion drawing state\n" | ||
" * exit <int>\n" | ||
" Exits VPR with specified exit code\n" | ||
" * set_congestion <int>\n" | ||
" Sets the routing congestion drawing state\n" | ||
"\n" | ||
" Example:\n" | ||
" 'save_graphics place.png; \\\n" | ||
|
@@ -1928,9 +1934,10 @@ argparse::ArgumentParser create_arg_parser(std::string prog_name, t_options& arg | |
"Controls which placement algorithm is used. Valid options:\n" | ||
" * bounding_box: Focuses purely on minimizing the bounding box wirelength of the circuit. Turns off timing analysis if specified.\n" | ||
" * criticality_timing: Focuses on minimizing both the wirelength and the connection timing costs (criticality * delay).\n" | ||
" * slack_timing: Focuses on improving the circuit slack values to reduce critical path delay.\n") | ||
" * slack_timing: Focuses on improving the circuit slack values to reduce critical path delay.\n" | ||
" * congestion_aware: Focuses on improving routability.\n") | ||
.default_value("criticality_timing") | ||
.choices({"bounding_box", "criticality_timing", "slack_timing"}) | ||
.choices({"bounding_box", "criticality_timing", "slack_timing", "congestion_aware"}) | ||
.show_in(argparse::ShowIn::HELP_ONLY); | ||
|
||
place_grp.add_argument<e_place_algorithm, ParsePlaceAlgorithm>(args.PlaceQuenchAlgorithm, "--place_quench_algorithm") | ||
|
@@ -1940,9 +1947,10 @@ argparse::ArgumentParser create_arg_parser(std::string prog_name, t_options& arg | |
"Valid options:\n" | ||
" * bounding_box: Focuses purely on minimizing the bounding box wirelength of the circuit. Turns off timing analysis if specified.\n" | ||
" * criticality_timing: Focuses on minimizing both the wirelength and the connection timing costs (criticality * delay).\n" | ||
" * slack_timing: Focuses on improving the circuit slack values to reduce critical path delay.\n") | ||
" * slack_timing: Focuses on improving the circuit slack values to reduce critical path delay.\n" | ||
" * congestion_aware: Focuses on improving routability.\n") | ||
.default_value("criticality_timing") | ||
.choices({"bounding_box", "criticality_timing", "slack_timing"}) | ||
.choices({"bounding_box", "criticality_timing", "slack_timing", "congestion_aware"}) | ||
.show_in(argparse::ShowIn::HELP_ONLY); | ||
|
||
place_grp.add_argument(args.PlaceChanWidth, "--place_chan_width") | ||
|
@@ -2130,6 +2138,14 @@ argparse::ArgumentParser create_arg_parser(std::string prog_name, t_options& arg | |
" 0.0 focuses completely on wirelength, 1.0 completely on timing") | ||
.default_value("0.5") | ||
.show_in(argparse::ShowIn::HELP_ONLY); | ||
|
||
place_timing_grp.add_argument(args.CongestionTradeoff, "--congest_tradeoff") | ||
.help( | ||
"Trade-off control the bouding value for the contestion matrix.\n" | ||
" a value near routing channel width can be a good value.\n" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. If congest_tradeoff was supposed to be something similar to timing_tradeoff, it should take a value betwen 0 and 1. If not, congest_tradeoff is not a good name for the new option. We already have a place_chan_width command line option that takes the routing channel width for placement purposes. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Misspelled word : bouding -> bounding |
||
" a high value let the VPR to ignore the congestion aware placement and continue its own course of action.\n") | ||
.default_value("1.0") | ||
.show_in(argparse::ShowIn::HELP_ONLY); | ||
|
||
place_timing_grp.add_argument(args.RecomputeCritIter, "--recompute_crit_iter") | ||
.help("Controls how many temperature updates occur between timing analysis during placement") | ||
|
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.
I think it is better to explain how being congestion aware would result in better routability.