Skip to content

NoC SAT Routing #2564

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 42 commits into from
Jun 10, 2024
Merged
Show file tree
Hide file tree
Changes from 35 commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
23d9ddc
add or-tools as a submodule
soheilshahrouz Mar 6, 2024
52f9d23
add is_turn_legal() and get_all_illegal_turns()
soheilshahrouz Mar 7, 2024
f35f137
add get_noc_router_incoming_links() method to NocStorage
soheilshahrouz Mar 7, 2024
168642e
congestion-free NoC routes pass SAT constraints
soheilshahrouz Mar 9, 2024
aabcee8
add sort_noc_links_in_chain_order()
soheilshahrouz Mar 10, 2024
9193b25
sanity checks for CP-SAT routes
soheilshahrouz Mar 10, 2024
8327121
fix infinite loop in sort_noc_links_in_chain_order
soheilshahrouz Mar 10, 2024
952745c
optimize aggregate bandwidth using or-tools
soheilshahrouz Mar 10, 2024
fdf6a98
remove submodule or-tools
soheilshahrouz Mar 12, 2024
fcff150
move passed by value names
soheilshahrouz Mar 12, 2024
38fb924
invoke sat routing at the end of placement when NoC congestion is not…
soheilshahrouz Mar 12, 2024
a37458c
first try at solving NoC placement and routing in a single shot
soheilshahrouz Mar 13, 2024
e1af609
add noc_sat_place_and_route()
soheilshahrouz Mar 13, 2024
936f6c6
remove lexicographic optimization in noc_sat_place_and_route()
soheilshahrouz Mar 13, 2024
c570313
namespace alias for operations_research::sat
soheilshahrouz Mar 13, 2024
37d626b
replace congestion constraints with an objective to minimize the numb…
soheilshahrouz Mar 15, 2024
6ce5f78
add hints for cp-sat
soheilshahrouz Mar 15, 2024
6d56791
report NoC metrics after sat routing
soheilshahrouz Mar 15, 2024
792e527
Merge branch 'master' into add_or_tools
soheilshahrouz Mar 18, 2024
7d7c2f8
types and const ref
soheilshahrouz Mar 19, 2024
7213a5d
Merge branch 'master' into add_or_tools
soheilshahrouz May 22, 2024
0bf839c
add comments
soheilshahrouz May 23, 2024
edf3191
add --noc_sat_routing_bandwidth_resolution command line option
soheilshahrouz May 23, 2024
8f3bae3
add more comments
soheilshahrouz May 23, 2024
959e188
remove add_distance_constraints() and add command line options for we…
soheilshahrouz May 23, 2024
87aed01
add create_objective()
soheilshahrouz May 24, 2024
e697f64
noc_sat_routing_num_workers and noc_sat_routing_log_search_progress c…
soheilshahrouz May 24, 2024
d76d7b5
check or-tools dependency in CMakeLists.txt
soheilshahrouz May 27, 2024
5d2695d
Merge branch 'master' into add_or_tools
soheilshahrouz May 28, 2024
2aac478
fix unit test compilation error
soheilshahrouz May 28, 2024
85c5ba2
fix test_setup_noc.cpp compilation error
soheilshahrouz May 28, 2024
c1b7aa8
change the converter for --noc_sat_routing_log_search_progress
soheilshahrouz May 29, 2024
b8e95fc
Merge branch 'master' into add_or_tools
soheilshahrouz May 31, 2024
63e7cfc
check if all links have the same bandwidth in SAT router
soheilshahrouz May 31, 2024
3fa4fa8
check latency equality for routers and links
soheilshahrouz May 31, 2024
d509ecd
add comments and subroutines
soheilshahrouz Jun 5, 2024
2fe22e8
add comments in is_turn_legal() overrides
soheilshahrouz Jun 5, 2024
09b5802
move DEFAULT_MAX_TRAFFIC_FLOW_LATENCY to NocTrafficFlows
soheilshahrouz Jun 5, 2024
90d4938
specify the domain of latency overrun vars based on the noc dimensions
soheilshahrouz Jun 5, 2024
3b8795f
use --noc_sat_routing_num_workers only when it is explicitly specified
soheilshahrouz Jun 5, 2024
b7bf7b5
conditional inclusion of sat_router
soheilshahrouz Jun 5, 2024
2ed4497
fix segfault in NoC cost report
soheilshahrouz Jun 6, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,4 @@
url = https://github.com/catchorg/Catch2.git
[submodule "libs/EXTERNAL/sockpp"]
path = libs/EXTERNAL/sockpp
#url = [email protected]:fpagliughi/sockpp.git
url = [email protected]:w0lek/sockpp.git # fork where in branch v1.0.0_no_complication_warnings there are compilation warnings fixes for upstream tag v1.0.0 of sockpp
url = https://github.com/w0lek/sockpp.git # fork where in branch v1.0.0_no_complication_warnings there are compilation warnings fixes for upstream tag v1.0.0 of sockpp
5 changes: 3 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ option(VPR_USE_SERVER "Specify whether vpr enables the server mode" ON)
#VPR option --enable_analytic_placer is also required for Analytic Placement
option(VPR_ANALYTIC_PLACE "Enable analytic placement in VPR." ON)
option(VPR_ENABLE_INTERCHANGE "Enable FPGA interchange." ON)
option(VPR_ENABLE_NOC_SAT_ROUTING "Enable NoC SAT routing." OFF)

