Skip to content

Commit 8223481

Browse files
committed
revision OrbitGraphProcessor, etfSubgSched fix
eft test
1 parent a79e581 commit 8223481

File tree

3 files changed

+16
-41
lines changed

3 files changed

+16
-41
lines changed

include/osp/dag_divider/isomorphism_divider/EftSubgraphScheduler.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,7 @@ class EftSubgraphScheduler {
332332
for(const auto& job : jobs_) {
333333
result.node_assigned_worker_per_type[job.id].resize(num_worker_types);
334334
for (size_t i = 0; i < num_worker_types; ++i) {
335-
result.node_assigned_worker_per_type[job.id][i] = job.assigned_workers[i];
335+
result.node_assigned_worker_per_type[job.id][i] = job.assigned_workers[i] / job.multiplicity;
336336
}
337337
}
338338

include/osp/dag_divider/isomorphism_divider/OrbitGraphProcessor.hpp

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -116,11 +116,6 @@ class OrbitGraphProcessor {
116116
}
117117

118118
coarser_util::construct_coarse_dag(dag, coarse_graph_, contraction_map_);
119-
120-
// Constr_Graph_t transitive_reduction;
121-
// transitive_reduction_sparse(coarse_graph_, transitive_reduction);
122-
// coarse_graph_ = std::move(transitive_reduction);
123-
124119
perform_coarsening(dag, coarse_graph_);
125120
}
126121

