Skip to main content

Fast fill-reducing sparse matrix ordering and SPD direct solver (CHOLMOD / MKL / cuDSS)

Project description

Homa Build

Homa is a C++20 library with two complementary purposes:

  1. A fast fill-reducing ordering for sparse SPD matrices — the reference implementation of the SIGGRAPH 2026 paper Fast Sparse Matrix Permutation for Mesh-Based Direct Solvers [Zarebavani et al. 2026]. Homa builds a mesh-induced patch decomposition, runs recursive nested dissection on the resulting quotient graph, and assembles a fill-reducing permutation bottom-up. The permutation drops into any sparse Cholesky factorization with no solver-side changes.

  2. A drop-in SPD linear solver wrapper with a uniform analyze -> factorize -> solve API on top of three state-of-the-art sparse direct solvers: SuiteSparse CHOLMOD, Intel MKL PARDISO, and NVIDIA cuDSS. The user can pick a backend at construction time; the rest of your code stays the same.

The CMake build automatically fetches and configures all three solver backends on both Windows and Linux—no manual dependency setup required.


1. Fast sparse matrix ordering

The standalone ordering API takes the sparsity pattern of a square SPD matrix and returns a fill-reducing permutation (and the elimination tree). It works even when no solver backend is built.

#include "homa/homa.h"

homa::Options opts;
opts.patch_size    = 512;   // Lloyd / METIS patch target
opts.compute_etree = true;  // required if you feed cuDSS

homa::OrderingResult ord = homa::compute_ordering(A, opts);
// ord.perm  — permutation of [0, n)
// ord.etree — elimination tree (only when opts.compute_etree)

The user then can hand the permutation to any third-party solver that supports a user ordering.


2. Sparse SPD linear solver

The LinSysSolver interface is a uniform front-end to all three backends, by switching backends through changing the LinSysSolverType argument. LinSysSolver is a class template parameterized on Scalar; both float and double are supported, with convenience aliases homa::LinSysSolverD and homa::LinSysSolverF.

#include "homa/solvers/LinSysSolver.h"

std::unique_ptr<homa::LinSysSolverD> solver(
    homa::LinSysSolverD::create(homa::LinSysSolverType::CPU_CHOLMOD));
//                                                          ::CPU_MKL
//                                                          ::GPU_CUDSS

homa::Options opts;
opts.patch_size = 512;

solver->setMatrix(A);        // Eigen::SparseMatrix<double>
solver->ordering(opts);      // Homa ordering — skip to use the solver default
solver->analyze_pattern();   // consumes solver-owned ordering state
solver->factorize();
solver->solve(rhs, result);

setMatrix(A) borrows (shallow copy) Eigen's compressed sparse arrays; A must be square, compressed, and outlive the analysis/factorization/solve using it.

Raw pointer and device-aware view APIs are also available:

solver->setMatrix(p, i, x, n, nnz);

homa::SparseMatrixView<double> Adev{n, n, nnz, d_rowptr, d_colind, d_values,
                                    homa::SparseFormat::CSR,
                                    homa::MemoryLocation::Device};
solver->setMatrix(Adev); // cuDSS only

MKL expects lower-triangular storage:

Eigen::SparseMatrix<double> A_lower = A.triangularView<Eigen::Lower>();
A_lower.makeCompressed();
solver->setMatrix(A_lower);

For building the examples, check examples README. To develop/create the python binding, check python README.


Using Homa in your CMake project (FetchContent)

include(FetchContent)
FetchContent_Declare(homa
    GIT_REPOSITORY https://github.com/BehroozZare/fast-permute.git
    GIT_TAG        main
)
FetchContent_MakeAvailable(homa)

target_link_libraries(my_target PRIVATE Homa::homa)
homa_configure_runtime(my_target)

Call homa_configure_runtime() for executables that link Homa so Windows DLLs and Linux build RPATHs are set for enabled solver backends.


Citation

If you use Homa's ordering in academic work, please cite:

