Skip to content

Commit

Permalink
refactor: split random bipartitioner between *.h and *.cc
Browse files Browse the repository at this point in the history
  • Loading branch information
DanielSeemaier committed Jun 5, 2024
1 parent f8c4c9c commit ff1c6e9
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 15 deletions.
28 changes: 28 additions & 0 deletions kaminpar-shm/initial_partitioning/random_bipartitioner.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/*******************************************************************************
* Random initial bipartitioner that uses actual PRNG.
*
* @file: random_bipartitioner.cc
* @author: Daniel Seemaier
* @date: 21.09.2021
******************************************************************************/
#include "kaminpar-shm/initial_partitioning/random_bipartitioner.h"

#include "kaminpar-shm/kaminpar.h"

namespace kaminpar::shm::ip {
RandomBipartitioner::RandomBipartitioner(const InitialPoolPartitionerContext &pool_ctx)
: Bipartitioner(pool_ctx) {}

void RandomBipartitioner::fill_bipartition() {
for (const NodeID u : _graph->nodes()) {
const std::size_t block = _rand.random_index(0, 2);

if (_block_weights[block] + _graph->node_weight(u) <
_p_ctx->block_weights.perfectly_balanced(block)) {
set_block(u, block);
} else {
add_to_smaller_block(u);
}
}
}
} // namespace kaminpar::shm::ip
17 changes: 2 additions & 15 deletions kaminpar-shm/initial_partitioning/random_bipartitioner.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,30 +7,17 @@
******************************************************************************/
#pragma once

#include "kaminpar-shm/datastructures/csr_graph.h"
#include "kaminpar-shm/initial_partitioning/bipartitioner.h"

#include "kaminpar-common/random.h"

namespace kaminpar::shm::ip {
class RandomBipartitioner : public Bipartitioner {
public:
explicit RandomBipartitioner(const InitialPoolPartitionerContext &pool_ctx)
: Bipartitioner(pool_ctx) {}
explicit RandomBipartitioner(const InitialPoolPartitionerContext &pool_ctx);

protected:
void fill_bipartition() final {
for (const NodeID u : _graph->nodes()) {
const std::size_t block = _rand.random_index(0, 2);

if (_block_weights[block] + _graph->node_weight(u) <
_p_ctx->block_weights.perfectly_balanced(block)) {
set_block(u, block);
} else {
add_to_smaller_block(u);
}
}
}
void fill_bipartition() final;

Random &_rand = Random::instance();
};
Expand Down

0 comments on commit ff1c6e9

Please sign in to comment.