Skip to content

Commit f520da9

Browse files
Merge branch 'master' into diff_switches_for_inc_dec_wires
2 parents a48ed5f + 49de5fb commit f520da9

29 files changed

+613
-539
lines changed

.github/workflows/nightly_test.yml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,24 @@
11
name: NightlyTest
22

33
on:
4+
# We want to run the CI when anything is pushed to master.
5+
# Since master is a protected branch this only happens when a PR is merged.
6+
# This is a double check in case the PR was stale and had some issues.
7+
push:
8+
branches:
9+
- master
10+
paths-ignore: # Prevents from running if only docs are updated
11+
- 'doc/**'
12+
- '**/*README*'
13+
- '**.md'
14+
- '**.rst'
15+
pull_request:
16+
paths-ignore: # Prevents from running if only docs are updated
17+
- 'doc/**'
18+
- '**/*README*'
19+
- '**.md'
20+
- '**.rst'
21+
workflow_dispatch:
422
schedule:
523
- cron: '0 0 * * *' # daily
624

doc/src/vpr/command_line_usage.rst

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1306,6 +1306,15 @@ The following options are only valid when the router is in timing-driven mode (t
13061306

13071307
**Default:** ``1.2``
13081308

1309+
.. option:: --astar_offset <float>
1310+
1311+
Sets how aggressive the directed search used by the timing-driven router is.
1312+
It is a subtractive adjustment to the lookahead heuristic.
1313+
1314+
Values between 0 and 1e-9 are resonable; higher values may increase quality at the expense of run-time.
1315+
1316+
**Default:** ``0.0``
1317+
13091318
.. option:: --router_profiler_astar_fac <float>
13101319

13111320
Controls the directedness of the timing-driven router's exploration when doing router delay profiling of an architecture.

vpr/src/base/SetupVPR.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,7 @@ static void SetupRoutingArch(const t_arch& Arch,
423423
static void SetupRouterOpts(const t_options& Options, t_router_opts* RouterOpts) {
424424
RouterOpts->do_check_rr_graph = Options.check_rr_graph;
425425
RouterOpts->astar_fac = Options.astar_fac;
426+
RouterOpts->astar_offset = Options.astar_offset;
426427
RouterOpts->router_profiler_astar_fac = Options.router_profiler_astar_fac;
427428
RouterOpts->bb_factor = Options.bb_factor;
428429
RouterOpts->criticality_exp = Options.criticality_exp;
@@ -639,6 +640,8 @@ static void SetupPlacerOpts(const t_options& Options, t_placer_opts* PlacerOpts)
639640

640641
PlacerOpts->write_initial_place_file = Options.write_initial_place_file;
641642

643+
PlacerOpts->read_initial_place_file = Options.read_initial_place_file;
644+
642645
PlacerOpts->pad_loc_type = Options.pad_loc_type;
643646

644647
PlacerOpts->place_chan_width = Options.PlaceChanWidth;

vpr/src/base/ShowSetup.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,7 @@ static void ShowRouterOpts(const t_router_opts& RouterOpts) {
382382

383383
if (TIMING_DRIVEN == RouterOpts.router_algorithm) {
384384
VTR_LOG("RouterOpts.astar_fac: %f\n", RouterOpts.astar_fac);
385+
VTR_LOG("RouterOpts.astar_offset: %f\n", RouterOpts.astar_offset);
385386
VTR_LOG("RouterOpts.router_profiler_astar_fac: %f\n", RouterOpts.router_profiler_astar_fac);
386387
VTR_LOG("RouterOpts.criticality_exp: %f\n", RouterOpts.criticality_exp);
387388
VTR_LOG("RouterOpts.max_criticality: %f\n", RouterOpts.max_criticality);
@@ -735,4 +736,4 @@ static void ShowNocOpts(const t_noc_opts& NocOpts) {
735736
VTR_LOG("NocOpts.noc_sat_routing_num_workers: %d\n", NocOpts.noc_sat_routing_num_workers);
736737
VTR_LOG("NocOpts.noc_routing_algorithm: %s\n", NocOpts.noc_placement_file_name.c_str());
737738
VTR_LOG("\n");
738-
}
739+
}

vpr/src/base/read_options.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1632,6 +1632,11 @@ argparse::ArgumentParser create_arg_parser(const std::string& prog_name, t_optio
16321632
.metavar("INITIAL_PLACE_FILE")
16331633
.show_in(argparse::ShowIn::HELP_ONLY);
16341634

1635+
file_grp.add_argument(args.read_initial_place_file, "--read_initial_place_file")
1636+
.help("Reads the initial placement and continues the rest of the placement process from there.")
1637+
.metavar("INITIAL_PLACE_FILE")
1638+
.show_in(argparse::ShowIn::HELP_ONLY);
1639+
16351640
file_grp.add_argument(args.read_vpr_constraints_file, "--read_vpr_constraints")
16361641
.help("Reads the floorplanning constraints that packing and placement must respect from the specified XML file.")
16371642
.show_in(argparse::ShowIn::HELP_ONLY);
@@ -2499,6 +2504,14 @@ argparse::ArgumentParser create_arg_parser(const std::string& prog_name, t_optio
24992504
.default_value("1.2")
25002505
.show_in(argparse::ShowIn::HELP_ONLY);
25012506

2507+
route_timing_grp.add_argument(args.astar_offset, "--astar_offset")
2508+
.help(
2509+
"Controls the directedness of the timing-driven router's exploration."
2510+
" It is a subtractive adjustment to the lookahead heuristic."
2511+
" Values between 0 and 1e-9 are resonable; higher values may increase quality at the expense of run-time.")
2512+
.default_value("0.0")
2513+
.show_in(argparse::ShowIn::HELP_ONLY);
2514+
25022515
route_timing_grp.add_argument(args.router_profiler_astar_fac, "--router_profiler_astar_fac")
25032516
.help(
25042517
"Controls the directedness of the timing-driven router's exploration"

vpr/src/base/read_options.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ struct t_options {
2929
argparse::ArgValue<std::string> write_rr_graph_file;
3030
argparse::ArgValue<std::string> read_rr_graph_file;
3131
argparse::ArgValue<std::string> write_initial_place_file;
32+
argparse::ArgValue<std::string> read_initial_place_file;
3233
argparse::ArgValue<std::string> read_vpr_constraints_file;
3334
argparse::ArgValue<std::string> write_vpr_constraints_file;
3435
argparse::ArgValue<std::string> write_constraints_file;
@@ -220,6 +221,7 @@ struct t_options {
220221

221222
/* Timing-driven router options only */
222223
argparse::ArgValue<float> astar_fac;
224+
argparse::ArgValue<float> astar_offset;
223225
argparse::ArgValue<float> router_profiler_astar_fac;
224226
argparse::ArgValue<float> max_criticality;
225227
argparse::ArgValue<float> criticality_exp;

vpr/src/base/read_place.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,14 @@ void read_place_body(std::ifstream& placement_file,
305305
loc.layer = block_layer;
306306

307307
if (seen_blocks[blk_id] == 0) {
308+
if (is_place_file && place_ctx.block_locs[blk_id].is_fixed) {
309+
const auto& contraint_loc = place_ctx.block_locs[blk_id].loc;
310+
if (loc != contraint_loc) {
311+
VPR_THROW(VPR_ERROR_PLACE,
312+
"The new location assigned to cluster #%d is (%d,%d,%d,%d), which is inconsistent with the location specified in the constraint file (%d,%d,%d,%d).",
313+
blk_id, loc.x, loc.y, loc.layer, loc.sub_tile, contraint_loc.x, contraint_loc.y, contraint_loc.layer, contraint_loc.sub_tile);
314+
}
315+
}
308316
set_block_location(blk_id, loc);
309317
}
310318

vpr/src/base/vpr_types.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1236,6 +1236,7 @@ struct t_placer_opts {
12361236
enum e_pad_loc_type pad_loc_type;
12371237
std::string constraints_file;
12381238
std::string write_initial_place_file;
1239+
std::string read_initial_place_file;
12391240
enum pfreq place_freq;
12401241
int recompute_crit_iter;
12411242
int inner_loop_recompute_divider;
@@ -1343,6 +1344,8 @@ struct t_placer_opts {
13431344
* an essentially breadth-first search, astar_fac = 1 is near *
13441345
* the usual astar algorithm and astar_fac > 1 are more *
13451346
* aggressive. *
1347+
* astar_offset: Offset that is subtracted from the lookahead (expected *
1348+
* future costs) in the timing-driven router. *
13461349
* max_criticality: The maximum criticality factor (from 0 to 1) any sink *
13471350
* will ever have (i.e. clip criticality to this number). *
13481351
* criticality_exp: Set criticality to (path_length(sink) / longest_path) ^ *
@@ -1431,6 +1434,7 @@ struct t_router_opts {
14311434
enum e_router_algorithm router_algorithm;
14321435
enum e_base_cost_type base_cost_type;
14331436
float astar_fac;
1437+
float astar_offset;
14341438
float router_profiler_astar_fac;
14351439
float max_criticality;
14361440
float criticality_exp;

vpr/src/pack/cluster_placement.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,9 +140,15 @@ bool get_next_primitive_list(t_cluster_placement_stats* cluster_placement_stats,
140140
continue;
141141
}
142142

143-
144143
/* check for force site match, if applicable */
145144
if (force_site > -1) {
145+
/* check that the forced site index is within the available range */
146+
int max_site = it->second->pb_graph_node->total_primitive_count - 1;
147+
if (force_site > max_site) {
148+
VTR_LOG("The specified primitive site (%d) is out of range (max %d)\n",
149+
force_site, max_site);
150+
break;
151+
}
146152
if (force_site == it->second->pb_graph_node->flat_site_index) {
147153
cost = try_place_molecule(molecule, it->second->pb_graph_node, primitives_list);
148154
if (cost < HUGE_POSITIVE_FLOAT) {

vpr/src/place/initial_noc_placement.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ static void noc_routers_anneal(const t_noc_opts& noc_opts) {
220220
// Generate and evaluate router moves
221221
for (int i_move = 0; i_move < N_MOVES; i_move++) {
222222
e_create_move create_move_outcome = e_create_move::ABORT;
223-
clear_move_blocks(blocks_affected);
223+
blocks_affected.clear_move_blocks();
224224
// Shrink the range limit over time
225225
float r_lim_decayed = 1.0f + (N_MOVES - i_move) * (max_r_lim / N_MOVES);
226226
create_move_outcome = propose_router_swap(blocks_affected, r_lim_decayed);

0 commit comments

Comments
 (0)