Skip to main content

Mt-KaHyPar: Multi-Threaded Karlsruhe Hypergraph Partitioning

Project description

Mt-KaHyPar - Multi-Threaded Karlsruhe Graph and Hypergraph Partitioner

License Linux, MacOS & Windows Build Code Coverage Zenodo
License: MIT Build Status codecov DOI

Table of Contents

About Mt-KaHyPar

Mt-KaHyPar is a shared-memory algorithm for partitioning graphs and hypergraphs. The balanced (hyper)graph partitioning problem asks for a partition of the node set of a (hyper)graph into k disjoint blocks of roughly the same size (usually a small imbalance is allowed by at most 1 + ε times the average block weight), while simultaneously minimizing an objective function defined on the (hyper)edges. Mt-KaHyPar can optimize the cut-net, connectivity, sum-of-external-degrees, and Steiner tree metric (see Supported Objective Functions).

alt textalt text

The highest-quality configuration of Mt-KaHyPar computes partitions that are on par with those produced by the best sequential partitioning algorithms, while being almost an order of magnitude faster with only ten threads (e.g., when compared to KaFFPa or KaHyPar). Besides our high-quality configuration, we provide several other faster configurations that are already able to outperform most of the existing partitioning algorithms with regard to solution quality and running time. The figure below summarizes the time-quality trade-off of different hypergraph (left, connectivity metric) and graph partitioning algorithms (right, cut-net metric). The plot is based on an experiment with over 800 graphs and hypergraphs and relates the average solution quality and running time of each algorithm to the best achievable results. Points on the lower-left are considered better. Partially transparent markers indicate solvers producing more than 15% infeasible partitions (either imbalanced or timeout). For more details, we refer the reader to our publications.

time_quality_trade_off

Features

Besides its fast and high-quality partitioning algorithm, Mt-KaHyPar provides many other useful features:

  • Scalability: Mt-KaHyPar has excellent scaling behaviour (up to 25 with 64 threads), while increasing the number of threads does not adversely affect the solution quality.
  • Deterministic Partitioning: Mt-KaHyPar offers a deterministic partitioning algorithm, ensuring consistent solutions for the same input and random seed.
  • Large K Partitioning: We provide a partitioning configuration for partitioning (hyper)graphs into a large number of blocks (e.g., k > 1024).
  • Graph Partitioning: Mt-KaHyPar includes optimized data structures for graph partitioning, achieving a speedup by a factor of two for plain graphs.
  • Objective Functions: Mt-KaHyPar can optimize the cut-net, connectivity, and sum-of-external-degrees metric (for more details, see Supported Objective Functions)
  • Mapping (Hyper)Graphs Onto Graphs: In many applications (e.g., distributed computation), the partition is assigned to a communication network that can be represented as a graph. However, conventional objective functions do not consider the topology of the target graph. We therefore provide a mode that maps the nodes of a (hyper)graph onto a target graph via the Steiner tree metric.
  • Fixed Vertices: Fixed vertices are nodes that are preassigned to a particular block and are not allowed to change their block during partitioning.

Requirements

Mt-KaHyPar requires:

  • A 64-bit Linux, MacOS, or Windows operating system.
  • A modern, C++17-ready compiler such as g++ version 7 or higher, clang version 11.0.3 or higher, or MinGW compiler on Windows.
  • The cmake build system (>= 3.21).
  • The Boost - Program Options library and the boost header files (>= 1.48). If you don't want to install boost by yourself, you can add the -DKAHYPAR_DOWNLOAD_BOOST=On flag to the cmake command to download, extract, and build the necessary dependencies automatically.
  • The Intel Thread Building Blocks library (TBB, minimum required version is OneTBB 2021.5.0). If you don't want to install TBB by yourself, you can add the -DKAHYPAR_DOWNLOAD_TBB=On flag (only available on Linux) to the cmake command to download oneTBB and extract the necessary dependencies automatically.
  • The Portable Hardware Locality library (hwloc)

Linux

The following command will install most of the required dependencies on a Ubuntu machine:

sudo apt-get install libtbb-dev libhwloc-dev libboost-program-options-dev

MacOS

The following command will install most of the required dependencies on a MacOS machine:

brew install tbb boost hwloc

Windows

