A small nonlinear equation system (sizes around 12 ✕ 12) needs to be solved repeatedly (millions of times); each time with some variation in parameters/coefficients (although the equation set is always the same).

Most solvers are not very optimized for small systems like this, only achieving higher "GFlops" when using larger matrices (e.g., 512 ✕ 512).

Currently it is being used an implementation based on MINPACK (Powell's hybrid method with Broyden's Jacobian update), without using BLAS (because even BLAS implementations seem slower for small matrices).

Is there a solver implementation (such as the ones found in Intel MKL, PETSc or Ceres) that is optimized for this kind of problem?

  • $\begingroup$ Speculation: Eigen has a port of MINPACK which may help. Eigen can be templated with fixed-sized matrices and might (maybe) work better for your problem. $\endgroup$
    – Damien
    May 25 '14 at 7:55
  • $\begingroup$ Thanks for the suggestion, we already have tested Eigen (unsupported/Eigen/NonLinearOptimization), and it turns out that, surprisingly, CMINPACK is still the faster implementation (but the performance results are very similar). $\endgroup$
    – e.tadeu
    May 26 '14 at 14:02
  • $\begingroup$ Can you please include the equations defining your system along with representative numerical values for parameters? There may be a quick way, but it depends on the math. $\endgroup$
    – Richard
    Dec 28 '21 at 4:01

Probably not, but you should parallelize over the parameters to the greatest extent possible. Use all the cores on your node and as many nodes as you can get your hands on.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.