Hi Jack, This is a very nice piece of work, congrats! I did one benchmark if catamari+MKL on the "ldoor" matrix [1] and got same speed as suitesparse/Cholmod: about 8s on my Haswell quad-core (15s without openmp).
Requiring c++14 for new features is not a big deal anymore. How do you envision this "Eigen/Catamari" module? A simple wrapper as we do with Cholmod/UmfPack/Pastix/Pardiso? or a built-in Eigen-ified version? As you probably already figured out Eigen already provides several features redundant with what you developed in Catamari: - BLAS/LAPACK layer with optional compile-time fallback to any BLAS / LAPACKE / MKL - Sparse storage - Fill-in reorderings, we have AMD and COLAMD, so yours might rather be complementary. Gaƫl [1] https://sparse.tamu.edu/GHS_psdef/ldoor On Fri, Mar 8, 2019 at 4:59 PM Jack Poulson <[email protected]> wrote: > Dear Eigen Maintainers, > > I noticed that Eigen's current documentation only lists a simplicial LDLT > sparse-direct solver; I spent my last several months building a header-only > C++ (optionally multithreaded) supernodal Cholesky/LDL^T/LDL^H > sparse-direct solver (which also implements high-performance Determinantal > Point Process sampling with similar techniques) and am curious if it would > be seen as a good fit for an unsupported Eigen module. The solver achieves > as much as 1 TF in double-precision on my 16-core skylake workstation. > > The current project is described here: > https://hodgestar.com/catamari/ > I released v0.1 a few days ago, but I have improved the performance in > 'master' substantially since then. > > My assumption is that the biggest hurdle will be due to the solver > (catamari) being implemented in C++14, and that Eigen is currently > restricted to C++03. And, while catamari optionally incorporates OpenMP > task scheduling for the multithreaded parallelism, this support is only > enabled if an appropriate preprocessor directive is defined > (CATAMARI_OPENMP). > > Any advice would be appreciated. > > Sincerely, > Jack Poulson >