The following instructions set up the environment used to build Mt-KaHyPar on Windows machines:

  1. Download and install MSYS2 from the official website (https://www.msys2.org/).
  2. Launch the MSYS2 MinGW x64 terminal.
  3. Update the package manager database by running the following command:
pacman -Syu
  1. The following command will then install all required dependencies:
pacman -S make mingw-w64-x86_64-cmake mingw-w64-x86_64-gcc mingw-w64-x86_64-python3 mingw-w64-x86_64-boost mingw-w64-x86_64-tbb

Please note that Mt-KaHyPar was primarily tested and evaluated on Linux machines. While a Windows build has been provided and tested on MSYS2 using pacman to install the required dependencies, we cannot provide any performance guarantees or ensure that the Windows version is free of bugs. We are happy to accept contributions to improve Windows support.

Building Mt-KaHyPar

To build Mt-KaHyPar, use the following commands:

  1. Clone the repository including submodules:

    git clone https://github.com/kahypar/mt-kahypar.git

  2. Create a build directory: mkdir build && cd build

  3. Only on Windows machines: export CMAKE_GENERATOR="MSYS Makefiles"

  4. Run cmake: cmake .. --preset=<default/python/dev>

  5. Run make: make MtKaHyPar -j

The build produces the executable MtKaHyPar, which can be found in build/mt-kahypar/application/.

As a user of Mt-KaHyPar, the default cmake preset is appropriate (or python for installing the Python interface). If you work on Mt-KaHyPar or want to run benchmarks, use the dev preset.

Running Mt-KaHyPar

To partition a hypergraph with our default configuration, you can use the following command:

./mt-kahypar/application/MtKaHyPar -h <path-to-hgr> --preset-type=default -t <# threads> -k <# blocks> -e <imbalance (e.g. 0.03)> -o km1

Partitioning Configurations

Mt-KaHyPar provides several partitioning configurations with different time-quality trade-offs. The configurations are stored in ini files located in the config folder. However, we recommend using the --preset-type command line parameter to run Mt-KaHyPar with a specific partitioning configuration:

--preset-type=<large_k/deterministic/default/quality/highest_quality>
  • large_k: configuration for partitioning (hyper)graphs into a large number of blocks (e.g. >= 1024 blocks)
  • deterministic: configuration for deterministic partitioning
  • default: computes good partitions very fast
  • quality: computes high-quality partitions (uses flow-based refinement)
  • highest_quality: highest-quality configuration (uses n-level coarsening and flow-based refinement)

The presets can be ranked from lowest to the highest-quality as follows: large_k, deterministic, default, quality, and highest_quality. We recommend using the default configuration to compute good partitions very fast and the quality configuration to compute high-quality solutions. The highest_quality configuration computes better partitions than our quality configuration by 0.5% on average at the cost of a two times longer running time for medium-sized instances (up to 100 million pins). When you have to partition a (hyper)graph into a large number of blocks (e.g., >= 1024 blocks), you can use our large_k configuration. However, we only recommend using this if you experience high running times with one of our other configurations as this can significantly worsen the partitioning quality.

Objective Functions

Mt-KaHyPar can optimize the cut-net, connectivity, and sum-of-external-degrees metric (see Supported Objective Functions).

-o <cut/km1/soed>

Graph Partitioning

To partition a graph with Mt-KaHyPar, you can add the following command line parameters to the partitioning call:

-h <path-to-graph> --instance-type=graph --input-file-format=<metis/hmetis> -o cut

Mt-KaHyPar then uses optimized data structures for graph partitioning, which speeds up the partitioning time by a factor of two compared to our hypergraph partitioning code. Per default, we expect the input in hMetis format, but you can read graph files in Metis format via --input-file-format=metis.

Mapping (Hyper)Graphs onto Graphs

To map a (hyper)graph onto a target graph with Mt-KaHyPar, you can add the following command line parameters to the partitioning call:

-g <path-to-target-graph> -o steiner_tree

The target graph is expected to be in Metis format. The nodes of the (hyper)graph are then mapped onto the nodes of the target graph, while optimizing the Steiner tree metric (see Supported Objective Functions).

Fixed Vertices

Fixed vertices are nodes that are preassigned to particular block and are not allowed to change their block during partitioning. Mt-KaHyPar reads fixed vertices from a file in the hMetis fix file format, which can be provided via the following command line parameter:

-f <path-to-fixed-vertex-file>

Note that fixed vertices are only supported in our default, quality, and highest_quality configurations.

Individual Target Block Weights

Per default, Mt-KaHyPar enforces that the weight of each block must be smaller than the average block weight (weight of the hypergraph divided by the number of blocks) times (1 + ε). However, you can provide individual target block weights for each block via

--part-weights=weight_of_block_0 weight_of_block_1 ... weight_of_block_k

Note that the sum of all individual target block weights must be larger than the total weight of all nodes.

Write Partition to Output File

To enable writing the partition to a file after partitioning, you can add the following command line parameters to the partitioning call:

--write-partition-file=true --partition-output-folder=<path/to/folder>

The partition file name is generated automatically based on parameters such as k, imbalance, seed and the input file name and will be located in the folder specified by --partition-output-folder. If you do not provide a partition output folder, the partition file will be placed in the same folder as the input hypergraph file.

Other Useful Program Options

There are several useful options that can provide you with additional insights during and after the partitioning process:

  • --verbose=true: Displays detailed information on the partitioning process
  • --show-detailed-timings=true: Shows detailed sub-timings of each phase of the algorithm at the end of partitioning
  • --enable-progress-bar=true: Shows a progress bar during the coarsening and refinement phase

If you want to change other configuration parameters manually, please run --help for a detailed description of the different program options.

Using Mt-KaHyPar as a library

We provide a simple C interface to use Mt-KaHyPar as a library, as well as a Python interface. On Linux or MacOS, the C library can be built and installed via

make install-mtkahypar  # use sudo (Linux & MacOS) or run shell as an administrator (Windows) to install system-wide

Note: When installing locally, the build will exit with an error due to missing permissions. However, the library is still built successfully and is available in the build folder.

To remove the library from your system use the provided uninstall target:

make uninstall-mtkahypar

Integration via Cmake

If possible, the best way to integrate the C library is directly via cmake using the MtKaHyPar::mtkahypar target.

If the library is installed on the system, it can be used via find_package:

find_package(MtKaHyPar)
if(MtKaHyPar_FOUND)
  add_executable(example example.cc)
  target_link_libraries(example MtKaHyPar::mtkahypar)
endif()

Alternatively, you can use Mt-KaHyPar directly via FetchContent:

FetchContent_Declare(
  MtKaHyPar EXCLUDE_FROM_ALL
  GIT_REPOSITORY https://github.com/kahypar/mt-kahypar
  GIT_TAG        v1.5
)
FetchContent_MakeAvailable(MtKaHyPar)

add_executable(example example.cc)
target_link_libraries(example MtKaHyPar::mtkahypar)

When including Mt-KaHyPar directly, it is also possible to control static versus dynamic linking with the BUILD_SHARED_LIBS and KAHYPAR_STATIC_LINK_DEPENDENCIES cmake options (note that static linking support is still experimental and not available for the installed library).

The C Library Interface

The library interface can be found in include/mtkahypar.h with a detailed documentation. We also provide several examples that show how to use the library.

Here is a short example of how you can partition a hypergraph using our library interface:

#include <cassert>
#include <memory>
#include <vector>
#include <iostream>
#include <thread>

#include <mtkahypar.h>

int main(int argc, char* argv[]) {
  mt_kahypar_error_t error{};

  // Initialize
  mt_kahypar_initialize(
    std::thread::hardware_concurrency() /* use all available cores */,
    true /* activate interleaved NUMA allocation policy */ );

  // Setup partitioning context
  mt_kahypar_context_t* context = mt_kahypar_context_from_preset(DEFAULT);
  // In the following, we partition a hypergraph into two blocks
  // with an allowed imbalance of 3% and optimize the connective metric (KM1)
  mt_kahypar_set_partitioning_parameters(context,
    2 /* number of blocks */, 0.03 /* imbalance parameter */,
    KM1 /* objective function */);
  mt_kahypar_set_seed(42 /* seed */);
  // Enable logging
  mt_kahypar_status_t status =
    mt_kahypar_set_context_parameter(context, VERBOSE, "1", &error);
  assert(status == SUCCESS);

  // Load Hypergraph for DEFAULT preset
  mt_kahypar_hypergraph_t hypergraph =
    mt_kahypar_read_hypergraph_from_file("path/to/hypergraph/file",
      context, HMETIS /* file format */, &error);
  if (hypergraph.hypergraph == nullptr) {
    std::cout << error.msg << std::endl; std::exit(1);
  }

  // Partition Hypergraph
  mt_kahypar_partitioned_hypergraph_t partitioned_hg =
    mt_kahypar_partition(hypergraph, context, &error);
  if (partitioned_hg.partitioned_hg == nullptr) {
    std::cout << error.msg << std::endl; std::exit(1);
  }

  // Extract Partition
  auto partition = std::make_unique<mt_kahypar_partition_id_t[]>(
    mt_kahypar_num_hypernodes(hypergraph));
  mt_kahypar_get_partition(partitioned_hg, partition.get());

  // Extract Block Weights
  auto block_weights = std::make_unique<mt_kahypar_hypernode_weight_t[]>(2);
  mt_kahypar_get_block_weights(partitioned_hg, block_weights.get());

  // Compute Metrics
  const double imbalance = mt_kahypar_imbalance(partitioned_hg, context);
  const int km1 = mt_kahypar_km1(partitioned_hg);

  // Output Results
  std::cout << "Partitioning Results:" << std::endl;
  std::cout << "Imbalance         = " << imbalance << std::endl;
  std::cout << "Km1               = " << km1 << std::endl;
  std::cout << "Weight of Block 0 = " << block_weights[0] << std::endl;
  std::cout << "Weight of Block 1 = " << block_weights[1] << std::endl;

  mt_kahypar_free_context(context);
  mt_kahypar_free_hypergraph(hypergraph);
  mt_kahypar_free_partitioned_hypergraph(partitioned_hg);
}

We recommend integrating the library via cmake into your project, to manage compiling and linking automatically.

However, it is also possible to directly compile the program using g++:

g++ -std=c++17 -DNDEBUG -O3 your_program.cc -o your_program -lmtkahypar

To execute the produced binary, you need to ensure that the installation directory (probably /usr/local/lib on Linux and C:\Program Files (x86)\MtKaHyPar\bin on Windows) is included in the dynamic library path (LD_LIBRARY_PATH on Linux, PATH on Windows).

Note that we internally use different data structures to represent a (hyper)graph based on the corresponding configuration (mt_kahypar_preset_type_t). The mt_kahypar_hypergraph_t structure stores a pointer to this data structure and also a type description. Therefore, you can not partition a (hyper)graph with all available configurations once it is loaded or constructed. However, you can check the compatibility of a hypergraph with a configuration with the following code:

mt_kahypar_context_t* context = mt_kahypar_context_from_preset(QUALITY);
// Check if the hypergraph is compatible with the QUALITY preset
if ( mt_kahypar_check_compatibility(hypergraph, QUALITY) ) {
  mt_kahypar_partitioned_hypergraph_t partitioned_hg =
    mt_kahypar_partition(hypergraph, context, &error);
}

The Python Library Interface

You can install the Python library interface via

make mtkahypar_python

This will create a shared library in the build/python folder (mtkahypar.so on Linux and mtkahypar.pyd on Windows). Copy the libary to your Python project directory to import Mt-KaHyPar as a Python module.

A documentation of the Python module can be found by importing the module (import mtkahypar) and calling help(mtkahypar) in Python. We also provide several examples that show how to use the Python interface.

Here is a short example of how you can partition a hypergraph using our Python interface:

import multiprocessing
import mtkahypar

# Initialize
mtk = mtkahypar.initialize(multiprocessing.cpu_count()) # use all available cores

# Setup partitioning context
context = mtk.context_from_preset(mtkahypar.PresetType.DEFAULT)
# In the following, we partition a hypergraph into two blocks
# with an allowed imbalance of 3% and optimize the connectivity metric
context.set_partitioning_parameters(
  2,                       # number of blocks
  0.03,                    # imbalance parameter
  mtkahypar.Objective.KM1) # objective function
mtkahypar.set_seed(42)     # seed
context.logging = True

# Load hypergraph from file (assumes hMetis file format per default)
hypergraph = mtk.hypergraph_from_file("path/to/hypergraph/file", context)

# Partition hypergraph
partitioned_hg = hypergraph.partition(context)

# Output metrics
print("Partition Stats:")
print("Imbalance = " + str(partitioned_hg.imbalance(context)))
print("km1       = " + str(partitioned_hg.km1()))
print("Block Weights:")
for i in partitioned_hg.blocks():
  print(f"Weight of Block {i} = {partitioned_hg.block_weight(i)}")

We also provide an optimized graph data structure for partitioning plain graphs. The following example loads and partitions a graph:

# Load graph from file (assumes Metis file format per default)
graph = mtkahypar.graph_from_file("path/to/graph/file", context)

# Partition graph
partitioned_graph = graph.partition(context)

Note that we internally use different data structures to represent a (hyper)graph based on the corresponding configuration (PresetType). Therefore, you can not partition a (hyper)graph with all available configurations once it is loaded or constructed. However, you can check the compatibility of a hypergraph with a configuration with the following code:

context = mtk.context_from_preset(mtkahypar.PresetType.QUALITY)
# Check if the hypergraph is compatible with the QUALITY preset
if hypergraph.is_compatible(context.preset):
   partitioned_hg = hypergraph.partition(context)

Supported Objective Functions

Mt-KaHyPar can optimize several objective functions which we explain in the following in more detail.

Cut-Net Metric

cut_net

The cut-net metric is defined as total weight of all nets spanning more than one block of the partition Π (also called cut nets).

Connectivity Metric

connectivity

The connectivity metric additionally multiplies the weight of each cut net with the number of blocks λ(e) spanned by that net minus one. Thus, the connectivity metric tries to minimize the number of blocks connected by each net.

Sum-of-external-Degrees Metric

soed

The sum-of-external-degrees metric is similar to the connectivity metric, but does not subtract one from the number of blocks λ(e) spanned by a net. A peculiarity of this objective function is that removing a net from the cut reduces the metric by 2ω(e), while reducing the connectivity by one reduces the metric only by ω(e). Thus, the objective function prefers removing nets from the cut, while as a secondary criterion, it tries to reduce the connectivity of the nets.

Steiner Tree Metric

steiner_tree

The Steiner tree metric is the most versatile metric that we provide at the moment. A Steiner tree is a tree with minimal weight that connects a subset of the nodes on a graph (a more detailed definition can be found here). For a subset with exactly two nodes, finding a Steiner tree reverts to computing the shortest path between the two nodes. When optimizing the Steiner tree metric, we map the node set of a hypergraph H onto the nodes of a target graph G. The objective is to minimize the total weight of all Steiner trees induced by the nets of H on G. For a net e, dist(Λ(e)) is the weight of the minimal Steiner tree connecting the blocks Λ(e) spanned by net e on G. The Steiner tree metric can be used to accurately model wire-lengths in VLSI design or communication costs in distributed systems when some processors do not communicate with each other directly or with different speeds.

Note that finding a Steiner tree is an NP-hard problem. We therefore enforce a strict upper bound on the number of nodes of the target graph G, which is 64 nodes at the moment. If you want to map a hypergraph onto larger target graphs, you can use recursive partitioning. For example, if you want to map a hypergraph onto a graph with 4096 nodes, you can first partition the hypergraph into 64 blocks, and then map each block of the partition onto a subgraph of the target graph with 64 nodes.

Custom Objective Functions

Our implementation uses a common interface for all gain computation techniques that we use in our refinement algorithms. This enables us to extend Mt-KaHyPar with new objective functions without having to modify the internal implementation of the refinement algorithms. A step-by-step guide on how you can implement your own objective function can be found here.

Improving Compile Times

Mt-KaHyPar implements several graph and hypergraph data structures, and supports different objective functions. In the hot parts of the algorithm, each combination of (hyper)graph data structure and objective function is compiled separately, which notably increases the compile time. We therefore provide the cmake preset minimal to disable some of the features of Mt-KaHyPar for faster compilation.

With this, only the deterministic, default, and quality configurations are available in combination with the cut-net or connectivity metric. Using a disabled feature will throw an error. Note that you can only disable the features in our binary, not in the C and Python interface.

For more fine-grained control, you can directly use the corresponding cmake flags:

-DKAHYPAR_ENABLE_GRAPH_PARTITIONING_FEATURES=On/Off # enables/disables graph partitioning features
-DKAHYPAR_ENABLE_HIGHEST_QUALITY_FEATURES=On/Off # enables/disables our highest-quality configuration
-DKAHYPAR_ENABLE_LARGE_K_PARTITIONING_FEATURES=On/Off # enables/distables large k partitioning features
-DKAHYPAR_ENABLE_SOED_METRIC=On/Off # enables/disables sum-of-external-degrees metric
-DKAHYPAR_ENABLE_STEINER_TREE_METRIC=On/Off # enables/disables Steiner tree metric

Bug Reports

We encourage you to report any problems with Mt-KaHyPar via the github issue tracking system of the project.

Licensing

Mt-KaHyPar is a free software provided under the MIT License. For more information see the LICENSE file. We distribute this framework freely to foster the use and development of hypergraph partitioning tools. If you use Mt-KaHyPar in an academic setting please cite the appropriate papers.

// Mt-KaHyPar-D
@inproceedings{MT-KAHYPAR-D,
  title     = {Scalable Shared-Memory Hypergraph Partitioning},
  author    = {Gottesbüren, Lars and
               Heuer, Tobias and
               Sanders, Peter and
               Schlag, Sebastian},
  booktitle = {23rd Workshop on Algorithm Engineering and Experiments (ALENEX 2021)},
  pages     = {16--30},
  year      = {2021},
  publisher = {SIAM},
  doi       = {10.1137/1.9781611976472.2},
}

// Mt-KaHyPar-Q
@inproceedings{MT-KAHYPAR-Q,
  title     = {Shared-Memory $n$-level Hypergraph Partitioning},
  author    = {Lars Gottesb{\"{u}}ren and
               Tobias Heuer and
               Peter Sanders and
               Sebastian Schlag},
  booktitle = {24th Workshop on Algorithm Engineering and Experiments (ALENEX 2022)},
  year      = {2022},
  publisher = {SIAM},
  month     = {01},
  doi       = {10.1137/1.9781611977042.11}
}

// Mt-KaHyPar-Q-F
@inproceedings{MT-KaHyPar-Q-F,
  title       =	{Parallel Flow-Based Hypergraph Partitioning},
  author      =	{Lars Gottesb\"{u}ren and
                 Tobias Heuer and
                 Peter Sanders},
  booktitle   =	{20th International Symposium on Experimental Algorithms (SEA 2022)},
  pages       =	{5:1--5:21},
  year        =	{2022},
  volume      =	{233},
  publisher   =	{Schloss Dagstuhl -- Leibniz-Zentrum f{\"u}r Informatik},
  doi         =	{10.4230/LIPIcs.SEA.2022.5}
}

// Deterministic Partitioning
@inproceedings{MT-KAHYPAR-SDET,
  author    = {Lars Gottesb{\"{u}}ren and
               Michael Hamann},
  title     = {Deterministic Parallel Hypergraph Partitioning},
  booktitle = {European Conference on Parallel Processing (Euro-Par)},
  volume    = {13440},
  pages     = {301--316},
  publisher = {Springer},
  year      = {2022},
  doi       = {10.1007/978-3-031-12597-3\_19},
}

// Unconstrained Refinement
@inproceedings{MT-KAHYPAR-UNCONSTRAINED,
  author       = {Nikolai Maas and
                  Lars Gottesb{\"{u}}ren and
                  Daniel Seemaier},
  editor       = {Rezaul Chowdhury and
                  Solon P. Pissis},
  title        = {Parallel Unconstrained Local Search for Partitioning Irregular Graphs},
  booktitle    = {Symposium on Algorithm Engineering and Experiments (ALENEX 2024)},
  pages        = {32--45},
  publisher    = {{SIAM}},
  year         = {2024},
  doi          = {10.1137/1.9781611977929.3},
}

// Steiner Tree Objective
@inproceedings{MT-KAHYPAR-STEINER-TREES,
  author       = {Tobias Heuer},
  editor       = {Rezaul Chowdhury and
                  Solon P. Pissis},
  title        = {A Direct \emph{k-}Way Hypergraph Partitioning Algorithm for Optimizing
                  the Steiner Tree Metric},
  booktitle    = {Symposium on Algorithm Engineering and Experiments (ALENEX 2024)},
  pages        = {15--31},
  publisher    = {{SIAM}},
  year         = {2024},
  doi          = {10.1137/1.9781611977929.2}
}

// Dissertation of Lars Gottesbüren
@phdthesis{MT-KAHYPAR-DIS-GOTTESBUEREN,
  author         = {Lars Gottesb\"{u}ren},
  year           = {2023},
  title          = {Parallel and Flow-Based High-Quality Hypergraph Partitioning},
  doi            = {10.5445/IR/1000157894},
  pagetotal      = {256},
  school         = {Karlsruhe Institute of Technology}
}

// Dissertation of Tobias Heuer
@phdthesis{MT-KAHYPAR-DIS-HEUER,
    author       = {Heuer, Tobias},
    year         = {2022},
    title        = {Scalable High-Quality Graph and Hypergraph Partitioning},
    doi          = {10.5445/IR/1000152872},
    pagetotal    = {242},
    school       = {Karlsruhe Institute of Technology}
}

// Mt-KaHyPar Journal Paper
@article{MT-KAHYPAR-JOURNAL,
  author       = {Lars Gottesb{\"{u}}ren and
                  Tobias Heuer and
                  Nikolai Maas and
                  Peter Sanders and
                  Sebastian Schlag},
  title        = {Scalable High-Quality Hypergraph Partitioning},
  journal      = {{ACM} Transactions on Algorithms},
  volume       = {20},
  number       = {1},
  pages        = {9:1--9:54},
  year         = {2024},
  doi          = {10.1145/3626527},
}

Contributing

If you are interested in contributing to the Mt-KaHyPar framework feel free to contact us or create an issue on the issue tracking system.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mtkahypar-1.5.tar.gz (3.1 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

mtkahypar-1.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

mtkahypar-1.5-cp313-cp313-macosx_11_0_arm64.whl (3.8 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

mtkahypar-1.5-cp313-cp313-macosx_10_13_x86_64.whl (4.7 MB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

mtkahypar-1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

mtkahypar-1.5-cp312-cp312-macosx_11_0_arm64.whl (3.8 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

mtkahypar-1.5-cp312-cp312-macosx_10_13_x86_64.whl (4.7 MB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

mtkahypar-1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

mtkahypar-1.5-cp311-cp311-macosx_11_0_arm64.whl (3.8 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

mtkahypar-1.5-cp311-cp311-macosx_10_13_x86_64.whl (4.7 MB view details)

Uploaded CPython 3.11macOS 10.13+ x86-64

mtkahypar-1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

mtkahypar-1.5-cp310-cp310-macosx_11_0_arm64.whl (3.8 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

mtkahypar-1.5-cp310-cp310-macosx_10_13_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.10macOS 10.13+ x86-64

mtkahypar-1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.2 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

mtkahypar-1.5-cp39-cp39-macosx_11_0_arm64.whl (3.8 MB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

mtkahypar-1.5-cp39-cp39-macosx_10_13_x86_64.whl (4.7 MB view details)

Uploaded CPython 3.9macOS 10.13+ x86-64

mtkahypar-1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.2 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

mtkahypar-1.5-cp38-cp38-macosx_11_0_arm64.whl (3.8 MB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

mtkahypar-1.5-cp38-cp38-macosx_10_13_x86_64.whl (4.7 MB view details)

Uploaded CPython 3.8macOS 10.13+ x86-64

mtkahypar-1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.2 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ x86-64

mtkahypar-1.5-cp37-cp37m-macosx_10_13_x86_64.whl (4.7 MB view details)

Uploaded CPython 3.7mmacOS 10.13+ x86-64

File details

Details for the file mtkahypar-1.5.tar.gz.

File metadata

  • Download URL: mtkahypar-1.5.tar.gz
  • Upload date:
  • Size: 3.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for mtkahypar-1.5.tar.gz
Algorithm Hash digest
SHA256 13b70f83f3f80a851de2a22a3f237fc8c84005f7362f95b2c217dd7e59286c85
MD5 ddd8da69955b0fa64de382bbae23e8b0
BLAKE2b-256 2a2e77ae00cea272e092a7a8e7e4bbaea72215674e92b10e2bd5f9edf9f9dfeb

See more details on using hashes here.

Provenance

The following attestation bundles were made for mtkahypar-1.5.tar.gz:

Publisher: python_build_ci.yml on kahypar/mt-kahypar

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mtkahypar-1.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for mtkahypar-1.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c79777f7e81be886a5563f83be5ae2614f5b16cd1d1cbf17c40f375d09840569
MD5 0681d343892f81736819bf1b6a27e20b
BLAKE2b-256 0def51172c2a5efe61f0f8c088d7cb9a0b0cdd384c4614f570dbf3c9d945f3e2

See more details on using hashes here.

Provenance

The following attestation bundles were made for mtkahypar-1.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: python_build_ci.yml on kahypar/mt-kahypar

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mtkahypar-1.5-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mtkahypar-1.5-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b66c6c486deb3928c9b928c62a3c89bb165c9ec3289398bef2bd327c644f6e2f
MD5 df9e8ffcd9f55015528b24fdbdc69ec8
BLAKE2b-256 12b9f2de5f589397c1037f446ca0b2346b7568b2f3970f3688e79f104f561592

See more details on using hashes here.

Provenance

The following attestation bundles were made for mtkahypar-1.5-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: python_build_ci.yml on kahypar/mt-kahypar

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mtkahypar-1.5-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for mtkahypar-1.5-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 f4c0c65e898e3d72c795ef3a22f1c06df8235a7ec31e4692c0dd044d28d67c2f
MD5 24f608127f21e36c06390e5660b650b1
BLAKE2b-256 f3f10d9b47fdc8ee1aeaf204e32d197a9c24aeefe27cfd0dc9a00f89ba46c33c

See more details on using hashes here.

Provenance

The following attestation bundles were made for mtkahypar-1.5-cp313-cp313-macosx_10_13_x86_64.whl:

Publisher: python_build_ci.yml on kahypar/mt-kahypar

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mtkahypar-1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for mtkahypar-1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 81bd7bdff11b502c0c3054c15049f91846b141eecdee24e3891c2b5cf2f7504f
MD5 561b6ef3f6b61584c6aefc4c7939ddd7
BLAKE2b-256 2f015714f2851989fa0285b1723b46a817c17dc3d7536e1702c725277b9486c0

See more details on using hashes here.

Provenance

The following attestation bundles were made for mtkahypar-1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: python_build_ci.yml on kahypar/mt-kahypar

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mtkahypar-1.5-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mtkahypar-1.5-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 df9155a85a1e2d3ab3e6f386b37a207a501c962c3346a75d655c03bcda16e12c
MD5 b5ffb1a7bddbb81ec7602375c11f94a1
BLAKE2b-256 ed463b34ea1ae53f88303187b9373c99b74650f984ababdb9a9d3b54fed97459

See more details on using hashes here.

Provenance

The following attestation bundles were made for mtkahypar-1.5-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: python_build_ci.yml on kahypar/mt-kahypar

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mtkahypar-1.5-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for mtkahypar-1.5-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 185048df0dc271f86899c8f8dd8d838b599677935af050bfb07ca6eb94ef6029
MD5 e9f5a59d1a1922b653b39996814b3b70
BLAKE2b-256 d2f154d97c2cc6ac2d3b487c1961dd482c8afc1d603f5b38b613a7bab5abb189

See more details on using hashes here.

Provenance

The following attestation bundles were made for mtkahypar-1.5-cp312-cp312-macosx_10_13_x86_64.whl:

Publisher: python_build_ci.yml on kahypar/mt-kahypar

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mtkahypar-1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for mtkahypar-1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 162754612a3d4953048c94f92bc8c5558f0f974e68e73510f116e25384b087d6
MD5 0ecbbb4959a7907804292dbe8c465da2
BLAKE2b-256 bd6e7c4297f0f103c74c254cafca2f74d33952a311e0f74fb2eeedfe86bd8254

See more details on using hashes here.

Provenance

The following attestation bundles were made for mtkahypar-1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: python_build_ci.yml on kahypar/mt-kahypar

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mtkahypar-1.5-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mtkahypar-1.5-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 03e67ee9902e7333fecaf68bffad2230b192d91f176fe8e1d799b1b30c411ee8
MD5 e46c51d43c1d28758a0b30f8bcc3f1cc
BLAKE2b-256 0440cea609c3046c40ece327f33b3a6c497ae1287b310ad95a9ddaff20f02792

See more details on using hashes here.

Provenance

The following attestation bundles were made for mtkahypar-1.5-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: python_build_ci.yml on kahypar/mt-kahypar

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mtkahypar-1.5-cp311-cp311-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for mtkahypar-1.5-cp311-cp311-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 862547325803cf1c479f06a44a10f58272a44a53fb359b7094abbeb035f2fb97
MD5 2e4c107c851dca96d155ee403373bbfa
BLAKE2b-256 0e3869c5cc1e183865a41ba42b7b1280d8ea98d5ee398f507e1faa62f84d3467

See more details on using hashes here.

Provenance

The following attestation bundles were made for mtkahypar-1.5-cp311-cp311-macosx_10_13_x86_64.whl:

Publisher: python_build_ci.yml on kahypar/mt-kahypar

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mtkahypar-1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for mtkahypar-1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 dd7d4ea4c2d916cbffde41e41b3aecfb535204c067ca8c99f318ec3d0d165ee2
MD5 a1ea3d542c49e6491b256ad2f6731f3f
BLAKE2b-256 ab578fe7755d461daa1268cfd63469010b0c5f3d3483dc006f3d66802c586155

See more details on using hashes here.

Provenance

The following attestation bundles were made for mtkahypar-1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: python_build_ci.yml on kahypar/mt-kahypar

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mtkahypar-1.5-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mtkahypar-1.5-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 99db9b3f41c0c6f3a8d35e60382c2fb1cb3673a831985b22e27ca5aaaf17243c
MD5 d3aee48cbc19d7dd6af64019ee95991c
BLAKE2b-256 998639901995f45ab6aa4977ba9b6d2ccf566b10d2184780b8825c99fa4ea18d

See more details on using hashes here.

Provenance

The following attestation bundles were made for mtkahypar-1.5-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: python_build_ci.yml on kahypar/mt-kahypar

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mtkahypar-1.5-cp310-cp310-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for mtkahypar-1.5-cp310-cp310-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 67efb923609bb0d184a45adcaa80eb329f36a0470d5907adcc6fbab1076a203c
MD5 8eb72a3ca2159924e359783f3bc491b9
BLAKE2b-256 44602502924e1ac91ef70e54c91f6845035ed9d51f375af5cd70f0ddfb3f20f0

See more details on using hashes here.

Provenance

The following attestation bundles were made for mtkahypar-1.5-cp310-cp310-macosx_10_13_x86_64.whl:

Publisher: python_build_ci.yml on kahypar/mt-kahypar

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mtkahypar-1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for mtkahypar-1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 dcce7e0daa25540f34541b5760c18a1f7ea50754da337ce87dcd0400a366afc2
MD5 1068ef1f3a02daa19de128005dd7a82b
BLAKE2b-256 86e51996be6dacbaf57b58f2023ab7e0f5ceee0ad7b3a32df1e97c6a8384b2de

See more details on using hashes here.

Provenance

The following attestation bundles were made for mtkahypar-1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: python_build_ci.yml on kahypar/mt-kahypar

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mtkahypar-1.5-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mtkahypar-1.5-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 88010da07a5efc0f363112d2facff98eb7214f002441b37f217ab94efd828408
MD5 67bc1f5bd72c050fc60e71062c05dc3a
BLAKE2b-256 868728cd02b9dbd8e0e1e11aded0bd0398b95ae58e4b83f78ac0fd7efa02ab2f

See more details on using hashes here.

Provenance

The following attestation bundles were made for mtkahypar-1.5-cp39-cp39-macosx_11_0_arm64.whl:

Publisher: python_build_ci.yml on kahypar/mt-kahypar

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mtkahypar-1.5-cp39-cp39-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for mtkahypar-1.5-cp39-cp39-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 60b93a38b7bad968ea258bfc072ca5f61f7474328e9c067ec224115cab62ac44
MD5 4583ce3bdbff1d084ba33d8b72b9e4e5
BLAKE2b-256 30674a57b3eccdd94e3490f515581ec6bf783d291479234eb552d663f1e4cc5e

See more details on using hashes here.

Provenance

The following attestation bundles were made for mtkahypar-1.5-cp39-cp39-macosx_10_13_x86_64.whl:

Publisher: python_build_ci.yml on kahypar/mt-kahypar

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mtkahypar-1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for mtkahypar-1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 39524898b28090e457a0a7dc77863ae378c272e392a8eef7eff090edb96b6829
MD5 165ce857b85bb0b039601c133365ae5a
BLAKE2b-256 7e546f46d3a24ca68d042d2aaa60cca1d8a926a9d366bd0b37dc946b62b1f777

See more details on using hashes here.

Provenance

The following attestation bundles were made for mtkahypar-1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: python_build_ci.yml on kahypar/mt-kahypar

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mtkahypar-1.5-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mtkahypar-1.5-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 59ef7958f9c76bb5b1dd24c59658e6c901d630d86236c43d93702b5a53cf2fad
MD5 5e0c31e88180564887a933e5cd0f0058
BLAKE2b-256 0a70fc03b51122f52a3a6b765c9b8c3354219c8899d27347a17b5a7874628979

See more details on using hashes here.

Provenance

The following attestation bundles were made for mtkahypar-1.5-cp38-cp38-macosx_11_0_arm64.whl:

Publisher: python_build_ci.yml on kahypar/mt-kahypar

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mtkahypar-1.5-cp38-cp38-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for mtkahypar-1.5-cp38-cp38-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 70784679074e47014e6a981ae1a511be9cc25cca2fa5f12a780191cf36b6d054
MD5 13b336f4a18b7ea7cf2ea6846de3a173
BLAKE2b-256 9597277d0ce4011b6fdac736b1381de1923cfd8f3abca9fc7252e38c51b97ce8

See more details on using hashes here.

Provenance

The following attestation bundles were made for mtkahypar-1.5-cp38-cp38-macosx_10_13_x86_64.whl:

Publisher: python_build_ci.yml on kahypar/mt-kahypar

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mtkahypar-1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for mtkahypar-1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 fb7af0baf54118be41008670bae4efab9786177701a19238f552d3b0df261b33
MD5 b3081d8851e755168e1c9c0d4e11a303
BLAKE2b-256 4c81465bbb186934920faa51efa133b949fd71b73e68e679362c1ff4b5849219

See more details on using hashes here.

Provenance

The following attestation bundles were made for mtkahypar-1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: python_build_ci.yml on kahypar/mt-kahypar

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mtkahypar-1.5-cp37-cp37m-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for mtkahypar-1.5-cp37-cp37m-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 74ba3f0c58ede5da13ead30afe837d69b0c06f258f943e9d52fad3ed65e12a25
MD5 2f35e86470b7b756916bb30e122f1156
BLAKE2b-256 3e342a1df659b792e8907f9201a78c187309b4a8e84510f575a63cf6ab347e31

See more details on using hashes here.

Provenance

The following attestation bundles were made for mtkahypar-1.5-cp37-cp37m-macosx_10_13_x86_64.whl:

Publisher: python_build_ci.yml on kahypar/mt-kahypar

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page