Skip to content

Commit 52fbd8d

Browse files
update multilevel Sarkar
1 parent 4aa5f0b commit 52fbd8d

File tree

3 files changed

+26
-46
lines changed

3 files changed

+26
-46
lines changed

apps/coarser_plotter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ int main(int argc, char *argv[]) {
5353
params.leniency = 0.005;
5454
params.maxWeight = 15000;
5555
params.smallWeightThreshold = 4000;
56-
params.buffer_merge_mode = SarkarParams::BufferMergeMode::HOMOGENEOUS;
56+
params.buffer_merge_mode = SarkarParams::BufferMergeMode::FULL;
5757

5858
SarkarMul<Graph_t, Graph_t> coarser;
5959
coarser.setParameters(params);

apps/test_suite_runner/StringToScheduler/get_coarser.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -233,9 +233,9 @@ get_multilevel_coarser_by_name(const ConfigParser &, const boost::property_tree:
233233
else if (mode_str == "FAN_IN") ml_params.buffer_merge_mode = SarkarParams::BufferMergeMode::FAN_IN;
234234
else if (mode_str == "FAN_OUT") ml_params.buffer_merge_mode = SarkarParams::BufferMergeMode::FAN_OUT;
235235
else if (mode_str == "HOMOGENEOUS") ml_params.buffer_merge_mode = SarkarParams::BufferMergeMode::HOMOGENEOUS;
236-
else if (mode_str == "MIX") ml_params.buffer_merge_mode = SarkarParams::BufferMergeMode::MIX;
236+
else if (mode_str == "FULL") ml_params.buffer_merge_mode = SarkarParams::BufferMergeMode::FULL;
237237
else throw std::invalid_argument("Invalid Sarkar Buffer Merge mode: " + mode_str
238-
+ "!\nChoose from: OFF, FAN_IN, FAN_OUT, HOMOGENEOUS, MIX.");
238+
+ "!\nChoose from: OFF, FAN_IN, FAN_OUT, HOMOGENEOUS, FULL.");
239239
}
240240
}
241241

include/osp/coarser/Sarkar/SarkarMul.hpp

Lines changed: 23 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ namespace osp {
2626

2727
namespace SarkarParams {
2828

29-
enum class BufferMergeMode { OFF, FAN_IN, FAN_OUT, HOMOGENEOUS, MIX };
29+
enum class BufferMergeMode { OFF, FAN_IN, FAN_OUT, HOMOGENEOUS, FULL };
3030

3131
template<typename commCostType>
3232
struct MulParameters {
@@ -239,55 +239,35 @@ RETURN_STATUS SarkarMul<Graph_t, Graph_t_coarse>::run_buffer_merges() {
239239
RETURN_STATUS status = RETURN_STATUS::OSP_SUCCESS;
240240

241241
unsigned no_change = 0;
242-
while (no_change < ml_params.max_num_iteration_without_changes) {
243-
switch (ml_params.buffer_merge_mode)
244-
{
245-
case SarkarParams::BufferMergeMode::FAN_IN:
246-
{
247-
params.mode = SarkarParams::Mode::FAN_IN_BUFFER;
248-
}
249-
break;
250-
251-
case SarkarParams::BufferMergeMode::FAN_OUT:
252-
{
253-
params.mode = SarkarParams::Mode::FAN_OUT_BUFFER;
254-
}
255-
break;
256-
257-
case SarkarParams::BufferMergeMode::HOMOGENEOUS:
258-
{
259-
params.mode = SarkarParams::Mode::HOMOGENEOUS_BUFFER;
260-
}
261-
break;
262-
263-
case SarkarParams::BufferMergeMode::MIX:
264-
{
265-
if (thue_coin.get_flip()) {
266-
params.mode = SarkarParams::Mode::HOMOGENEOUS_BUFFER;
267-
} else {
268-
params.mode = thue_coin.get_flip() ? SarkarParams::Mode::FAN_IN_BUFFER : SarkarParams::Mode::FAN_OUT_BUFFER;
269-
}
270-
}
271-
break;
272-
273-
default:
274-
{
275-
params.mode = SarkarParams::Mode::HOMOGENEOUS_BUFFER;
276-
}
277-
break;
278-
}
279-
updateParams();
280-
242+
while (no_change < ml_params.max_num_iteration_without_changes) {
281243
vertex_idx_t<Graph_t> diff = 0;
282-
status = std::max(status, run_single_contraction_mode(diff));
244+
if ((ml_params.buffer_merge_mode == SarkarParams::BufferMergeMode::HOMOGENEOUS) || (ml_params.buffer_merge_mode == SarkarParams::BufferMergeMode::FULL && diff == 0)) {
245+
params.mode = SarkarParams::Mode::HOMOGENEOUS_BUFFER;
246+
updateParams();
247+
status = std::max(status, run_single_contraction_mode(diff));
248+
}
249+
if (ml_params.buffer_merge_mode == SarkarParams::BufferMergeMode::FAN_IN) {
250+
params.mode = SarkarParams::Mode::FAN_IN_BUFFER;
251+
updateParams();
252+
status = std::max(status, run_single_contraction_mode(diff));
253+
}
254+
if (ml_params.buffer_merge_mode == SarkarParams::BufferMergeMode::FAN_OUT) {
255+
params.mode = SarkarParams::Mode::FAN_OUT_BUFFER;
256+
updateParams();
257+
status = std::max(status, run_single_contraction_mode(diff));
258+
}
259+
if (ml_params.buffer_merge_mode == SarkarParams::BufferMergeMode::FULL && diff == 0) {
260+
params.mode = thue_coin.get_flip() ? SarkarParams::Mode::FAN_IN_BUFFER : SarkarParams::Mode::FAN_OUT_BUFFER;
261+
updateParams();
262+
status = std::max(status, run_single_contraction_mode(diff));
263+
}
283264

284265
if (diff > 0) {
285266
no_change = 0;
267+
status = std::max(status, run_contractions( ml_params.commCostVec.back() ));
286268
} else {
287269
no_change++;
288270
}
289-
290-
status = std::max(status, run_contractions( ml_params.commCostVec.back() ));
291271
}
292272

293273
return status;

0 commit comments

Comments
 (0)