Skip to content

Commit bf0d613

Browse files
committed
vpr: Calculate available wirelength only once
Previously was recalculated after each routing iteration.
1 parent ca1cf1c commit bf0d613

File tree

1 file changed

+18
-8
lines changed

1 file changed

+18
-8
lines changed

vpr/src/route/route_timing.cpp

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,8 @@ struct more_sinks_than {
260260
}
261261
};
262262

263-
static WirelengthInfo calculate_wirelength_info();
263+
static size_t calculate_wirelength_available();
264+
static WirelengthInfo calculate_wirelength_info(size_t available_wirelength);
264265
static OveruseInfo calculate_overuse_info();
265266

266267
static void print_route_status_header();
@@ -368,6 +369,8 @@ bool try_timing_driven_route(const t_router_opts& router_opts,
368369
constexpr float BB_SCALE_FACTOR = 2;
369370
constexpr int BB_SCALE_ITER_COUNT = 5;
370371

372+
size_t available_wirelength = calculate_wirelength_available();
373+
371374
/*
372375
* Routing status and metrics
373376
*/
@@ -460,7 +463,7 @@ bool try_timing_driven_route(const t_router_opts& router_opts,
460463
float est_success_iteration = routing_predictor.estimate_success_iteration();
461464

462465
overuse_info = calculate_overuse_info();
463-
wirelength_info = calculate_wirelength_info();
466+
wirelength_info = calculate_wirelength_info(available_wirelength);
464467
routing_predictor.add_iteration_overuse(itry, overuse_info.overused_nodes());
465468

466469
if (timing_info) {
@@ -2311,18 +2314,26 @@ static OveruseInfo calculate_overuse_info() {
23112314
return OveruseInfo(device_ctx.rr_nodes.size(), overused_nodes, total_overuse, worst_overuse);
23122315
}
23132316

2314-
static WirelengthInfo calculate_wirelength_info() {
2317+
static size_t calculate_wirelength_available() {
23152318
auto& device_ctx = g_vpr_ctx.device();
2316-
auto& cluster_ctx = g_vpr_ctx.clustering();
23172319

2318-
size_t used_wirelength = 0;
23192320
size_t available_wirelength = 0;
2320-
23212321
for (size_t i = 0; i < device_ctx.rr_nodes.size(); ++i) {
23222322
if (device_ctx.rr_nodes[i].type() == CHANX || device_ctx.rr_nodes[i].type() == CHANY) {
2323-
available_wirelength += device_ctx.rr_nodes[i].capacity() + device_ctx.rr_nodes[i].xhigh() - device_ctx.rr_nodes[i].xlow() + device_ctx.rr_nodes[i].yhigh() - device_ctx.rr_nodes[i].ylow();
2323+
size_t length_x = device_ctx.rr_nodes[i].xhigh() - device_ctx.rr_nodes[i].xlow();
2324+
size_t length_y = device_ctx.rr_nodes[i].yhigh() - device_ctx.rr_nodes[i].ylow();
2325+
2326+
available_wirelength += device_ctx.rr_nodes[i].capacity() * (length_x + length_y + 1);
23242327
}
23252328
}
2329+
return available_wirelength;
2330+
}
2331+
2332+
static WirelengthInfo calculate_wirelength_info(size_t available_wirelength) {
2333+
auto& cluster_ctx = g_vpr_ctx.clustering();
2334+
2335+
size_t used_wirelength = 0;
2336+
VTR_ASSERT(available_wirelength > 0);
23262337

23272338
for (auto net_id : cluster_ctx.clb_nlist.nets()) {
23282339
if (!cluster_ctx.clb_nlist.net_is_ignored(net_id)
@@ -2333,7 +2344,6 @@ static WirelengthInfo calculate_wirelength_info() {
23332344
used_wirelength += wirelength;
23342345
}
23352346
}
2336-
VTR_ASSERT(available_wirelength > 0);
23372347

23382348
return WirelengthInfo(available_wirelength, used_wirelength);
23392349
}

0 commit comments

Comments
 (0)