@@ -149,15 +144,15 @@ class OrbitGraphProcessor {
149144

150145
bool changed = true;
151146
while (changed) {
147+
148+
const std::vector< vertex_idx_t<Constr_Graph_t> > vertexPoset = get_top_node_distance<Constr_Graph_t, vertex_idx_t<Constr_Graph_t>>(current_coarse_graph);
149+
152150
changed = false;
153151
for (const auto& edge : edges(current_coarse_graph)) {
154152
VertexType u = source(edge, current_coarse_graph);
155153
VertexType v = target(edge, current_coarse_graph);
156154

157-
if (current_coarse_graph.in_degree(v) != 1) {
158-
if constexpr (verbose) { std::cout << " - Skipping edge " << u << " -> " << v << " target in-degree > 1" << std::endl; }
159-
continue;
160-
}
155+
if (vertexPoset[u] + 1 != vertexPoset[v]) continue;
161156

162157
std::vector<std::vector<VertexType>> new_subgraphs;
163158

tests/eft_subgraph_scheduler.cpp

Lines changed: 11 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -61,20 +61,13 @@ BOOST_AUTO_TEST_CASE(EftSubgraphScheduler_SimpleChain)
6161

6262
// 4. Assertions
6363
BOOST_CHECK_CLOSE(schedule.makespan, 250.0, 1e-9);
64-
6564
BOOST_REQUIRE_EQUAL(schedule.node_assigned_worker_per_type.size(), 3);
66-
67-
// Job 0 should use 2 workers of type 0
6865
BOOST_REQUIRE_EQUAL(schedule.node_assigned_worker_per_type[0].size(), 2);
6966
BOOST_CHECK_EQUAL(schedule.node_assigned_worker_per_type[0][0], 2);
7067
BOOST_CHECK_EQUAL(schedule.node_assigned_worker_per_type[0][1], 0);
71-
72-
// Job 1 should use 2 workers of type 0 and 2 of type 1
7368
BOOST_REQUIRE_EQUAL(schedule.node_assigned_worker_per_type[1].size(), 2);
74-
BOOST_CHECK_EQUAL(schedule.node_assigned_worker_per_type[1][0], 2);
75-
BOOST_CHECK_EQUAL(schedule.node_assigned_worker_per_type[1][1], 2);
76-
77-
// Job 2 should use 2 workers of type 1
69+
BOOST_CHECK_EQUAL(schedule.node_assigned_worker_per_type[1][0], 1);
70+
BOOST_CHECK_EQUAL(schedule.node_assigned_worker_per_type[1][1], 1);
7871
BOOST_REQUIRE_EQUAL(schedule.node_assigned_worker_per_type[2].size(), 2);
7972
BOOST_CHECK_EQUAL(schedule.node_assigned_worker_per_type[2][0], 0);
8073
BOOST_CHECK_EQUAL(schedule.node_assigned_worker_per_type[2][1], 2);
@@ -132,22 +125,14 @@ BOOST_AUTO_TEST_CASE(EftSubgraphScheduler_ForkJoin)
132125
BOOST_CHECK_CLOSE(schedule.makespan, 200.0, 1e-9);
133126

134127
BOOST_REQUIRE_EQUAL(schedule.node_assigned_worker_per_type.size(), 4);
135-
136-
// Job 0 should use 4 workers
137128
BOOST_REQUIRE_EQUAL(schedule.node_assigned_worker_per_type[0].size(), 1);
138129
BOOST_CHECK_EQUAL(schedule.node_assigned_worker_per_type[0][0], 4);
139-
140-
// Job 1 should use 2 workers
141130
BOOST_REQUIRE_EQUAL(schedule.node_assigned_worker_per_type[1].size(), 1);
142-
BOOST_CHECK_EQUAL(schedule.node_assigned_worker_per_type[1][0], 2);
143-
144-
// Job 2 should use 2 workers
131+
BOOST_CHECK_EQUAL(schedule.node_assigned_worker_per_type[1][0], 1);
145132
BOOST_REQUIRE_EQUAL(schedule.node_assigned_worker_per_type[2].size(), 1);
146133
BOOST_CHECK_EQUAL(schedule.node_assigned_worker_per_type[2][0], 2);
147-
148-
// Job 3 should use 4 workers
149134
BOOST_REQUIRE_EQUAL(schedule.node_assigned_worker_per_type[3].size(), 1);
150-
BOOST_CHECK_EQUAL(schedule.node_assigned_worker_per_type[3][0], 4);
135+
BOOST_CHECK_EQUAL(schedule.node_assigned_worker_per_type[3][0], 1);
151136
}
152137

153138
BOOST_AUTO_TEST_CASE(EftSubgraphScheduler_Deadlock)
@@ -224,11 +209,11 @@ BOOST_AUTO_TEST_CASE(EftSubgraphScheduler_ComplexDAG)
224209

225210
BOOST_REQUIRE_EQUAL(schedule.node_assigned_worker_per_type.size(), 6);
226211
BOOST_CHECK_EQUAL(schedule.node_assigned_worker_per_type[0][0], 4);
227-
BOOST_CHECK_EQUAL(schedule.node_assigned_worker_per_type[1][0], 4);
212+
BOOST_CHECK_EQUAL(schedule.node_assigned_worker_per_type[1][0], 2);
228213
BOOST_CHECK_EQUAL(schedule.node_assigned_worker_per_type[2][1], 4);
229-
BOOST_CHECK_EQUAL(schedule.node_assigned_worker_per_type[3][0], 4);
230-
BOOST_CHECK_EQUAL(schedule.node_assigned_worker_per_type[3][1], 4);
231-
BOOST_CHECK_EQUAL(schedule.node_assigned_worker_per_type[4][1], 4);
214+
BOOST_CHECK_EQUAL(schedule.node_assigned_worker_per_type[3][0], 1);
215+
BOOST_CHECK_EQUAL(schedule.node_assigned_worker_per_type[3][1], 1);
216+
BOOST_CHECK_EQUAL(schedule.node_assigned_worker_per_type[4][1], 2);
232217
BOOST_CHECK_EQUAL(schedule.node_assigned_worker_per_type[5][0], 4);
233218
}
234219

@@ -284,15 +269,10 @@ BOOST_AUTO_TEST_CASE(EftSubgraphScheduler_ResourceContention)
284269
BOOST_CHECK_CLOSE(schedule.makespan, 55.0, 1e-9);
285270

286271
BOOST_REQUIRE_EQUAL(schedule.node_assigned_worker_per_type.size(), 5);
287-
// Job 0: 4 workers
288272
BOOST_CHECK_EQUAL(schedule.node_assigned_worker_per_type[0][0], 4);
289-
// Job 1 (high rank): gets 2 workers
290-
BOOST_CHECK_EQUAL(schedule.node_assigned_worker_per_type[1][0], 2);
291-
// Job 2 (mid rank): gets 2 workers
292-
BOOST_CHECK_EQUAL(schedule.node_assigned_worker_per_type[2][0], 2);
293-
// Job 3 (low rank): has to wait, then gets 2 workers
294-
BOOST_CHECK_EQUAL(schedule.node_assigned_worker_per_type[3][0], 2);
295-
// Job 4: gets 4 workers
273+
BOOST_CHECK_EQUAL(schedule.node_assigned_worker_per_type[1][0], 1);
274+
BOOST_CHECK_EQUAL(schedule.node_assigned_worker_per_type[2][0], 1);
275+
BOOST_CHECK_EQUAL(schedule.node_assigned_worker_per_type[3][0], 1);
296276
BOOST_CHECK_EQUAL(schedule.node_assigned_worker_per_type[4][0], 4);
297277
}
298278

0 commit comments

Comments
 (0)