Skip to content

Commit 0f8a76a

Browse files
use vtr::array to index some arrays using e_rr_type
1 parent c2d7545 commit 0f8a76a

File tree

5 files changed

+42
-47
lines changed

5 files changed

+42
-47
lines changed

libs/librrgraph/src/base/check_rr_graph.cpp

Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ void check_rr_graph(const RRGraphView& rr_graph,
230230
* now I check that everything is reachable. */
231231
bool is_fringe_warning_sent = false;
232232

233-
for (const RRNodeId& rr_node : rr_graph.nodes()) {
233+
for (const RRNodeId rr_node : rr_graph.nodes()) {
234234
size_t inode = (size_t)rr_node;
235235
e_rr_type rr_type = rr_graph.node_type(rr_node);
236236
int ptc_num = rr_graph.node_ptc_num(rr_node);
@@ -263,7 +263,7 @@ void check_rr_graph(const RRGraphView& rr_graph,
263263
}
264264
}
265265

266-
const auto& node = rr_graph.rr_nodes()[inode];
266+
const t_rr_node& node = rr_graph.rr_nodes()[inode];
267267

268268
bool is_fringe = ((rr_graph.node_xlow(rr_node) == 1)
269269
|| (rr_graph.node_ylow(rr_node) == 1)
@@ -312,18 +312,14 @@ void check_rr_graph(const RRGraphView& rr_graph,
312312

313313
static bool rr_node_is_global_clb_ipin(const RRGraphView& rr_graph, const DeviceGrid& grid, RRNodeId inode) {
314314
/* Returns true if inode refers to a global CLB input pin node. */
315-
316-
int ipin;
317-
t_physical_tile_type_ptr type;
318-
319-
type = grid.get_physical_type({rr_graph.node_xlow(inode),
320-
rr_graph.node_ylow(inode),
321-
rr_graph.node_layer(inode)});
315+
t_physical_tile_type_ptr type = grid.get_physical_type({rr_graph.node_xlow(inode),
316+
rr_graph.node_ylow(inode),
317+
rr_graph.node_layer(inode)});
322318

323319
if (rr_graph.node_type(inode) != e_rr_type::IPIN)
324320
return (false);
325321

326-
ipin = rr_graph.node_pin_num(inode);
322+
int ipin = rr_graph.node_pin_num(inode);
327323

328324
return type->is_ignored_pin[ipin];
329325
}
@@ -341,24 +337,20 @@ void check_rr_node(const RRGraphView& rr_graph,
341337

342338
//Make sure over-flow doesn't happen
343339
VTR_ASSERT(inode >= 0);
344-
int xlow, ylow, xhigh, yhigh, layer_num, ptc_num, capacity;
345-
e_rr_type rr_type;
346-
t_physical_tile_type_ptr type;
347340
int nodes_per_chan, tracks_per_node;
348-
RRIndexedDataId cost_index;
349341
float C, R;
350342
RRNodeId rr_node = RRNodeId(inode);
351343

352-
rr_type = rr_graph.node_type(rr_node);
353-
xlow = rr_graph.node_xlow(rr_node);
354-
xhigh = rr_graph.node_xhigh(rr_node);
355-
ylow = rr_graph.node_ylow(rr_node);
356-
yhigh = rr_graph.node_yhigh(rr_node);
357-
layer_num = rr_graph.node_layer(rr_node);
358-
ptc_num = rr_graph.node_ptc_num(rr_node);
359-
capacity = rr_graph.node_capacity(rr_node);
360-
cost_index = rr_graph.node_cost_index(rr_node);
361-
type = nullptr;
344+
e_rr_type rr_type = rr_graph.node_type(rr_node);
345+
int xlow = rr_graph.node_xlow(rr_node);
346+
int xhigh = rr_graph.node_xhigh(rr_node);
347+
int ylow = rr_graph.node_ylow(rr_node);
348+
int yhigh = rr_graph.node_yhigh(rr_node);
349+
int layer_num = rr_graph.node_layer(rr_node);
350+
int ptc_num = rr_graph.node_ptc_num(rr_node);
351+
int capacity = rr_graph.node_capacity(rr_node);
352+
RRIndexedDataId cost_index = rr_graph.node_cost_index(rr_node);
353+
t_physical_tile_type_ptr type = nullptr;
362354

363355
if (xlow > xhigh || ylow > yhigh) {
364356
VPR_ERROR(VPR_ERROR_ROUTE,

libs/librrgraph/src/base/rr_node_types.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,11 @@ enum class e_rr_type : unsigned char {
3232
NUM_RR_TYPES
3333
};
3434

35+
/// Used to iterate for different e_rr_type values in range-based for loops.
3536
constexpr std::array<e_rr_type, (size_t)e_rr_type::NUM_RR_TYPES> RR_TYPES = {{e_rr_type::SOURCE, e_rr_type::SINK, e_rr_type::IPIN,
3637
e_rr_type::OPIN, e_rr_type::CHANX, e_rr_type::CHANY}};
3738

38-
vtr::array<e_rr_type, const char*, (size_t)e_rr_type::NUM_RR_TYPES> rr_node_typename {"SOURCE", "SINK", "IPIN", "OPIN", "CHANX", "CHANY"};
39+
constexpr vtr::array<e_rr_type, const char*, (size_t)e_rr_type::NUM_RR_TYPES> rr_node_typename {"SOURCE", "SINK", "IPIN", "OPIN", "CHANX", "CHANY"};
3940

4041
/**
4142
* @enum Direction

vpr/src/route/connection_router.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -911,7 +911,7 @@ void ConnectionRouter<Heap>::add_route_tree_node_to_heap(
911911
rr_graph_);
912912

913913
if constexpr (VTR_ENABLE_DEBUG_LOGGING_CONST_EXPR) {
914-
router_stats_->rt_node_pushes[(size_t)rr_graph_->node_type(inode)]++;
914+
router_stats_->rt_node_pushes[rr_graph_->node_type(inode)]++;
915915
}
916916
}
917917

@@ -1067,18 +1067,18 @@ static inline void update_router_stats(RouterStats* router_stats,
10671067
if (is_inter_cluster_node(*rr_graph, rr_node_id)) {
10681068
if (is_push) {
10691069
router_stats->inter_cluster_node_pushes++;
1070-
router_stats->inter_cluster_node_type_cnt_pushes[(size_t)node_type]++;
1070+
router_stats->inter_cluster_node_type_cnt_pushes[node_type]++;
10711071
} else {
10721072
router_stats->inter_cluster_node_pops++;
1073-
router_stats->inter_cluster_node_type_cnt_pops[(size_t)node_type]++;
1073+
router_stats->inter_cluster_node_type_cnt_pops[node_type]++;
10741074
}
10751075
} else {
10761076
if (is_push) {
10771077
router_stats->intra_cluster_node_pushes++;
1078-
router_stats->intra_cluster_node_type_cnt_pushes[(size_t)node_type]++;
1078+
router_stats->intra_cluster_node_type_cnt_pushes[node_type]++;
10791079
} else {
10801080
router_stats->intra_cluster_node_pops++;
1081-
router_stats->intra_cluster_node_type_cnt_pops[(size_t)node_type]++;
1081+
router_stats->intra_cluster_node_type_cnt_pops[node_type]++;
10821082
}
10831083
}
10841084
}

vpr/src/route/route.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -618,12 +618,13 @@ bool route(const Netlist<>& net_list,
618618
"total_internal_heap_pushes: %zu total_internal_heap_pops: %zu total_external_heap_pushes: %zu total_external_heap_pops: %zu ",
619619
router_stats.intra_cluster_node_pushes, router_stats.intra_cluster_node_pops,
620620
router_stats.inter_cluster_node_pushes, router_stats.inter_cluster_node_pops);
621-
for (int node_type_idx = 0; node_type_idx < (int)e_rr_type::NUM_RR_TYPES; node_type_idx++) {
622-
VTR_LOG("total_external_%s_pushes: %zu ", rr_node_typename[node_type_idx], router_stats.inter_cluster_node_type_cnt_pushes[node_type_idx]);
623-
VTR_LOG("total_external_%s_pops: %zu ", rr_node_typename[node_type_idx], router_stats.inter_cluster_node_type_cnt_pops[node_type_idx]);
624-
VTR_LOG("total_internal_%s_pushes: %zu ", rr_node_typename[node_type_idx], router_stats.intra_cluster_node_type_cnt_pushes[node_type_idx]);
625-
VTR_LOG("total_internal_%s_pops: %zu ", rr_node_typename[node_type_idx], router_stats.intra_cluster_node_type_cnt_pops[node_type_idx]);
626-
VTR_LOG("rt_node_%s_pushes: %zu ", rr_node_typename[node_type_idx], router_stats.rt_node_pushes[node_type_idx]);
621+
622+
for (e_rr_type rr_type : RR_TYPES) {
623+
VTR_LOG("total_external_%s_pushes: %zu ", rr_node_typename[rr_type], router_stats.inter_cluster_node_type_cnt_pushes[rr_type]);
624+
VTR_LOG("total_external_%s_pops: %zu ", rr_node_typename[rr_type], router_stats.inter_cluster_node_type_cnt_pops[rr_type]);
625+
VTR_LOG("total_internal_%s_pushes: %zu ", rr_node_typename[rr_type], router_stats.intra_cluster_node_type_cnt_pushes[rr_type]);
626+
VTR_LOG("total_internal_%s_pops: %zu ", rr_node_typename[rr_type], router_stats.intra_cluster_node_type_cnt_pops[rr_type]);
627+
VTR_LOG("rt_node_%s_pushes: %zu ", rr_node_typename[rr_type], router_stats.rt_node_pushes[rr_type]);
627628
}
628629
}
629630
VTR_LOG("\n");

vpr/src/route/router_stats.h

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include "rr_graph_fwd.h"
55
#include "rr_node_types.h"
66
#include "vtr_assert.h"
7+
#include "vtr_array.h"
78

89
// This struct instructs the router on how to route the given connection
910
struct ConnectionParameters {
@@ -38,13 +39,13 @@ struct RouterStats {
3839
size_t inter_cluster_node_pops = 0;
3940
size_t intra_cluster_node_pushes = 0;
4041
size_t intra_cluster_node_pops = 0;
41-
size_t inter_cluster_node_type_cnt_pushes[(size_t)e_rr_type::NUM_RR_TYPES] = {0};
42-
size_t inter_cluster_node_type_cnt_pops[(size_t)e_rr_type::NUM_RR_TYPES] = {0};
43-
size_t intra_cluster_node_type_cnt_pushes[(size_t)e_rr_type::NUM_RR_TYPES] = {0};
44-
size_t intra_cluster_node_type_cnt_pops[(size_t)e_rr_type::NUM_RR_TYPES] = {0};
42+
vtr::array<e_rr_type, size_t, (size_t)e_rr_type::NUM_RR_TYPES> inter_cluster_node_type_cnt_pushes{0};
43+
vtr::array<e_rr_type, size_t, (size_t)e_rr_type::NUM_RR_TYPES> inter_cluster_node_type_cnt_pops{0};
44+
vtr::array<e_rr_type, size_t, (size_t)e_rr_type::NUM_RR_TYPES> intra_cluster_node_type_cnt_pushes{0};
45+
vtr::array<e_rr_type, size_t, (size_t)e_rr_type::NUM_RR_TYPES> intra_cluster_node_type_cnt_pops{0};
4546

4647
// For debugging purposes
47-
size_t rt_node_pushes[(size_t)e_rr_type::NUM_RR_TYPES] = {0};
48+
vtr::array<e_rr_type, size_t, (size_t)e_rr_type::NUM_RR_TYPES> rt_node_pushes{0};
4849

4950
/** Add rhs's stats to mine */
5051
void combine(RouterStats& rhs) {
@@ -56,12 +57,12 @@ struct RouterStats {
5657
heap_pops += rhs.heap_pops;
5758
inter_cluster_node_pops += rhs.inter_cluster_node_pops;
5859
intra_cluster_node_pops += rhs.intra_cluster_node_pops;
59-
for (size_t node_type_idx = 0; node_type_idx < (size_t)e_rr_type::NUM_RR_TYPES; node_type_idx++) {
60-
inter_cluster_node_type_cnt_pushes[node_type_idx] += rhs.inter_cluster_node_type_cnt_pushes[node_type_idx];
61-
inter_cluster_node_type_cnt_pops[node_type_idx] += rhs.inter_cluster_node_type_cnt_pops[node_type_idx];
62-
intra_cluster_node_type_cnt_pushes[node_type_idx] += rhs.intra_cluster_node_type_cnt_pushes[node_type_idx];
63-
intra_cluster_node_type_cnt_pops[node_type_idx] += rhs.intra_cluster_node_type_cnt_pops[node_type_idx];
64-
rt_node_pushes[node_type_idx] += rhs.rt_node_pushes[node_type_idx];
60+
for (e_rr_type rr_type : RR_TYPES) {
61+
inter_cluster_node_type_cnt_pushes[rr_type] += rhs.inter_cluster_node_type_cnt_pushes[rr_type];
62+
inter_cluster_node_type_cnt_pops[rr_type] += rhs.inter_cluster_node_type_cnt_pops[rr_type];
63+
intra_cluster_node_type_cnt_pushes[rr_type] += rhs.intra_cluster_node_type_cnt_pushes[rr_type];
64+
intra_cluster_node_type_cnt_pops[rr_type] += rhs.intra_cluster_node_type_cnt_pops[rr_type];
65+
rt_node_pushes[rr_type] += rhs.rt_node_pushes[rr_type];
6566
}
6667
}
6768
};

0 commit comments

Comments
 (0)