@inproceedings{Zarebavani:2026:LRA,
  title     = {Fast Sparse Matrix Permutation for Mesh-Based Direct Solvers},
  author    = {Zarebavani, Behrooz and Mahmoud, Ahmed H. and Dodik, Ana and Yuan, Changcheng and Porumbescu, Serban D. and Owens, John D. and Mehri Dehnavi, Maryam and Solomon, Justin},
  year      = {2026},
  isbn      = {979-8-4007-2554-8/2026/07},
  publisher = {Association for Computing Machinery},
  address   = {New York, NY, USA},
  numpages  = {11},
  month     = jul,
  series    = {SIGGRAPH Conference Papers '26},
  booktitle = {Proceedings of the SIGGRAPH 2026 Conference Papers},
  doi       = {10.1145/3799902.3811189}
}

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

homapy-0.1.0rc0.tar.gz (1.5 MB view details)

Uploaded Source

Built Distributions

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

homapy-0.1.0rc0-cp312-cp312-win_amd64.whl (3.2 MB view details)

Uploaded CPython 3.12Windows x86-64

homapy-0.1.0rc0-cp312-cp312-manylinux_2_28_x86_64.whl (3.6 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

homapy-0.1.0rc0-cp311-cp311-win_amd64.whl (3.2 MB view details)

Uploaded CPython 3.11Windows x86-64

homapy-0.1.0rc0-cp311-cp311-manylinux_2_28_x86_64.whl (3.6 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

homapy-0.1.0rc0-cp310-cp310-win_amd64.whl (3.2 MB view details)

Uploaded CPython 3.10Windows x86-64

homapy-0.1.0rc0-cp310-cp310-manylinux_2_28_x86_64.whl (3.6 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

homapy-0.1.0rc0-cp39-cp39-win_amd64.whl (3.2 MB view details)

Uploaded CPython 3.9Windows x86-64

homapy-0.1.0rc0-cp39-cp39-manylinux_2_28_x86_64.whl (3.6 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.28+ x86-64

File details

Details for the file homapy-0.1.0rc0.tar.gz.

File metadata

  • Download URL: homapy-0.1.0rc0.tar.gz
  • Upload date:
  • Size: 1.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for homapy-0.1.0rc0.tar.gz
Algorithm Hash digest
SHA256 6eaabeed56c02e30a0185931c8d5ca5c5a5f9b8a11bacb8ba96de04f24a5eb59
MD5 126fc2b63408c764d90488e2bcd0f94e
BLAKE2b-256 f7083af803f1779974611ec11735e5995a47af9df06bb7af5252300ab0915e54

See more details on using hashes here.

Provenance

The following attestation bundles were made for homapy-0.1.0rc0.tar.gz:

Publisher: wheels.yml on BehroozZare/fast-permute

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

File details

Details for the file homapy-0.1.0rc0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: homapy-0.1.0rc0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 3.2 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for homapy-0.1.0rc0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 e9f01933ee5d1f3688488ce07bbbca39981b63739ffecff67a7fb232ea19615e
MD5 ef884948a8353f26e4c774c8e87729bd
BLAKE2b-256 9a706570d0acc16d6899fd3957a7e400bb83409829daca3586342a4c992d47d9

See more details on using hashes here.

Provenance

The following attestation bundles were made for homapy-0.1.0rc0-cp312-cp312-win_amd64.whl:

Publisher: wheels.yml on BehroozZare/fast-permute

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

File details

Details for the file homapy-0.1.0rc0-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for homapy-0.1.0rc0-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2fdc283258d25603b893b151bd72b4ce797c73da9ed7a517dc64c8ddf74520f9
MD5 2015d36317fa56afd38f96666fb6695d
BLAKE2b-256 c469b21397d3b8e661196ef4a16deed88a56e7c273df51a4807b8a5bbbc635fe

See more details on using hashes here.

Provenance

The following attestation bundles were made for homapy-0.1.0rc0-cp312-cp312-manylinux_2_28_x86_64.whl:

Publisher: wheels.yml on BehroozZare/fast-permute

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

File details

Details for the file homapy-0.1.0rc0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: homapy-0.1.0rc0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 3.2 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for homapy-0.1.0rc0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 8bc908c947721dc2d3750ef908e2182aa57e3084e07067a6a33d287db964ef96
MD5 d6400d6232db411f0291c1f293597d76
BLAKE2b-256 076afe86af9b192963b16f5fa54762a78063e451efaf476cc463f5543b307ff1

See more details on using hashes here.

Provenance

The following attestation bundles were made for homapy-0.1.0rc0-cp311-cp311-win_amd64.whl:

Publisher: wheels.yml on BehroozZare/fast-permute

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

File details

Details for the file homapy-0.1.0rc0-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for homapy-0.1.0rc0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d27910c4b6ce9df78f42114a3cf338a0f43fcd8e2ff37f81a6fce6d52c52dcd7
MD5 f4e24485b144c2555caff1fea326807a
BLAKE2b-256 90e260b90769eea1238fe9300aa8a8ede57b98c23eb4122d044e209e4aef7a5d

See more details on using hashes here.

Provenance

The following attestation bundles were made for homapy-0.1.0rc0-cp311-cp311-manylinux_2_28_x86_64.whl:

Publisher: wheels.yml on BehroozZare/fast-permute

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

File details

Details for the file homapy-0.1.0rc0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: homapy-0.1.0rc0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 3.2 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for homapy-0.1.0rc0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 abd83fe4d5258d8af806a444a1799e1b74b9a08e5faafaf3896462f6fa48c185
MD5 8659dfd8972fec822251714944923e70
BLAKE2b-256 c9ef03870cb6c8ea87fd05e412f39faa3380983f1292a8dc3b5966b8b53836fc

See more details on using hashes here.

Provenance

The following attestation bundles were made for homapy-0.1.0rc0-cp310-cp310-win_amd64.whl:

Publisher: wheels.yml on BehroozZare/fast-permute

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

File details

Details for the file homapy-0.1.0rc0-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for homapy-0.1.0rc0-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3fdaead4a8cf653753794bc5e090ad8fbd318680148abb6c2c41d78f4ca47a4f
MD5 393ae54ab8865315fed91cadb19ad2a3
BLAKE2b-256 9f0bb90ab9fd838822b38194ce42c907e0125d56dae84223fd49dc6f7cb80c79

See more details on using hashes here.

Provenance

The following attestation bundles were made for homapy-0.1.0rc0-cp310-cp310-manylinux_2_28_x86_64.whl:

Publisher: wheels.yml on BehroozZare/fast-permute

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

File details

Details for the file homapy-0.1.0rc0-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: homapy-0.1.0rc0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 3.2 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for homapy-0.1.0rc0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 7dd655eb7e1dcbba11480a90394044bf45fc6059d3fa8f8d1700f593b8a5b96a
MD5 e037aa9d95b051b2b93e877213bf035f
BLAKE2b-256 cbef59cb859e31b9f736610bf8fb4274d0931e4f6001966fc0caeac090a16ff3

See more details on using hashes here.

Provenance

The following attestation bundles were made for homapy-0.1.0rc0-cp39-cp39-win_amd64.whl:

Publisher: wheels.yml on BehroozZare/fast-permute

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

File details

Details for the file homapy-0.1.0rc0-cp39-cp39-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for homapy-0.1.0rc0-cp39-cp39-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 62e837da956565cd318ab0422fbfce64d114bfc97fbd97bd5cd4be102a07eaf0
MD5 da10adaf549db6154d49a2b4efa2bbf2
BLAKE2b-256 f55edca0273090c0924e547a75d7ac0dec8c43a047a492c2919bf01745894f2f

See more details on using hashes here.

Provenance

The following attestation bundles were made for homapy-0.1.0rc0-cp39-cp39-manylinux_2_28_x86_64.whl:

Publisher: wheels.yml on BehroozZare/fast-permute

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