option(WITH_BLIFEXPLORER "Enable build with blifexplorer" OFF)

Expand Down Expand Up @@ -220,12 +221,12 @@ endforeach()
set(FLEX_BISON_WARN_SUPPRESS_FLAGS "")
set(FLEX_BISON_WARN_SUPPRESS_FLAGS_TO_CHECK
"-Wno-redundant-decls" #Flex/bison generate code with redundant declarations
"-Wno-switch-default" #Flex/bison generate switch statments w/o default cases
"-Wno-switch-default" #Flex/bison generate switch statements w/o default cases
"-Wno-unused-parameter" #Flex produces functions with unused params in re-entrant mode
"-Wno-missing-declarations" #Flex misses some declarations in re-entrant mode
"-Wimplicit-fallthrough=0" #Bison produces some cases with explicit
"-Wno-sign-compare" #Flex generates code which performs some signed/unsigned comparison
"-Wno-null-dereference" #Bison produces some cases with potenetial null derefs
"-Wno-null-dereference" #Bison produces some cases with potential null derefs
)
foreach(flag ${FLEX_BISON_WARN_SUPPRESS_FLAGS_TO_CHECK})
CHECK_CXX_COMPILER_FLAG(${flag} CXX_COMPILER_SUPPORTS_${flag})
Expand Down
2 changes: 2 additions & 0 deletions libs/EXTERNAL/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ add_subdirectory(libsdcparse)
add_subdirectory(libblifparse)
add_subdirectory(libtatum)
add_subdirectory(libcatch2)

#SET(BUILD_DEPS ON CACHE BOOL "Build libfoo shared library")
#add_subdirectory(parmys)

#VPR_USE_SERVER is initialized in the root CMakeLists
Expand Down
8 changes: 5 additions & 3 deletions libs/libvtrutil/src/vtr_time.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
#include "vtr_log.h"
#include "vtr_rusage.h"

#include <utility>

