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}
}
Requirements: Conan (2.19.1), Intel MKL.
If this is your first time using Conan, create a default profile for your system:
conan profile detect
Download 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=True
The 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=128
OMP_NUM_THREADS=1 ./build/benchmarks/Release/benchmark-ocp \
--benchmark_out=ocp.json --benchmark_repetitions=5 --benchmark_min_time=1000x
Comparisons 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.