From ef1a318f724eb0a10ec052619ae8447b8a954aaf Mon Sep 17 00:00:00 2001 From: tangxifan Date: Mon, 13 Sep 2021 12:10:26 -0700 Subject: [PATCH 1/2] [VPR] Added a new API set_node_type() to RRGraphBuilder; Replace and deprecated the old API in rr_node.h --- vpr/src/device/rr_graph_builder.cpp | 4 ++++ vpr/src/device/rr_graph_builder.h | 2 ++ vpr/src/route/clock_connection_builders.cpp | 3 ++- vpr/src/route/clock_network_builders.cpp | 8 ++++---- vpr/src/route/rr_graph.cpp | 10 +++++----- vpr/src/route/rr_graph_uxsdcxx_serializer.h | 3 ++- vpr/src/route/rr_node.cpp | 4 ---- vpr/src/route/rr_node.h | 2 -- 8 files changed, 19 insertions(+), 17 deletions(-) diff --git a/vpr/src/device/rr_graph_builder.cpp b/vpr/src/device/rr_graph_builder.cpp index 6cf28ca276c..8ef1666de8e 100644 --- a/vpr/src/device/rr_graph_builder.cpp +++ b/vpr/src/device/rr_graph_builder.cpp @@ -13,6 +13,10 @@ RRSpatialLookup& RRGraphBuilder::node_lookup() { return node_lookup_; } +void RRGraphBuilder::set_node_type(RRNodeId id, t_rr_type type) { + node_storage_.set_node_type(id, type); +} + void RRGraphBuilder::add_node_to_all_locs(RRNodeId node) { t_rr_type node_type = node_storage_.node_type(node); short node_ptc_num = node_storage_.node_ptc_num(node); diff --git a/vpr/src/device/rr_graph_builder.h b/vpr/src/device/rr_graph_builder.h index fd722427521..84588d473a3 100644 --- a/vpr/src/device/rr_graph_builder.h +++ b/vpr/src/device/rr_graph_builder.h @@ -37,6 +37,8 @@ class RRGraphBuilder { t_rr_graph_storage& node_storage(); /** @brief Return a writable object for update the fast look-up of rr_node */ RRSpatialLookup& node_lookup(); + /** @brief Set the type of a node with a given valid id */ + void set_node_type(RRNodeId id, t_rr_type type); /** * @brief Add an existing rr_node in the node storage to the node look-up * diff --git a/vpr/src/route/clock_connection_builders.cpp b/vpr/src/route/clock_connection_builders.cpp index 48f9eb103eb..ce6801dc9de 100644 --- a/vpr/src/route/clock_connection_builders.cpp +++ b/vpr/src/route/clock_connection_builders.cpp @@ -92,6 +92,7 @@ void RoutingToClockConnection::create_switches(const ClockRRGraphBuilder& clock_ RRNodeId RoutingToClockConnection::create_virtual_clock_network_sink_node(int x, int y) { auto& device_ctx = g_vpr_ctx.mutable_device(); auto& rr_graph = device_ctx.rr_nodes; + auto& rr_graph_builder = device_ctx.rr_graph_builder; auto& node_lookup = device_ctx.rr_graph_builder.node_lookup(); rr_graph.emplace_back(); RRNodeId node_index = RRNodeId(rr_graph.size() - 1); @@ -109,7 +110,7 @@ RRNodeId RoutingToClockConnection::create_virtual_clock_network_sink_node(int x, rr_graph.set_node_coordinates(node_index, x, y, x, y); rr_graph.set_node_capacity(node_index, 1); rr_graph.set_node_cost_index(node_index, SINK_COST_INDEX); - rr_graph.set_node_type(node_index, SINK); + rr_graph_builder.set_node_type(node_index, SINK); float R = 0.; float C = 0.; rr_graph.set_node_rc_index(node_index, find_create_rr_rc_data(R, C)); diff --git a/vpr/src/route/clock_network_builders.cpp b/vpr/src/route/clock_network_builders.cpp index 5d26591faca..2471b873c7c 100644 --- a/vpr/src/route/clock_network_builders.cpp +++ b/vpr/src/route/clock_network_builders.cpp @@ -317,9 +317,10 @@ int ClockRib::create_chanx_wire(int x_start, rr_nodes->emplace_back(); auto node_index = rr_nodes->size() - 1; auto node = rr_nodes->back(); + RRNodeId chanx_node = RRNodeId(node_index); node.set_coordinates(x_start, y, x_end, y); - node.set_type(CHANX); + rr_graph_builder.set_node_type(chanx_node, CHANX); node.set_capacity(1); node.set_track_num(ptc_num); node.set_rc_index(find_create_rr_rc_data( @@ -345,7 +346,6 @@ int ClockRib::create_chanx_wire(int x_start, /* Add the node to spatial lookup */ auto& rr_graph = (*rr_nodes); - RRNodeId chanx_node = RRNodeId(node_index); /* TODO: Will replace these codes with an API add_node_to_all_locs() of RRGraphBuilder */ for (int ix = rr_graph.node_xlow(chanx_node); ix <= rr_graph.node_xhigh(chanx_node); ++ix) { for (int iy = rr_graph.node_ylow(chanx_node); iy <= rr_graph.node_yhigh(chanx_node); ++iy) { @@ -623,9 +623,10 @@ int ClockSpine::create_chany_wire(int y_start, rr_nodes->emplace_back(); auto node_index = rr_nodes->size() - 1; auto node = rr_nodes->back(); + RRNodeId chany_node = RRNodeId(node_index); node.set_coordinates(x, y_start, x, y_end); - node.set_type(CHANY); + rr_graph_builder.set_node_type(chany_node, CHANY); node.set_capacity(1); node.set_track_num(ptc_num); node.set_rc_index(find_create_rr_rc_data( @@ -651,7 +652,6 @@ int ClockSpine::create_chany_wire(int y_start, /* Add the node to spatial lookup */ auto& rr_graph = (*rr_nodes); - RRNodeId chany_node = RRNodeId(node_index); /* TODO: Will replace these codes with an API add_node_to_all_locs() of RRGraphBuilder */ for (int ix = rr_graph.node_xlow(chany_node); ix <= rr_graph.node_xhigh(chany_node); ++ix) { for (int iy = rr_graph.node_ylow(chany_node); iy <= rr_graph.node_yhigh(chany_node); ++iy) { diff --git a/vpr/src/route/rr_graph.cpp b/vpr/src/route/rr_graph.cpp index 35a0f23ebbb..e0c581f83a3 100644 --- a/vpr/src/route/rr_graph.cpp +++ b/vpr/src/route/rr_graph.cpp @@ -1406,7 +1406,7 @@ static void build_rr_sinks_sources(RRGraphBuilder& rr_graph_builder, } L_rr_node.set_node_cost_index(inode, SOURCE_COST_INDEX); - L_rr_node.set_node_type(inode, SOURCE); + rr_graph_builder.set_node_type(inode, SOURCE); } else { /* SINK */ VTR_ASSERT(class_inf[iclass].type == RECEIVER); inode = rr_graph_builder.node_lookup().find_node(i, j, SINK, iclass); @@ -1424,7 +1424,7 @@ static void build_rr_sinks_sources(RRGraphBuilder& rr_graph_builder, * - set_node_type(RRNodeId, t_rr_type); */ L_rr_node.set_node_cost_index(inode, SINK_COST_INDEX); - L_rr_node.set_node_type(inode, SINK); + rr_graph_builder.set_node_type(inode, SINK); } /* Things common to both SOURCEs and SINKs. */ @@ -1459,7 +1459,7 @@ static void build_rr_sinks_sources(RRGraphBuilder& rr_graph_builder, rr_edges_to_create.emplace_back(inode, to_node, delayless_switch); L_rr_node.set_node_cost_index(inode, IPIN_COST_INDEX); - L_rr_node.set_node_type(inode, IPIN); + rr_graph_builder.set_node_type(inode, IPIN); } } else { VTR_ASSERT(class_inf[iclass].type == DRIVER); @@ -1471,7 +1471,7 @@ static void build_rr_sinks_sources(RRGraphBuilder& rr_graph_builder, if (inode) { //Initially left unconnected L_rr_node.set_node_cost_index(inode, OPIN_COST_INDEX); - L_rr_node.set_node_type(inode, OPIN); + rr_graph_builder.set_node_type(inode, OPIN); } } @@ -1672,7 +1672,7 @@ static void build_rr_chan(RRGraphBuilder& rr_graph_builder, L_rr_node.set_node_rc_index(node, find_create_rr_rc_data(R, C)); L_rr_node.set_node_ptc_num(node, track); - L_rr_node.set_node_type(node, chan_type); + rr_graph_builder.set_node_type(node, chan_type); L_rr_node.set_node_direction(node, seg_details[track].direction()); } } diff --git a/vpr/src/route/rr_graph_uxsdcxx_serializer.h b/vpr/src/route/rr_graph_uxsdcxx_serializer.h index dcfdbbb5cd2..a7695e4de08 100644 --- a/vpr/src/route/rr_graph_uxsdcxx_serializer.h +++ b/vpr/src/route/rr_graph_uxsdcxx_serializer.h @@ -760,9 +760,10 @@ class RrGraphSerializer final : public uxsd::RrGraphBase { const auto& rr_graph = (*rr_graph_); rr_nodes_->make_room_for_node(RRNodeId(id)); auto node = (*rr_nodes_)[id]; + RRNodeId node_id = node.id(); node.set_capacity(capacity); - node.set_type(from_uxsd_node_type(type)); + rr_graph_builder_->set_node_type(node_id, from_uxsd_node_type(type)); switch (rr_graph.node_type(node.id())) { case CHANX: diff --git a/vpr/src/route/rr_node.cpp b/vpr/src/route/rr_node.cpp index b13ad34e3fe..78ccc3e1ccf 100644 --- a/vpr/src/route/rr_node.cpp +++ b/vpr/src/route/rr_node.cpp @@ -51,10 +51,6 @@ bool t_rr_node::validate() const { return true; } -void t_rr_node::set_type(t_rr_type new_type) { - storage_->set_node_type(id_, new_type); -} - /* * Pass in two coordinate variables describing location of node. * They do not have to be in any particular order. diff --git a/vpr/src/route/rr_node.h b/vpr/src/route/rr_node.h index e4ed1fd4e15..513bd6ed06e 100644 --- a/vpr/src/route/rr_node.h +++ b/vpr/src/route/rr_node.h @@ -108,8 +108,6 @@ class t_rr_node { bool validate() const; public: //Mutators - void set_type(t_rr_type new_type); - void set_coordinates(short x1, short y1, short x2, short y2); void set_capacity(short); From 20b5fc00026284601f35e8535892698295fdb160 Mon Sep 17 00:00:00 2001 From: tangxifan Date: Thu, 23 Sep 2021 10:08:48 -0700 Subject: [PATCH 2/2] [VPR] Use inline function for set_node_type() --- vpr/src/device/rr_graph_builder.cpp | 4 ---- vpr/src/device/rr_graph_builder.h | 4 +++- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/vpr/src/device/rr_graph_builder.cpp b/vpr/src/device/rr_graph_builder.cpp index 34b12e80cf5..c658b91df23 100644 --- a/vpr/src/device/rr_graph_builder.cpp +++ b/vpr/src/device/rr_graph_builder.cpp @@ -13,10 +13,6 @@ RRSpatialLookup& RRGraphBuilder::node_lookup() { return node_lookup_; } -void RRGraphBuilder::set_node_type(RRNodeId id, t_rr_type type) { - node_storage_.set_node_type(id, type); -} - void RRGraphBuilder::add_node_to_all_locs(RRNodeId node) { t_rr_type node_type = node_storage_.node_type(node); short node_ptc_num = node_storage_.node_ptc_num(node); diff --git a/vpr/src/device/rr_graph_builder.h b/vpr/src/device/rr_graph_builder.h index 653eb018515..329a1c737e1 100644 --- a/vpr/src/device/rr_graph_builder.h +++ b/vpr/src/device/rr_graph_builder.h @@ -38,7 +38,9 @@ class RRGraphBuilder { /** @brief Return a writable object for update the fast look-up of rr_node */ RRSpatialLookup& node_lookup(); /** @brief Set the type of a node with a given valid id */ - void set_node_type(RRNodeId id, t_rr_type type); + inline void set_node_type(RRNodeId id, t_rr_type type) { + node_storage_.set_node_type(id, type); + } /** * @brief Add an existing rr_node in the node storage to the node look-up *