From 1faaa747624a19f4049343f5544dda872ea1fdf2 Mon Sep 17 00:00:00 2001 From: Daniel Salwasser Date: Sun, 15 Sep 2024 13:48:41 +0200 Subject: [PATCH 1/2] fix(kaminpar-dist): track overcommited memory that is used for graph generation with sKaGen --- apps/io/dist_skagen.cc | 10 ++++++++++ apps/io/dist_skagen.h | 7 +++++++ .../contraction/buffered_cluster_contraction.cc | 7 ++++--- .../contraction/unbuffered_cluster_contraction.cc | 7 ++++--- 4 files changed, 25 insertions(+), 6 deletions(-) diff --git a/apps/io/dist_skagen.cc b/apps/io/dist_skagen.cc index 8fbf59fd..298f0f6b 100644 --- a/apps/io/dist_skagen.cc +++ b/apps/io/dist_skagen.cc @@ -1,3 +1,10 @@ +/******************************************************************************* + * Utilities for graph generation with streaming KaGen. + * + * @file: dist_skagen.h + * @author: Daniel Salwasser + * @date: 13.07.2024 + ******************************************************************************/ #include "apps/io/dist_skagen.h" #include @@ -120,6 +127,9 @@ DistributedCSRGraph csr_streaming_generate( const EdgeID num_local_edges = current_edge; StaticArray wrapped_edges(num_local_edges, std::move(edges_ptr)); + if constexpr (kHeapProfiling) { + heap_profiler::HeapProfiler::global().record_alloc(edges, num_local_edges * sizeof(NodeID)); + } StaticArray edge_distribution(size + 1); edge_distribution[rank] = num_local_edges; diff --git a/apps/io/dist_skagen.h b/apps/io/dist_skagen.h index db2a5148..e1f241fd 100644 --- a/apps/io/dist_skagen.h +++ b/apps/io/dist_skagen.h @@ -1,3 +1,10 @@ +/******************************************************************************* + * Utilities for graph generation with streaming KaGen. + * + * @file: dist_skagen.h + * @author: Daniel Salwasser + * @date: 13.07.2024 + ******************************************************************************/ #pragma once #include diff --git a/kaminpar-shm/coarsening/contraction/buffered_cluster_contraction.cc b/kaminpar-shm/coarsening/contraction/buffered_cluster_contraction.cc index a3b306f1..c476d588 100644 --- a/kaminpar-shm/coarsening/contraction/buffered_cluster_contraction.cc +++ b/kaminpar-shm/coarsening/contraction/buffered_cluster_contraction.cc @@ -246,15 +246,16 @@ std::unique_ptr contract_clustering_buffered( const EdgeID c_m = c_nodes.back(); START_HEAP_PROFILER("Coarse graph edges allocation"); - RECORD("c_edges") StaticArray finalized_c_edges(c_m, std::move(c_edges)); - RECORD("c_edge_weights") - StaticArray finalized_c_edge_weights(c_m, std::move(c_edge_weights)); if constexpr (kHeapProfiling) { heap_profiler::HeapProfiler::global().record_alloc(c_edges.get(), c_m * sizeof(NodeID)); heap_profiler::HeapProfiler::global().record_alloc( c_edge_weights.get(), c_m * sizeof(EdgeWeight) ); } + + RECORD("c_edges") StaticArray finalized_c_edges(c_m, std::move(c_edges)); + RECORD("c_edge_weights") + StaticArray finalized_c_edge_weights(c_m, std::move(c_edge_weights)); STOP_HEAP_PROFILER(); return std::make_unique( diff --git a/kaminpar-shm/coarsening/contraction/unbuffered_cluster_contraction.cc b/kaminpar-shm/coarsening/contraction/unbuffered_cluster_contraction.cc index cfecf6ef..5641fc77 100644 --- a/kaminpar-shm/coarsening/contraction/unbuffered_cluster_contraction.cc +++ b/kaminpar-shm/coarsening/contraction/unbuffered_cluster_contraction.cc @@ -564,13 +564,14 @@ std::unique_ptr contract_clustering_unbuffered( STOP_HEAP_PROFILER(); START_HEAP_PROFILER("Coarse graph edges allocation"); - RECORD("c_edges") StaticArray finalized_c_edges(c_m, std::move(c_edges_ptr)); - RECORD("c_edge_weights") - StaticArray finalized_c_edge_weights(c_m, std::move(c_edge_weights_ptr)); if constexpr (kHeapProfiling) { heap_profiler::HeapProfiler::global().record_alloc(c_edges, c_m * sizeof(NodeID)); heap_profiler::HeapProfiler::global().record_alloc(c_edge_weights, c_m * sizeof(EdgeWeight)); } + + RECORD("c_edges") StaticArray finalized_c_edges(c_m, std::move(c_edges_ptr)); + RECORD("c_edge_weights") + StaticArray finalized_c_edge_weights(c_m, std::move(c_edge_weights_ptr)); STOP_HEAP_PROFILER(); return std::make_unique( From fd58dadd6844a3977508787a329c076b48a8d744 Mon Sep 17 00:00:00 2001 From: Daniel Salwasser Date: Sun, 15 Sep 2024 13:50:05 +0200 Subject: [PATCH 2/2] fix(bipartitioning): remove parallel invocations during initial partitioning --- kaminpar-common/datastructures/binary_heap.h | 2 -- kaminpar-shm/initial_partitioning/initial_fm_refiner.cc | 6 +++--- kaminpar-shm/partitioning/helper.cc | 2 +- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/kaminpar-common/datastructures/binary_heap.h b/kaminpar-common/datastructures/binary_heap.h index c46643ad..0dc01241 100644 --- a/kaminpar-common/datastructures/binary_heap.h +++ b/kaminpar-common/datastructures/binary_heap.h @@ -11,8 +11,6 @@ #include #include -#include - #include "kaminpar-common/assert.h" #include "kaminpar-common/datastructures/scalable_vector.h" diff --git a/kaminpar-shm/initial_partitioning/initial_fm_refiner.cc b/kaminpar-shm/initial_partitioning/initial_fm_refiner.cc index ba3f2bfb..e5f99ec2 100644 --- a/kaminpar-shm/initial_partitioning/initial_fm_refiner.cc +++ b/kaminpar-shm/initial_partitioning/initial_fm_refiner.cc @@ -242,7 +242,7 @@ EdgeWeight InitialFMRefinerip_timings) : nullptr).take_raw_partition(); if (partition_lifespan) { - StaticArray owned_bipartition(bipartition.size()); + StaticArray owned_bipartition(bipartition.size(), static_array::noinit); std::copy(bipartition.begin(), bipartition.end(), owned_bipartition.begin()); initial_bipartitioner_pool.put(std::move(bipartitioner));