Skip to content

Commit

Permalink
feat: add option to ignore edge weights, also output rearrengement ma…
Browse files Browse the repository at this point in the history
…pping
  • Loading branch information
DanielSeemaier committed Oct 25, 2024
1 parent aa07578 commit bdc9754
Showing 1 changed file with 25 additions and 8 deletions.
33 changes: 25 additions & 8 deletions apps/KaMinPar.cc
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,11 @@ struct ApplicationContext {
std::string graph_filename = "";
io::GraphFileFormat input_graph_file_format = io::GraphFileFormat::METIS;

bool ignore_edge_weights = false;

std::string partition_filename = "";
std::string rearranged_graph_filename = "";
std::string rearranged_mapping_filename = "";
std::string block_sizes_filename = "";
io::GraphFileFormat output_graph_file_format = io::GraphFileFormat::METIS;

Expand Down Expand Up @@ -131,6 +134,7 @@ The output should be stored in a file and can be used by the -C,--config option.
- metis
- parhip)")
->capture_default_str();
cli.add_flag("--ignore-edge-weights", app.ignore_edge_weights, "Ignore edge weights.");

if constexpr (kHeapProfiling) {
auto *hp_group = cli.add_option_group("Heap Profiler");
Expand Down Expand Up @@ -175,6 +179,8 @@ The output should be stored in a file and can be used by the -C,--config option.
"are contiguous and write it to this file."
)
->capture_default_str();
cli.add_option("--output-rearranged-mapping", app.rearranged_mapping_filename)
->capture_default_str();
cli.add_option("--output-graph-file-format", app.output_graph_file_format)
->transform(CLI::CheckedTransformer(io::get_graph_file_formats()).description(""))
->description(R"(Graph file formats:
Expand Down Expand Up @@ -289,6 +295,16 @@ int main(int argc, char *argv[]) {
);
};

if (app.ignore_edge_weights) {
auto &csr_graph = graph.concretize<CSRGraph>();
graph = {std::make_unique<CSRGraph>(
csr_graph.take_raw_nodes(),
csr_graph.take_raw_edges(),
csr_graph.take_raw_node_weights(),
StaticArray<EdgeWeight>{}
)};
}

if (app.validate) {
shm::validate_undirected_graph(graph);
}
Expand All @@ -299,25 +315,26 @@ int main(int argc, char *argv[]) {

// Compute graph partition
partitioner.set_graph(std::move(graph));
partitioner.compute_partition(app.k, partition.data(), app.rearranged_graph_filename.empty());
partitioner.compute_partition(app.k, partition.data());

// Save graph partition
if (!app.partition_filename.empty()) {
if (!app.rearranged_graph_filename.empty()) {
LOG_WARNING << "Cannot output partition because rearranged graph is requested";
} else {
shm::io::partition::write(app.partition_filename, partition);
}
shm::io::partition::write(app.partition_filename, partition);
}

if (!app.rearranged_graph_filename.empty()) {
// @todo: does not work with compressed graphs
const auto &csr_graph = partitioner.graph()->concretize<CSRGraph>();
Graph graph =
io::read(app.graph_filename, app.input_graph_file_format, NodeOrdering::NATURAL, false);
auto &csr_graph = graph.concretize<CSRGraph>();

auto permutations = shm::graph::compute_node_permutation_by_generic_buckets(
csr_graph.n(), app.k, [&](const NodeID u) { return partition[u]; }
);

if (!app.rearranged_mapping_filename.empty()) {
shm::io::partition::write(app.rearranged_mapping_filename, permutations.old_to_new);
}

StaticArray<EdgeID> tmp_nodes(csr_graph.raw_nodes().size());
StaticArray<NodeID> tmp_edges(csr_graph.raw_edges().size());
StaticArray<NodeWeight> tmp_node_weights(csr_graph.raw_node_weights().size());
Expand Down

0 comments on commit bdc9754

Please sign in to comment.