@@ -39,7 +39,7 @@ class IsomorphicSubgraphScheduler {
3939
4040 private:
4141
42- static constexpr bool verbose = false ;
42+ static constexpr bool verbose = true ;
4343 const HashComputer<vertex_idx_t <Graph_t>>* hash_computer_;
4444 size_t symmetry_ = 2 ;
4545 Scheduler<Constr_Graph_t> * bsp_scheduler_;
@@ -90,7 +90,7 @@ class IsomorphicSubgraphScheduler {
9090 std::vector<bool > was_trimmed (isomorphic_groups.size (), false );
9191 trim_subgraph_groups (isomorphic_groups, instance, was_trimmed); // Apply trimming and record which groups were affected
9292
93- auto input = prepare_subgraph_scheduling_input (instance, isomorphic_groups);
93+ auto input = prepare_subgraph_scheduling_input (instance, isomorphic_groups, was_trimmed );
9494
9595 EftSubgraphScheduler<Constr_Graph_t> etf_scheduler;
9696 SubgraphSchedule subgraph_schedule = etf_scheduler.run (input.instance , input.multiplicities , input.required_proc_types , input.max_num_processors );
@@ -208,14 +208,15 @@ class IsomorphicSubgraphScheduler {
208208 continue ;
209209 }
210210
211- const unsigned gcd = std::gcd (group_size, effective_min_proc_type_count);
211+ unsigned gcd = std::gcd (group_size, effective_min_proc_type_count);
212212
213213 if (gcd < group_size) {
214214 if constexpr (verbose) {
215215 std::cout << " -> Trimming group " << group_idx << " . GCD(" << group_size << " , " << effective_min_proc_type_count
216216 << " ) = " << gcd << " . Merging " << group_size / gcd << " subgraphs at a time." << std::endl;
217217 }
218218
219+ gcd = 1 ;
219220 was_trimmed[group_idx] = true ;
220221 const unsigned merge_size = group_size / gcd;
221222 std::vector<std::vector<vertex_idx_t <Graph_t>>> new_subgraphs;
@@ -249,7 +250,8 @@ class IsomorphicSubgraphScheduler {
249250
250251 subgraph_scheduler_input<Graph_t, Constr_Graph_t> prepare_subgraph_scheduling_input (
251252 const BspInstance<Graph_t>& original_instance,
252- const std::vector<typename OrbitGraphProcessor<Graph_t, Constr_Graph_t>::Group>& isomorphic_groups) {
253+ const std::vector<typename OrbitGraphProcessor<Graph_t, Constr_Graph_t>::Group>& isomorphic_groups,
254+ const std::vector<bool >& was_trimmed) {
253255
254256 subgraph_scheduler_input<Graph_t, Constr_Graph_t> result;
255257 result.instance .setArchitecture (original_instance.getArchitecture ());
@@ -264,7 +266,7 @@ class IsomorphicSubgraphScheduler {
264266 for (const auto &group : isomorphic_groups) {
265267
266268 result.max_num_processors [coarse_node_idx] = static_cast <unsigned >(group.size () * group.subgraphs [0 ].size ());
267- result.multiplicities [coarse_node_idx] = static_cast <unsigned >(group.subgraphs .size ());
269+ result.multiplicities [coarse_node_idx] = was_trimmed[coarse_node_idx] ? 1 : static_cast <unsigned >(group.subgraphs .size ());
268270 result.required_proc_types [coarse_node_idx].assign (num_proc_types, 0 );
269271
270272 for (const auto &subgraph : group.subgraphs ) {
0 commit comments