Hyperbolic Householder transformations for Up- and Downdating Cholesky factorizations.
Given a Cholesky factor hyhound::update_cholesky
function computes the Cholesky factor
Computing
Requirements: Conan (2.12.2), 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:
conan install . --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
Configure and build the hyhound library and benchmarks:
. build/generators/conanbuild.sh
cmake --preset conan-default
cmake --build --preset conan-release -j
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-14 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 |
---|---|