namespace vtr {

int f_timer_depth = 0;
Expand Down Expand Up @@ -30,7 +32,7 @@ float Timer::delta_max_rss_mib() const {

///@brief Constructor
ScopedActionTimer::ScopedActionTimer(std::string action_str)
: action_(action_str)
: action_(std::move(action_str))
, depth_(f_timer_depth++) {
}

Expand Down Expand Up @@ -69,7 +71,7 @@ int ScopedActionTimer::depth() const {

///@brief Constructor
ScopedFinishTimer::ScopedFinishTimer(std::string action_str)
: ScopedActionTimer(action_str) {
: ScopedActionTimer(std::move(action_str)) {
}

///@brief Destructor
Expand All @@ -83,7 +85,7 @@ ScopedFinishTimer::~ScopedFinishTimer() {

///@brief Constructor
ScopedStartFinishTimer::ScopedStartFinishTimer(std::string action_str)
: ScopedActionTimer(action_str) {
: ScopedActionTimer(std::move(action_str)) {
vtr::printf_info("%s%s\n", pad().c_str(), action().c_str());
}

Expand Down
6 changes: 3 additions & 3 deletions libs/libvtrutil/src/vtr_time.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ class Timer {
///@brief Scoped time class which prints the time elapsed for the specifid action
class ScopedActionTimer : public Timer {
public:
ScopedActionTimer(const std::string action);
ScopedActionTimer(std::string action);
~ScopedActionTimer();

void quiet(bool value);
Expand Down Expand Up @@ -71,7 +71,7 @@ class ScopedActionTimer : public Timer {
*/
class ScopedFinishTimer : public ScopedActionTimer {
public:
ScopedFinishTimer(const std::string action);
ScopedFinishTimer(std::string action);
~ScopedFinishTimer();
};

Expand All @@ -91,7 +91,7 @@ class ScopedFinishTimer : public ScopedActionTimer {
*/
class ScopedStartFinishTimer : public ScopedActionTimer {
public:
ScopedStartFinishTimer(const std::string action);
ScopedStartFinishTimer(std::string action);
~ScopedStartFinishTimer();
};
} // namespace vtr
Expand Down
18 changes: 16 additions & 2 deletions vpr/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,20 @@ if(${VPR_ANALYTIC_PLACE})
endif(TARGET Eigen3::Eigen)
endif()

if (${VPR_ENABLE_NOC_SAT_ROUTING})
message(STATUS "VPR NoC SAT Routing: Requested")
find_package(ortools CONFIG REQUIRED)
if (TARGET ortools::ortools)
message(STATUS "VPR NoC SAT Routing dependency (or-tools): Found")
message(STATUS "VPR NoC SAT Routing: Enabled")
target_link_libraries(libvpr ortools::ortools)
target_compile_definitions(libvpr PUBLIC -DENABLE_NOC_SAT_ROUTING)
else ()
message(STATUS "VPR NoC SAT Routing dependency (or-tools): Not Found (You may need to set CMAKE_PREFIX_PATH in order for CMake to find your OR-Tools installation)")
message(STATUS "VPR NoC SAT Routing: Disabled")
endif (TARGET ortools::ortools)
endif ()

set_target_properties(libvpr PROPERTIES PREFIX "") #Avoid extra 'lib' prefix

#Specify link-time dependencies
Expand Down Expand Up @@ -161,7 +175,7 @@ add_executable(vpr ${EXEC_SOURCES})
target_link_libraries(vpr libvpr)


#Supress IPO link warnings if IPO is enabled
#Suppress IPO link warnings if IPO is enabled
get_target_property(VPR_USES_IPO vpr INTERPROCEDURAL_OPTIMIZATION)
if (VPR_USES_IPO)
set_property(TARGET vpr APPEND PROPERTY LINK_FLAGS ${IPO_LINK_WARN_SUPRESS_FLAGS})
Expand Down Expand Up @@ -292,7 +306,7 @@ target_link_libraries(test_vpr
Catch2::Catch2WithMain
libvpr)

#Supress IPO link warnings if IPO is enabled
#Suppress IPO link warnings if IPO is enabled
get_target_property(TEST_VPR_USES_IPO vpr INTERPROCEDURAL_OPTIMIZATION)
if (TEST_VPR_USES_IPO)
set_property(TARGET test_vpr APPEND PROPERTY LINK_FLAGS ${IPO_LINK_WARN_SUPRESS_FLAGS})
Expand Down
7 changes: 6 additions & 1 deletion vpr/src/base/SetupVPR.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -744,8 +744,13 @@ static void SetupNocOpts(const t_options& Options, t_noc_opts* NocOpts) {
NocOpts->noc_latency_constraints_weighting = Options.noc_latency_constraints_weighting;
NocOpts->noc_latency_weighting = Options.noc_latency_weighting;
NocOpts->noc_congestion_weighting = Options.noc_congestion_weighting;
NocOpts->noc_swap_percentage = Options.noc_swap_percentage;
NocOpts->noc_centroid_weight = Options.noc_centroid_weight;
NocOpts->noc_swap_percentage = Options.noc_swap_percentage;
NocOpts->noc_sat_routing_bandwidth_resolution = Options.noc_sat_routing_bandwidth_resolution;
NocOpts->noc_sat_routing_latency_overrun_weighting = Options.noc_sat_routing_latency_overrun_weighting_factor;
NocOpts->noc_sat_routing_congestion_weighting = Options.noc_sat_routing_congestion_weighting_factor;
NocOpts->noc_sat_routing_num_workers = Options.noc_sat_routing_num_workers;
NocOpts->noc_sat_routing_log_search_progress = Options.noc_sat_routing_log_search_progress;
NocOpts->noc_placement_file_name = Options.noc_placement_file_name;
}

Expand Down
4 changes: 4 additions & 0 deletions vpr/src/base/ShowSetup.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -802,6 +802,10 @@ static void ShowNocOpts(const t_noc_opts& NocOpts) {
VTR_LOG("NocOpts.noc_latency_weighting: %f\n", NocOpts.noc_latency_weighting);
VTR_LOG("NocOpts.noc_congestion_weighting: %f\n", NocOpts.noc_congestion_weighting);
VTR_LOG("NocOpts.noc_swap_percentage: %d%%\n", NocOpts.noc_swap_percentage);
VTR_LOG("NocOpts.noc_sat_routing_bandwidth_resolution: %d\n", NocOpts.noc_sat_routing_bandwidth_resolution);
VTR_LOG("NocOpts.noc_sat_routing_latency_overrun_weighting: %d\n", NocOpts.noc_sat_routing_latency_overrun_weighting);
VTR_LOG("NocOpts.noc_sat_routing_congestion_weighting: %d\n", NocOpts.noc_sat_routing_congestion_weighting);
VTR_LOG("NocOpts.noc_sat_routing_num_workers: %d\n", NocOpts.noc_sat_routing_num_workers);
VTR_LOG("NocOpts.noc_routing_algorithm: %s\n", NocOpts.noc_placement_file_name.c_str());
VTR_LOG("\n");
}
8 changes: 4 additions & 4 deletions vpr/src/base/place_and_route.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,8 @@ int binary_search_place_and_route(const Netlist<>& placement_net_list,
t_det_routing_arch* det_routing_arch,
std::vector<t_segment_inf>& segment_inf,
NetPinsMatrix<float>& net_delay,
std::shared_ptr<SetupHoldTimingInfo> timing_info,
std::shared_ptr<RoutingDelayCalculator> delay_calc,
const std::shared_ptr<SetupHoldTimingInfo>& timing_info,
const std::shared_ptr<RoutingDelayCalculator>& delay_calc,
bool is_flat) {
vtr::vector<ParentNetId, vtr::optional<RouteTree>> best_routing; /* Saves the best routing found so far. */
int current, low, high, final;
Expand Down Expand Up @@ -101,7 +101,7 @@ int binary_search_place_and_route(const Netlist<>& placement_net_list,
graph_directionality = (det_routing_arch->directionality == BI_DIRECTIONAL ? GRAPH_BIDIR : GRAPH_UNIDIR);
}

VTR_ASSERT(net_delay.size());
VTR_ASSERT(!net_delay.empty());

if (det_routing_arch->directionality == BI_DIRECTIONAL)
udsd_multiplier = 1;
Expand Down Expand Up @@ -298,7 +298,7 @@ int binary_search_place_and_route(const Netlist<>& placement_net_list,
current = current + current % udsd_multiplier;
}

/* The binary search above occassionally does not find the minimum *
/* The binary search above occasionally does not find the minimum *
* routeable channel width. Sometimes a circuit that will not route *
* in 19 channels will route in 18, due to router flukiness. If *
* verify_binary_search is set, the code below will ensure that FPGAs *
Expand Down
4 changes: 2 additions & 2 deletions vpr/src/base/place_and_route.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ int binary_search_place_and_route(const Netlist<>& placement_net_list,
t_det_routing_arch* det_routing_arch,
std::vector<t_segment_inf>& segment_inf,
NetPinsMatrix<float>& net_delay,
std::shared_ptr<SetupHoldTimingInfo> timing_info,
std::shared_ptr<RoutingDelayCalculator> delay_calc,
const std::shared_ptr<SetupHoldTimingInfo>& timing_info,
const std::shared_ptr<RoutingDelayCalculator>& delay_calc,
bool is_flat);

t_chan_width init_chan(int cfactor,
Expand Down
61 changes: 47 additions & 14 deletions vpr/src/base/read_options.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2788,8 +2788,8 @@ argparse::ArgumentParser create_arg_parser(const std::string& prog_name, t_optio

noc_grp.add_argument<bool, ParseOnOff>(args.noc, "--noc")
.help(
"Enables a NoC-driven placer that optimizes the placement of routers on the NoC."
"Also enables an option in the graphical display that can be used to display the NoC on the FPGA."
"Enables a NoC-driven placer that optimizes the placement of routers on the NoC. "
"Also enables an option in the graphical display that can be used to display the NoC on the FPGA. "
"This should be on only when the FPGA device contains a NoC and the provided netlist connects to the NoC.")
.default_value("off")
.show_in(argparse::ShowIn::HELP_ONLY);
Expand All @@ -2805,7 +2805,7 @@ argparse::ArgumentParser create_arg_parser(const std::string& prog_name, t_optio
.help(
"Controls the algorithm used by the NoC to route packets.\n"
"* xy_routing: Uses the direction oriented routing algorithm. This is recommended to be used with mesh NoC topologies.\n"
"* bfs_routing: Uses the breadth first search algorithm. The objective is to find a route that uses a minimum number of links."
"* bfs_routing: Uses the breadth first search algorithm. The objective is to find a route that uses a minimum number of links. "
" This algorithm is not guaranteed to generate deadlock-free traffic flow routes, but can be used with any NoC topology\n"
"* west_first_routing: Uses the west-first routing algorithm. This is recommended to be used with mesh NoC topologies.\n"
"* north_last_routing: Uses the north-last routing algorithm. This is recommended to be used with mesh NoC topologies.\n"
Expand All @@ -2818,9 +2818,9 @@ argparse::ArgumentParser create_arg_parser(const std::string& prog_name, t_optio

noc_grp.add_argument<double>(args.noc_placement_weighting, "--noc_placement_weighting")
.help(
"Controls the importance of the NoC placement parameters relative to timing and wirelength of the design."
"This value can be >=0, where 0 would mean the placement is based solely on timing and wirelength."
"A value of 1 would mean noc placement is considered equal to timing and wirelength"
"Controls the importance of the NoC placement parameters relative to timing and wirelength of the design. "
"This value can be >=0, where 0 would mean the placement is based solely on timing and wirelength. "
"A value of 1 would mean noc placement is considered equal to timing and wirelength "
"A value greater than 1 would mean the placement is increasingly dominated by NoC parameters.")
.default_value("5.0")
.show_in(argparse::ShowIn::HELP_ONLY);
Expand All @@ -2830,7 +2830,7 @@ argparse::ArgumentParser create_arg_parser(const std::string& prog_name, t_optio
"Controls the importance of minimizing the NoC aggregate bandwidth.\n"
"This value can be >=0, where 0 would mean the aggregate bandwidth has no relevance to placement.\n"
"Other positive numbers specify the importance of minimizing the NoC aggregate bandwidth to other NoC-related cost terms.\n"
"Weighting factors for NoC-related cost terms are normalized internally. Therefore, their absolute values are not important, and"
"Weighting factors for NoC-related cost terms are normalized internally. Therefore, their absolute values are not important, and "
"only their relative ratios determine the importance of each cost term.")
.default_value("0.38")
.show_in(argparse::ShowIn::HELP_ONLY);
Expand All @@ -2840,7 +2840,7 @@ argparse::ArgumentParser create_arg_parser(const std::string& prog_name, t_optio
"Controls the importance of meeting all the NoC traffic flow latency constraints.\n"
"This value can be >=0, where 0 would mean the latency constraints have no relevance to placement.\n"
"Other positive numbers specify the importance of meeting latency constraints to other NoC-related cost terms.\n"
"Weighting factors for NoC-related cost terms are normalized internally. Therefore, their absolute values are not important, and"
"Weighting factors for NoC-related cost terms are normalized internally. Therefore, their absolute values are not important, and "
"only their relative ratios determine the importance of each cost term.")
.default_value("0.6")
.show_in(argparse::ShowIn::HELP_ONLY);
Expand All @@ -2850,7 +2850,7 @@ argparse::ArgumentParser create_arg_parser(const std::string& prog_name, t_optio
"Controls the importance of reducing the latencies of the NoC traffic flows.\n"
"This value can be >=0, where 0 would mean the latencies have no relevance to placement.\n"
"Other positive numbers specify the importance of minimizing aggregate latency to other NoC-related cost terms.\n"
"Weighting factors for NoC-related cost terms are normalized internally. Therefore, their absolute values are not important, and"
"Weighting factors for NoC-related cost terms are normalized internally. Therefore, their absolute values are not important, and "
"only their relative ratios determine the importance of each cost term.")
.default_value("0.02")
.show_in(argparse::ShowIn::HELP_ONLY);
Expand All @@ -2860,25 +2860,58 @@ argparse::ArgumentParser create_arg_parser(const std::string& prog_name, t_optio
"Controls the importance of reducing the congestion of the NoC links.\n"
"This value can be >=0, where 0 would mean the congestion has no relevance to placement.\n"
"Other positive numbers specify the importance of minimizing congestion to other NoC-related cost terms.\n"
"Weighting factors for NoC-related cost terms are normalized internally. Therefore, their absolute values are not important, and"
"Weighting factors for NoC-related cost terms are normalized internally. Therefore, their absolute values are not important, and "
"only their relative ratios determine the importance of each cost term.")
.default_value("0.25")
.show_in(argparse::ShowIn::HELP_ONLY);

noc_grp.add_argument<double>(args.noc_swap_percentage, "--noc_swap_percentage")
noc_grp.add_argument<double>(args.noc_centroid_weight, "--noc_centroid_weight")
.help(
"Sets the minimum fraction of swaps attempted by the placer that are NoC blocks."
"This value is an integer ranging from 0-100. 0 means NoC blocks will be moved at the same rate as other blocks. 100 means all swaps attempted by the placer are NoC router blocks.")
.default_value("0")
.show_in(argparse::ShowIn::HELP_ONLY);

noc_grp.add_argument<double>(args.noc_centroid_weight, "--noc_centroid_weight")
noc_grp.add_argument<double>(args.noc_swap_percentage, "--noc_swap_percentage")
.help(
"Sets the minimum fraction of swaps attempted by the placer that are NoC blocks."
"Sets the minimum fraction of swaps attempted by the placer that are NoC blocks. "
"This value is an integer ranging from 0-100. 0 means NoC blocks will be moved at the same rate as other blocks. 100 means all swaps attempted by the placer are NoC router blocks.")
.default_value("0")
.show_in(argparse::ShowIn::HELP_ONLY);

noc_grp.add_argument<int>(args.noc_sat_routing_bandwidth_resolution, "--noc_sat_routing_bandwidth_resolution")
.help(
"Specifies the resolution by which traffic flow bandwidths are converted into integers in SAT routing algorithm.\n"
"The higher this number is, the more accurate the congestion estimation and aggregate bandwidth minimization is.\n"
"Higher resolution for bandwidth conversion increases the number of variables in the SAT formulation.")
.default_value("128")
.show_in(argparse::ShowIn::HELP_ONLY);

noc_grp.add_argument<int>(args.noc_sat_routing_latency_overrun_weighting_factor, "--noc_sat_routing_latency_overrun_weighting_factor")
.help(
"Controls the importance of reducing traffic flow latency overrun in SAT routing.")
.default_value("1024")
.show_in(argparse::ShowIn::HELP_ONLY);

noc_grp.add_argument<int>(args.noc_sat_routing_congestion_weighting_factor, "--noc_sat_routing_congestion_weighting_factor")
.help(
"Controls the importance of reducing the number of congested NoC links in SAT routing.")
.default_value("16384")
.show_in(argparse::ShowIn::HELP_ONLY);

noc_grp.add_argument<int>(args.noc_sat_routing_num_workers, "--noc_sat_routing_num_workers")
.help(
"The maximum number of parallel threads that the SAT solver can use to explore the solution space.\n"
"When set to 0, the number of parallel workers is set automatically to maximize parallelism.")
.default_value("0")
.show_in(argparse::ShowIn::HELP_ONLY);

noc_grp.add_argument<bool, ParseOnOff>(args.noc_sat_routing_log_search_progress, "--noc_sat_routing_log_search_progress")
.help(
"Print the detailed log of the SAT solver's search progress.")
.default_value("off")
.show_in(argparse::ShowIn::HELP_ONLY);

noc_grp.add_argument<std::string>(args.noc_placement_file_name, "--noc_placement_file_name")
.help(
"Name of the output file that contains the NoC placement information."
Expand Down
Loading
Loading