Skip to content

Commit 657c010

Browse files
committed
Add the "none" reordering, and fix the seed for random_shuffle
1 parent a8308a3 commit 657c010

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

@@ -1931,16 +1935,23 @@ argparse::ArgumentParser create_arg_parser(std::string prog_name, t_options& arg
19311935
route_grp.add_argument<e_node_reorder_algorithm, ParseNodeReorderAlgorithm>(args.reorder_rr_graph_nodes_algorithm, "--reorder_rr_graph_nodes_algorithm")
19321936
.help(
19331937
"Specifies the node reordering algorithm to use.\n"
1938+
" * none: don't reorder nodes\n"
19341939
" * degree_bfs: sort by degree and then by BFS\n"
19351940
" * random_shuffle: a random shuffle\n")
1936-
.default_value("degree_bfs")
1937-
.choices({"degree_bfs", "random_shuffle"})
1941+
.default_value("none")
1942+
.choices({"node", "degree_bfs", "random_shuffle"})
19381943
.show_in(argparse::ShowIn::HELP_ONLY);
19391944

19401945
route_grp.add_argument(args.reorder_rr_graph_nodes_threshold, "--reorder_rr_graph_nodes_threshold")
19411946
.help(
1942-
"Reorder rr_graph nodes to optimize memory layout above this number of nodes, or -1 to disable.")
1943-
.default_value("-1")
1947+
"Reorder rr_graph nodes to optimize memory layout above this number of nodes.")
1948+
.default_value("0")
1949+
.show_in(argparse::ShowIn::HELP_ONLY);
1950+
1951+
route_grp.add_argument(args.reorder_rr_graph_nodes_seed, "--reorder_rr_graph_nodes_seed")
1952+
.help(
1953+
"Pseudo-random number generator seed used for the random_shuffle reordering algorithm")
1954+
.default_value("1")
19441955
.show_in(argparse::ShowIn::HELP_ONLY);
19451956

19461957
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
@@ -152,6 +152,7 @@ struct t_options {
152152
argparse::ArgValue<bool> generate_rr_node_overuse_report;
153153
argparse::ArgValue<e_node_reorder_algorithm> reorder_rr_graph_nodes_algorithm;
154154
argparse::ArgValue<int> reorder_rr_graph_nodes_threshold;
155+
argparse::ArgValue<int> reorder_rr_graph_nodes_seed;
155156

156157
/* Timing-driven router options only */
157158
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
@@ -978,6 +978,7 @@ enum e_router_algorithm {
978978
};
979979

980980
enum e_node_reorder_algorithm {
981+
DONT_REORDER,
981982
DEGREE_BFS,
982983
RANDOM_SHUFFLE,
983984
};
@@ -1034,8 +1035,9 @@ enum class e_incr_reroute_delay_ripup {
10341035
constexpr int NO_FIXED_CHANNEL_WIDTH = -1;
10351036

10361037
struct t_router_opts {
1037-
e_node_reorder_algorithm reorder_rr_graph_nodes_algorithm = DEGREE_BFS;
1038-
int reorder_rr_graph_nodes_threshold = -1;
1038+
e_node_reorder_algorithm reorder_rr_graph_nodes_algorithm = DONT_REORDER;
1039+
int reorder_rr_graph_nodes_threshold = 0;
1040+
int reorder_rr_graph_nodes_seed = 1;
10391041
bool read_rr_edge_metadata = false;
10401042
bool do_check_rr_graph = true;
10411043
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)