Code generation¶
OSQP can generate tailored C code that compiles into a fast and reliable solver for the given family of QP problems in which the problem data, but not its dimensions, change between problem instances.
The generated code is:
- Malloc-free¶
It does not perform any dynamic memory allocation.
- Library-free¶
It is not linked to any external library.
- Division-free¶
There are no division required in the ADMM algorithm
We make a distinction between two cases depending on which of the data are to be treated as parameters.
- Vectors as parameters¶
Vectors \(q\), \(l\) and \(u\) can change between problem instances. This corresponds to the compiler flag
OSQP_EMBEDDED_MODE=1
. \(\rho\) adaptation is not enabled. The generated code is division-free and has a very small footprint.- Matrices as parameters¶
Both vectors \(q\), \(l\), \(u\) and values in matrices \(P\) and \(A\) can change between problem instances. This corresponds to the compiler flag
OSQP_EMBEDDED_MODE=2
. \(\rho\) adaptation is enabled but the frequency does not rely on any timing. We assume that the sparsity patterns of \(P\) and \(A\) are fixed.