2020#include < array>
2121#include < algorithm>
2222#include < cassert>
23- #include < chrono>
2423#include < cstdlib>
2524#include < fstream>
2625#include < iostream>
3938#include < algorithms/partitioner/build_sb_graph.hpp>
4039#include < algorithms/partitioner/kernighan_lin_partitioner.hpp>
4140#include < algorithms/partitioner/partition_graph.hpp>
41+ #include < algorithms/partitioner/sbg_partitioner_types.hpp>
4242#include < algorithms/partitioner/weighted_sb_graph.hpp>
4343
4444constexpr const char *VALID_PARTITION_METHODS = " { Scotch, Metis, HMetis, Kahip, SBG }" ;
@@ -68,14 +68,15 @@ std::string GraphPartitioner::validPartitionMethodsStr()
6868 return valid_methods.str ();
6969}
7070
71- Partition GraphPartitioner::createPartition (const std::string &partition_method_name, unsigned int partitions)
71+ std::tuple<Partition, std::chrono::duration<double >> GraphPartitioner::createPartition (const std::string &partition_method_name,
72+ unsigned int partitions, bool save_to_file)
7273{
7374 Partition partition;
7475 PartitionMethod partition_method = partitionMethod (partition_method_name);
7576
7677 if (partition_method == PartitionMethod::Unknown) {
7778 std::cerr << " Unknown partition method, valid values are: " << validPartitionMethodsStr () << std::endl;
78- return partition;
79+ return { partition, std::chrono::duration< double >()} ;
7980 }
8081
8182 partition.resize (_nbr_vtxs);
@@ -84,6 +85,10 @@ Partition GraphPartitioner::createPartition(const std::string &partition_method_
8485
8586 partition.resize (_nbr_vtxs);
8687
88+ // just in case we are using sbg
89+ sbg_partitioner::PartitionMap sbg_partitions = {};
90+ sbg_partitions.resize (_nbr_parts);
91+
8792 auto start = std::chrono::high_resolution_clock::now ();
8893
8994 if (_nbr_vtxs > _nbr_parts) {
@@ -101,7 +106,7 @@ Partition GraphPartitioner::createPartition(const std::string &partition_method_
101106 partitionUsingKaHip (partition);
102107 break ;
103108 case PartitionMethod::SBG:
104- partitionUsingSBG ();
109+ partitionUsingSBG (sbg_partitions );
105110 break ;
106111 default :
107112 break ;
@@ -113,8 +118,15 @@ Partition GraphPartitioner::createPartition(const std::string &partition_method_
113118
114119 std::cout << " Partition Time: " << duration.count () << " seconds." << std::endl;
115120
116- savePartitionToFile (partition, partition_method_name);
117- return partition;
121+ if (save_to_file) {
122+ if (partition_method == PartitionMethod::SBG) {
123+ // do something
124+ } else {
125+ savePartitionToFile (partition, partition_method_name);
126+ }
127+ }
128+
129+ return {partition, duration};
118130}
119131
120132bool GraphPartitioner::endsWithJson () { return _name.size () >= 5 && _name.compare (_name.size () - 5 , 5 , " .json" ) == 0 ; }
@@ -323,11 +335,9 @@ void GraphPartitioner::partitionUsingKaHip(Partition &partition)
323335 partition.values .data ());
324336}
325337
326- void GraphPartitioner::partitionUsingSBG ()
338+ void GraphPartitioner::partitionUsingSBG (sbg_partitioner::PartitionMap &partitions )
327339{
328- std::cout << " partitionUsingSBG" << std::endl;
329-
330- auto partitions = sbg_partitioner::best_initial_partition (*sbg_graph, _nbr_parts, sbg_partitioner::InitialPartitionStrategy::ALL, false );
340+ partitions = sbg_partitioner::best_initial_partition (*sbg_graph, _nbr_parts, sbg_partitioner::InitialPartitionStrategy::ALL, false );
331341 // std::cout << "chosen partition " << partitions << std::endl;
332342
333343 sbg_partitioner::kl_sbg_imbalance_partitioner (*sbg_graph, partitions, _imbalance, false );
0 commit comments