|
cyqlone
develop
Fast, parallel and vectorized solver for linear systems with optimal control structure.
|
Fast, parallel and vectorized solver for linear systems with optimal control structure.
Also includes an implementation of the CyQPALM solver that uses the Cyqlone linear solver as a backend, with parallel factorization update routines to handle active set changes and a parallel exact line search.
The paper describing the algorithms in this repository can be found on arXiv: arxiv.org/abs/2512.09058
A script to reproduce the benchmark results from the paper can be found in benchmarks/cyqpalm. See benchmarks/cyqpalm/README.md for instructions.
Requirements: Linux, CMake, Conan 2.
To build using Clang instead of GCC, add -pr:h scripts/ci/conan-profiles/profiles/toolchain/clang-linux.profile to the command above (in addition to the dev profile). To use the Intel compiler, add -pr:h scripts/ci/conan-profiles/profiles/toolchain/icx-linux.profile instead.
If you have sufficient RAM available, the number of parallel build jobs can be increased.
To re-build after code changes, simply run cmake --build --preset conan-release (or rebuild the conan-release preset from your IDE).
Manual installation using CMake (without the Conan package manager) is also supported, provided that the necessary dependencies are installed.
To install the Python bindings for local development, use the install-linux-dev.sh script (without arguments).
Requirements: Python 3.8+, uv, Conan 2 (as configured above).
By default, this script builds the package for both AVX2 and AVX-512 targets, which may be wasteful if you only need AVX2. You can remove avx512 from the archs array in the script to only build for AVX2.
To run the tests, use pytest.
To re-build the AVX2 version after code changes, run cmake --build --preset conan-cp312-abi3-linux_x86_64-1-release (replace cp312-abi3 with your Python version and ABI, and replace -1- with -2- to re-build the AVX-512 version). You will need to restart the Python interpreter to load the new version of the package.
To build the Python package for distribution, use the scripts in scripts/ci.
If you are cross-compiling, you will need to generate the stubs using a native build first, since this requires running the built extension module.
Either way, generated Wheel files will be placed in the dist directory.