@@ -26,6 +26,7 @@ limitations under the License.
2626#include " osp/auxiliary/misc.hpp"
2727#include " osp/graph_algorithms/directed_graph_path_util.hpp"
2828#include " osp/auxiliary/io/general_file_reader.hpp"
29+ #include " osp/partitioning/partitioners/generic_FM.hpp"
2930#include " osp/partitioning/partitioners/partitioning_ILP.hpp"
3031#include " osp/partitioning/partitioners/partitioning_ILP_replication.hpp"
3132#include " osp/graph_implementations/adj_list_impl/computational_dag_vector_impl.hpp"
@@ -101,13 +102,22 @@ int main(int argc, char *argv[]) {
101102 PartitioningProblem instance (hgraph, static_cast <unsigned >(nr_parts));
102103 instance.setMaxWorkWeightViaImbalanceFactor (imbalance);
103104
105+ Partitioning initial_partition (instance);
106+ GenericFM fm;
107+ for (size_t node = 0 ; node < hgraph.num_vertices (); ++node)
108+ initial_partition.setAssignedPartition (node, static_cast <unsigned >(node % static_cast <size_t >(nr_parts)));
109+ if (nr_parts == 2 )
110+ fm.ImprovePartitioning (initial_partition);
111+ if (nr_parts == 4 || nr_parts == 8 || nr_parts == 16 || nr_parts == 32 )
112+ fm.RecursiveFM (initial_partition);
113+
104114 if (replicate > 0 ) {
105115
106116 PartitioningWithReplication partition (instance);
107117 HypergraphPartitioningILPWithReplication partitioner;
108118
109119 for (size_t node = 0 ; node < hgraph.num_vertices (); ++node)
110- partition.setAssignedPartitions (node, {static_cast < unsigned > (node % static_cast < size_t >(nr_parts) )});
120+ partition.setAssignedPartitions (node, {initial_partition. assignedPartition (node)});
111121 if (partition.satisfiesBalanceConstraint ())
112122 partitioner.setUseInitialSolution (true );
113123
@@ -132,7 +142,7 @@ int main(int argc, char *argv[]) {
132142 HypergraphPartitioningILP partitioner;
133143
134144 for (size_t node = 0 ; node < hgraph.num_vertices (); ++node)
135- partition.setAssignedPartition (node, static_cast < unsigned > (node % static_cast < size_t >(nr_parts) ));
145+ partition.setAssignedPartition (node, initial_partition. assignedPartition (node));
136146 if (partition.satisfiesBalanceConstraint ())
137147 partitioner.setUseInitialSolution (true );
138148
0 commit comments