Skip to content

[Plugin] SofaCHOLMOD: Add plugin with a supernodal Cholesky direct solver (EigenCholmodSupernodalLLT)#6176

Merged
hugtalbot merged 14 commits into
sofa-framework:masterfrom
fredroy:add_cholmod_solver
Jul 23, 2026
Merged

[Plugin] SofaCHOLMOD: Add plugin with a supernodal Cholesky direct solver (EigenCholmodSupernodalLLT)#6176
hugtalbot merged 14 commits into
sofa-framework:masterfrom
fredroy:add_cholmod_solver

Conversation

@fredroy

@fredroy fredroy commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

Add a new optional plugin SofaCHOLMOD providing a direct linear solver, EigenCholmodSupernodalLLT, based on the supernodal sparse Cholesky factorization of CHOLMOD (SuiteSparse), wrapped via Eigen's CholmodSupport.

The dependency on SuiteSparse/CHOLMOD is fully isolated in this plugin so it stays out of the core solvers.

On a ~15k-DOF FEM beam: ~8x speedup over SparseLDLSolver on macOS

Note1: BLAS (important for performance)
Since the factorization delegates to dense BLAS3, performance is dictated by the BLAS backing CHOLMOD, not by SOFA:

  • On macOS, SuiteSparse links Apple Accelerate → speedup is always present.
  • On Linux, the backend depends on the install BLAS. With the system default one, BLAS the gain mostly disappears; with OpenBLAS/MKL you get the full speedup. See the plugin README for how to check/fix this.
  • Multithreaded BLAS tends to oversubscribe on medium systems, so a small thread count is often fastest. A scene-settable numThreads Data is provided to control this at runtime.

Note2: CHOLMOD is double-precision only → enforced at configure time (SOFA_FLOATING_POINT_TYPE=double).

Note3: NOT TESTED ON WINDOWS (YET)
Windows: tested with suitesparse installed through conda (conda install -c conda-forge suitesparse) and using the include and libs there (with miniconda: CHOLDMOD_INCLUDE_DIR=<miniconda_install>/Library/include/suitesparse and CHOLMOD=<miniconda_install>/Library/lib/cholmod.lib)
On a old laptop (i7 11800H), the test in the PR shows:
100 iterations done in 66.1051 s ( 1.51274 FPS). for SparseLDL
100 iterations done in 15.2286 s ( 6.56658 FPS) for EigenCholmodSupernodalLLT

--
EDIT:add implementation of addJMInvJtLocal by Claude:

addJMInvJtLocal accelerates compliance matrix computation by exploiting CHOLMOD’s supernodal factorization,
reducing JA^{-1}J^T to a single forward triangular solve followed by a symmetric rank-k update (Z^T Z). It accesses
the raw CHOLMOD factor through a dedicated proxy and leverages optimized BLAS (dsyrk), providing significant
speedups for medium-to-large systems while small systems remain limited by setup overhead.

on a M3 max (macOS)
TorusFall.scn:
SparseLDL: 5000 iterations done in 14.3029 s ( 349.58 FPS)
EigenCholmodSupernodalLLT: 5000 iterations done in 12.8377 s ( 389.479 FPS)


By submitting this pull request, I acknowledge that
I have read, understand, and agree SOFA Developer Certificate of Origin (DCO).


Reviewers will merge this pull-request only if

  • it builds with SUCCESS for all platforms on the CI.
  • it does not generate new warnings.
  • it does not generate new unit test failures.
  • it does not generate new scene test failures.
  • it does not break API compatibility.
  • it is more than 1 week old (or has fast-merge label).

@fredroy fredroy added pr: status to review To notify reviewers to review this pull-request pr: highlighted in next release Highlight this contribution in the notes of the upcoming release pr: AI-aided Label notifying the reviewers that part or all of the PR has been generated with the help of an AI pr: enhancement About a possible enhancement pr: test PR adding test(s) in SOFA labels Jul 10, 2026
@fredroy
fredroy force-pushed the add_cholmod_solver branch from 7faa62a to 9690fc2 Compare July 19, 2026 23:29
@hugtalbot hugtalbot added pr: status ready Approved a pull-request, ready to be squashed and removed pr: status to review To notify reviewers to review this pull-request labels Jul 23, 2026

@hugtalbot hugtalbot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Further to SOFA dev

@hugtalbot
hugtalbot merged commit 7299611 into sofa-framework:master Jul 23, 2026
8 of 13 checks passed
@hugtalbot
hugtalbot deleted the add_cholmod_solver branch July 23, 2026 21:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pr: AI-aided Label notifying the reviewers that part or all of the PR has been generated with the help of an AI pr: enhancement About a possible enhancement pr: highlighted in next release Highlight this contribution in the notes of the upcoming release pr: status ready Approved a pull-request, ready to be squashed pr: test PR adding test(s) in SOFA

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants