Hyperbolic Householder transformations for Up- and Downdating Cholesky factorizations.
Given a Cholesky factor hyhound::update_cholesky
function computes the Cholesky factor
Computing
Additionally, hyhound includes efficient routines for updating factorizations of the Riccati recursion for optimal control problems.
The paper describing the algorithms in this repository can be found on arXiv: https://arxiv.org/abs/2503.15372v1
@misc{pas_blocked_2025,
title = {Blocked {Cholesky} factorization updates of the {Riccati} recursion using hyperbolic {Householder} transformations},
url = {http://arxiv.org/abs/2503.15372},
doi = {10.48550/arXiv.2503.15372},
publisher = {arXiv},
author = {Pas, Pieter and Patrinos, Panagiotis},
month = mar,
year = {2025},
note = {Accepted for publication in the Proceedings of CDC 2025}
}The Python interface is available on PyPI: https://pypi.org/project/hyhound
pip install hyhoundCurrently, only Linux is supported (awaiting improved std::simd support in
MSVC and Clang).
Documentation is available at https://kul-optec.github.io/hyhound.
See python/test/test_update_cholesky.py and test_package/src/example.cpp for usage examples.
Requirements: Conan (2.19.1), Intel MKL.
If this is your first time using Conan, create a default profile for your system:
conan profile detectDownload the source code and recipes for building the dependencies:
git clone https://github.com/kul-optec/hyhound
cd hyhound
git clone https://github.com/tttapa/conan-recipes
conan remote add tttapa-conan-recipes "$PWD/conan-recipes"Install the dependencies using Conan and build the project:
conan build . --build=missing -pr profiles/desktop \
-s build_type=Release \
-c tools.build:skip_test=True \
-o guanaqo/\*:with_openmp=True \
-o guanaqo/\*:with_mkl=True \
-o \&:with_ocp=True \
-o \&:with_benchmarks=TrueThe desktop profile enables AVX-512. If this is not supported by your hardware,
you can use the laptop profile, which uses AVX2 only (for Intel Skylake and
newer).
OpenBLAS can be used instead of the Intel MKL by passing the option
-o guanaqo/\*:with_mkl=False to Conan. Be sure to use CMake's
--fresh flag to reconfigure the project after making this change.
Only libstdc++ is currently supported (GCC 12-15 or Clang 18-20).
OMP_NUM_THREADS=1 ./build/benchmarks/Release/benchmark-hyh \
--benchmark_out=hyh.json --benchmark_repetitions=5 --benchmark_min_time=0.02s \
--benchmark_enable_random_interleaving --fix-n --n=64 --m=128OMP_NUM_THREADS=1 ./build/benchmarks/Release/benchmark-ocp \
--benchmark_out=ocp.json --benchmark_repetitions=5 --benchmark_min_time=1000xComparisons of the run time and performance between explicit evaluation and
factorization of the matrix hyhound::update_cholesky (HyH update),
for different matrix sizes
Experiments carried out on Intel Core i7-11700 at 2.5 GHz (without dynamic frequency scaling), using version 2025.0 of the Intel MKL for the full factorization (serial).
| Double precision |
|---|
| Single precision |
|---|
| Double precision | Single precision |
|---|---|
| Double precision |
|---|
| Single precision |
|---|
| Double precision | Single precision |
|---|---|
| Double precision |
|---|
| Single precision |
|---|
| Double precision | Single precision |
|---|---|
Factorization and factorization updates of problems with optimal control structure, as described in sections IV and V of the paper.