-
Notifications
You must be signed in to change notification settings - Fork 414
[WIP] Router Lookahead Profiler #2683
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?
Changes from 10 commits
739029b
aa5570b
c88364a
d406c57
c86ff7c
ddf34eb
0826ad7
e8ea974
0b5a752
cbe1334
80086ff
c747096
e753094
d9f4ee3
dfab0a8
c9801b7
7fe0b55
c8b196e
ed4460d
ab2c731
2db5325
17ab565
595af59
2f10ec5
9bcad70
c05e498
643811b
1c9bb58
deddc8a
971eebc
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 |
---|---|---|
|
@@ -2626,6 +2626,14 @@ argparse::ArgumentParser create_arg_parser(const std::string& prog_name, t_optio | |
.default_value("map") | ||
.show_in(argparse::ShowIn::HELP_ONLY); | ||
|
||
route_timing_grp.add_argument<bool, ParseOnOff>(args.router_lookahead_profiler, "--router_lookahead_profiler") | ||
.help( | ||
"For every routed sink, records the cost, delay, and congestion estimated by the router lookahead and the " | ||
"actual cost, delay, and congestion, from every node along each route to the sink. These results, along with many " | ||
"other attributes of the node, are recorded into lookahead_verifier_info.csv.") | ||
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. I think the user should be able to specify the file name. |
||
.default_value("off") | ||
.show_in(argparse::ShowIn::HELP_ONLY); | ||
|
||
route_timing_grp.add_argument(args.router_max_convergence_count, "--router_max_convergence_count") | ||
.help( | ||
"Controls how many times the router is allowed to converge to a legal routing before halting." | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -442,7 +442,7 @@ static void add_delay_to_matrix( | |
} | ||
|
||
static void generic_compute_matrix_dijkstra_expansion( | ||
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. It would be good to add a doxygen comment for this, detailing what you know about the function and its arguments (and for sure what the route_profiler does). |
||
RouterDelayProfiler& /*route_profiler*/, | ||
RouterDelayProfiler& route_profiler, | ||
vtr::Matrix<std::vector<float>>& matrix, | ||
int layer_num, | ||
int source_x, | ||
|
@@ -490,7 +490,7 @@ static void generic_compute_matrix_dijkstra_expansion( | |
RRNodeId source_rr_node = device_ctx.rr_graph.node_lookup().find_node(layer_num, source_x, source_y, SOURCE, driver_ptc); | ||
|
||
VTR_ASSERT(source_rr_node != RRNodeId::INVALID()); | ||
auto delays = calculate_all_path_delays_from_rr_node(source_rr_node, router_opts, is_flat); | ||
auto delays = calculate_all_path_delays_from_rr_node(source_rr_node, router_opts, is_flat, route_profiler.get_net_list()); | ||
|
||
bool path_to_all_sinks = true; | ||
for (int sink_x = start_x; sink_x <= end_x; sink_x++) { | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -239,7 +239,7 @@ t_heap* ConnectionRouter<Heap>::timing_driven_route_connection_from_heap(RRNodeI | |
// This is then placed into the traceback so that the correct path is returned | ||
// TODO: This can be eliminated by modifying the actual traceback function in route_timing | ||
if (rcv_path_manager.is_enabled()) { | ||
rcv_path_manager.insert_backwards_path_into_traceback(cheapest->path_data, cheapest->cost, cheapest->backward_path_cost, route_ctx); | ||
rcv_path_manager.insert_backwards_path_into_traceback(cheapest->path_data, cheapest->cost, cheapest->backward_path_cost, cheapest->backward_path_delay, cheapest->backward_path_congestion, route_ctx); | ||
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. long line |
||
} | ||
VTR_LOGV_DEBUG(router_debug_, " Found target %8d (%s)\n", inode, describe_rr_node(device_ctx.rr_graph, device_ctx.grid, device_ctx.rr_indexed_data, inode, is_flat_).c_str()); | ||
break; | ||
|
@@ -552,6 +552,8 @@ void ConnectionRouter<Heap>::timing_driven_add_to_heap(const t_conn_cost_params& | |
// Costs initialized to current | ||
next.cost = std::numeric_limits<float>::infinity(); //Not used directly | ||
next.backward_path_cost = current->backward_path_cost; | ||
next.backward_path_delay = current->backward_path_delay; | ||
next.backward_path_congestion = current->backward_path_congestion; | ||
|
||
// path_data variables are initialized to current values | ||
if (rcv_path_manager.is_enabled() && current->path_data) { | ||
|
@@ -597,6 +599,8 @@ void ConnectionRouter<Heap>::timing_driven_add_to_heap(const t_conn_cost_params& | |
next_ptr->cost = next.cost; | ||
next_ptr->R_upstream = next.R_upstream; | ||
next_ptr->backward_path_cost = next.backward_path_cost; | ||
next_ptr->backward_path_delay = next.backward_path_delay; | ||
next_ptr->backward_path_congestion = next.backward_path_congestion; | ||
next_ptr->index = to_node; | ||
next_ptr->set_prev_edge(from_edge); | ||
|
||
|
@@ -657,6 +661,7 @@ float ConnectionRouter<Heap>::compute_node_cost_using_rcv(const t_conn_cost_para | |
// TODO: This function is not tested for is_flat == true | ||
VTR_ASSERT(is_flat_ != true); | ||
std::tie(expected_delay, expected_cong) = router_lookahead_.get_expected_delay_and_cong(to_node, target_node, cost_params, R_upstream); | ||
router_lookahead_.scale_delay_and_cong_by_criticality(expected_delay, expected_cong, cost_params); | ||
|
||
float expected_total_delay_cost; | ||
float expected_total_cong_cost; | ||
|
@@ -784,6 +789,8 @@ void ConnectionRouter<Heap>::evaluate_timing_driven_node_costs(t_heap* to, | |
//Update the backward cost (upstream already included) | ||
to->backward_path_cost += (1. - cost_params.criticality) * cong_cost; //Congestion cost | ||
to->backward_path_cost += cost_params.criticality * Tdel; //Delay cost | ||
to->backward_path_delay += Tdel; | ||
to->backward_path_congestion += cong_cost; | ||
|
||
if (cost_params.bend_cost != 0.) { | ||
t_rr_type from_type = rr_graph_->node_type(from_node); | ||
|
@@ -832,6 +839,8 @@ void ConnectionRouter<Heap>::empty_heap_annotating_node_route_inf() { | |
|
||
rr_node_route_inf_[tmp->index].path_cost = tmp->cost; | ||
rr_node_route_inf_[tmp->index].backward_path_cost = tmp->backward_path_cost; | ||
rr_node_route_inf_[tmp->index].backward_path_delay = tmp->backward_path_delay; | ||
rr_node_route_inf_[tmp->index].backward_path_congestion = tmp->backward_path_congestion; | ||
modified_rr_node_inf_.push_back(tmp->index); | ||
|
||
rcv_path_manager.free_path_struct(tmp->path_data); | ||
|
@@ -892,6 +901,8 @@ void ConnectionRouter<Heap>::add_route_tree_node_to_heap( | |
const auto& device_ctx = g_vpr_ctx.device(); | ||
const RRNodeId inode = rt_node.inode; | ||
float backward_path_cost = cost_params.criticality * rt_node.Tdel; | ||
float backward_path_delay = rt_node.Tdel; | ||
float backward_path_congestion = 0.0; | ||
float R_upstream = rt_node.R_upstream; | ||
|
||
/* Don't push to heap if not in bounding box: no-op for serial router, important for parallel router */ | ||
|
@@ -913,9 +924,15 @@ void ConnectionRouter<Heap>::add_route_tree_node_to_heap( | |
tot_cost, | ||
describe_rr_node(device_ctx.rr_graph, device_ctx.grid, device_ctx.rr_indexed_data, inode, is_flat_).c_str()); | ||
|
||
push_back_node(&heap_, rr_node_route_inf_, | ||
inode, tot_cost, RREdgeId::INVALID(), | ||
backward_path_cost, R_upstream); | ||
push_back_node(&heap_, | ||
rr_node_route_inf_, | ||
inode, | ||
tot_cost, | ||
RREdgeId::INVALID(), | ||
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. named parameter comment for RREdgeId::INVALID() |
||
backward_path_cost, | ||
backward_path_delay, | ||
backward_path_congestion, | ||
R_upstream); | ||
} else { | ||
float expected_total_cost = compute_node_cost_using_rcv(cost_params, inode, target_node, rt_node.Tdel, 0, R_upstream); | ||
|
||
|
Uh oh!
There was an error while loading. Please reload this page.