Skip to content

Commit 3b74770

Browse files
committed
hacky eft change
1 parent 6cfd05a commit 3b74770

File tree

2 files changed

+25
-5
lines changed

2 files changed

+25
-5
lines changed

include/osp/dag_divider/isomorphism_divider/IsomorphicSubgraphScheduler.hpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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) {

include/osp/dag_divider/isomorphism_divider/TrimmedGroupScheduler.hpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,14 @@ limitations under the License.
2121
#include "osp/bsp/scheduler/Scheduler.hpp"
2222
#include "osp/graph_algorithms/subgraph_algorithms.hpp"
2323
#include "osp/graph_algorithms/computational_dag_util.hpp"
24+
#include <iostream>
2425
#include <numeric>
2526

2627
namespace osp {
2728

2829
/**
30+
* @brief A scheduler for a single trimmed group, which consists of multiple isomorphic connected components.
31+
*
2932
* @class TrimmedGroupScheduler
3033
* @brief A scheduler for a single trimmed group, which consists of multiple isomorphic connected components.
3134
*
@@ -39,6 +42,8 @@ class TrimmedGroupScheduler : public Scheduler<Constr_Graph_t> {
3942
Scheduler<Constr_Graph_t> *sub_scheduler;
4043
unsigned min_non_zero_procs_;
4144

45+
static constexpr bool verbose = true;
46+
4247
public:
4348
TrimmedGroupScheduler(Scheduler<Constr_Graph_t> &scheduler, unsigned min_non_zero_procs)
4449
: sub_scheduler(&scheduler), min_non_zero_procs_(min_non_zero_procs) {}
@@ -59,6 +64,11 @@ class TrimmedGroupScheduler : public Scheduler<Constr_Graph_t> {
5964
return RETURN_STATUS::OSP_SUCCESS;
6065
}
6166

67+
if constexpr (verbose) {
68+
std::cout << " [TrimmedGroupScheduler] min_non_zero_procs: " << min_non_zero_procs_
69+
<< ", num_components: " << num_components << std::endl;
70+
}
71+
6272
// Group vertices by component.
6373
std::vector<std::vector<vertex_idx_t<Constr_Graph_t>>> components_vertices(num_components);
6474
for (vertex_idx_t<Constr_Graph_t> v = 0; v < dag.num_vertices(); ++v) {
@@ -97,6 +107,14 @@ class TrimmedGroupScheduler : public Scheduler<Constr_Graph_t> {
97107
mem_weights[type_idx] = static_cast<v_memw_t<Constr_Graph_t>>(arch.maxMemoryBoundProcType(type_idx));
98108
}
99109

110+
if constexpr (verbose) {
111+
std::cout << " [TrimmedGroupScheduler] Sub-problem processor counts per type: ";
112+
for (size_t type_idx = 0; type_idx < sub_proc_counts.size(); ++type_idx) {
113+
std::cout << "T" << type_idx << ":" << sub_proc_counts[type_idx] << " ";
114+
}
115+
std::cout << std::endl;
116+
}
117+
100118
// Create the sub-architecture for one sub-problem.
101119
BspArchitecture<Constr_Graph_t> sub_arch(arch);
102120
sub_arch.set_processors_consequ_types(sub_proc_counts, mem_weights);

0 commit comments

Comments
 (0)