Skip to content

Commit e810bdf

Browse files
committed
Add the "none" reordering, and fix the seed for random_shuffle
1 parent 96b60a8 commit e810bdf

File tree

5 files changed

+26
-11
lines changed

5 files changed

+26
-11
lines changed

vpr/src/base/SetupVPR.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -354,6 +354,7 @@ static void SetupRouterOpts(const t_options& Options, t_router_opts* RouterOpts)
354354
RouterOpts->read_rr_edge_metadata = Options.read_rr_edge_metadata;
355355
RouterOpts->reorder_rr_graph_nodes_algorithm = Options.reorder_rr_graph_nodes_algorithm;
356356
RouterOpts->reorder_rr_graph_nodes_threshold = Options.reorder_rr_graph_nodes_threshold;
357+
RouterOpts->reorder_rr_graph_nodes_seed = Options.reorder_rr_graph_nodes_seed;
357358

358359
//TODO document these?
359360
RouterOpts->trim_empty_channels = false; /* DEFAULT */

vpr/src/base/read_options.cpp

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,9 @@ struct ParseRouterAlgorithm {
166166
struct ParseNodeReorderAlgorithm {
167167
ConvertedValue<e_node_reorder_algorithm> from_str(std::string str) {
168168
ConvertedValue<e_node_reorder_algorithm> conv_value;
169-
if (str == "degree_bfs")
169+
if (str == "none")
170+
conv_value.set_value(DONT_REORDER);
171+
else if (str == "degree_bfs")
170172
conv_value.set_value(DEGREE_BFS);
171173
else if (str == "random_shuffle")
172174
conv_value.set_value(RANDOM_SHUFFLE);
@@ -180,7 +182,9 @@ struct ParseNodeReorderAlgorithm {
180182

181183
ConvertedValue<std::string> to_str(e_node_reorder_algorithm val) {
182184
ConvertedValue<std::string> conv_value;
183-
if (val == DEGREE_BFS)
185+
if (val == DONT_REORDER)
186+
conv_value.set_value("none");
187+
else if (val == DEGREE_BFS)
184188
conv_value.set_value("degree_bfs");
185189
else {
186190
VTR_ASSERT(val == RANDOM_SHUFFLE);
@@ -190,7 +194,7 @@ struct ParseNodeReorderAlgorithm {
190194
}
191195

192196
std::vector<std::string> default_choices() {
193-
return {"degree_bfs", "random_shuffle"};
197+
return {"none", "degree_bfs", "random_shuffle"};
194198
}
195199
};
196200

@@ -1899,16 +1903,23 @@ argparse::ArgumentParser create_arg_parser(std::string prog_name, t_options& arg
18991903
route_grp.add_argument<e_node_reorder_algorithm, ParseNodeReorderAlgorithm>(args.reorder_rr_graph_nodes_algorithm, "--reorder_rr_graph_nodes_algorithm")
19001904
.help(
19011905
"Specifies the node reordering algorithm to use.\n"
1906+
" * none: don't reorder nodes\n"
19021907
" * degree_bfs: sort by degree and then by BFS\n"
19031908
" * random_shuffle: a random shuffle\n")
1904-
.default_value("degree_bfs")
1905-
.choices({"degree_bfs", "random_shuffle"})
1909+
.default_value("none")
1910+
.choices({"node", "degree_bfs", "random_shuffle"})
19061911
.show_in(argparse::ShowIn::HELP_ONLY);
19071912

19081913
route_grp.add_argument(args.reorder_rr_graph_nodes_threshold, "--reorder_rr_graph_nodes_threshold")
19091914
.help(
1910-
"Reorder rr_graph nodes to optimize memory layout above this number of nodes, or -1 to disable.")
1911-
.default_value("-1")
1915+
"Reorder rr_graph nodes to optimize memory layout above this number of nodes.")
1916+
.default_value("0")
1917+
.show_in(argparse::ShowIn::HELP_ONLY);
1918+
1919+
route_grp.add_argument(args.reorder_rr_graph_nodes_seed, "--reorder_rr_graph_nodes_seed")
1920+
.help(
1921+
"Pseudo-random number generator seed used for the random_shuffle reordering algorithm")
1922+
.default_value("1")
19121923
.show_in(argparse::ShowIn::HELP_ONLY);
19131924

19141925
auto& route_timing_grp = parser.add_argument_group("timing-driven routing options");

vpr/src/base/read_options.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ struct t_options {
154154
argparse::ArgValue<bool> generate_rr_node_overuse_report;
155155
argparse::ArgValue<e_node_reorder_algorithm> reorder_rr_graph_nodes_algorithm;
156156
argparse::ArgValue<int> reorder_rr_graph_nodes_threshold;
157+
argparse::ArgValue<int> reorder_rr_graph_nodes_seed;
157158

158159
/* Timing-driven router options only */
159160
argparse::ArgValue<float> astar_fac;

vpr/src/base/vpr_types.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -992,6 +992,7 @@ enum e_router_algorithm {
992992
};
993993

994994
enum e_node_reorder_algorithm {
995+
DONT_REORDER,
995996
DEGREE_BFS,
996997
RANDOM_SHUFFLE,
997998
};
@@ -1048,8 +1049,9 @@ enum class e_incr_reroute_delay_ripup {
10481049
constexpr int NO_FIXED_CHANNEL_WIDTH = -1;
10491050

10501051
struct t_router_opts {
1051-
e_node_reorder_algorithm reorder_rr_graph_nodes_algorithm = DEGREE_BFS;
1052-
int reorder_rr_graph_nodes_threshold = -1;
1052+
e_node_reorder_algorithm reorder_rr_graph_nodes_algorithm = DONT_REORDER;
1053+
int reorder_rr_graph_nodes_threshold = 0;
1054+
int reorder_rr_graph_nodes_seed = 1;
10531055
bool read_rr_edge_metadata = false;
10541056
bool do_check_rr_graph = true;
10551057
float first_iter_pres_fac;

vpr/src/route/rr_graph_util.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ void reorder_rr_graph_nodes(const t_router_opts& router_opts) {
8686
auto& graph = device_ctx.rr_nodes;
8787
size_t v_num = graph.size();
8888

89+
if (router_opts.reorder_rr_graph_nodes_algorithm == DONT_REORDER) return;
8990
if (router_opts.reorder_rr_graph_nodes_threshold < 0 || v_num < (size_t)router_opts.reorder_rr_graph_nodes_threshold) return;
9091

9192
vtr::ScopedStartFinishTimer timer("Reordering rr_graph nodes");
@@ -127,8 +128,7 @@ void reorder_rr_graph_nodes(const t_router_opts& router_opts) {
127128
return deg_a > deg_b || (deg_a == deg_b && bfs_idx[a] < bfs_idx[b]);
128129
});
129130
} else if (router_opts.reorder_rr_graph_nodes_algorithm == RANDOM_SHUFFLE) {
130-
std::random_device rd;
131-
std::mt19937 g(rd());
131+
std::mt19937 g(router_opts.reorder_rr_graph_nodes_seed);
132132
std::shuffle(src_order.begin(), src_order.end(), g);
133133
}
134134
vtr::vector<RRNodeId, RRNodeId> dest_order(v_num);

0 commit comments

Comments
 (0)