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.