![]() |
Tim Davis, Prof. Room E338 CSE Building P.O. Box 116120 University of Florida Gainesville, FL 32611-6120 352/392-1481 email: my last name AT cise.ufl.edu |
The performance of CHOLMOD was compared with 10 other codes in a paper by Nick Gould, Yifan Hu, and Jennifer Scott. see also their raw data. Comparing BCSLIB-EXT, CHOLMOD, MA57, MUMPS, Oblio, PARDISO, SPOOLES, SPRSBLKLLT, TAUCS, UMFPACK, and WSMP, on 87 large symmetric positive definite matrices, they found CHOLMOD to be fastest for 42 of the 87 matrices. Its run time is either fastest or within 10% of the fastest for 73 out of 87 matrices. Considering just the larger matrices, it is either the fastest or within 10% of the fastest for 40 out of 42 matrices. It uses the least amount of memory (or within 10% of the least) for 35 of the 42 larger matrices. Jennifer Scott and Yifan Hu also discuss the design considerations for a sparse direct code.
Click here for a comparison of CHOLMOD with the preconditioned conjugate gradients method.
CHOLMOD appears in MATLAB as chol, etree, symbfact, and backslash when A is sparse and symmetric positive definite. It was highlighted in the June 2007 Cleve's Corner article by Cleve Moler, who found that CHOLMOD is slower when multithreading is enabled. The problem is not CHOLMOD. The current Intel, AMD, Sun, and even Goto BLAS are all horribly slow when multithreading is enabled, for the kinds of calls that CHOLMOD makes to the BLAS. Click here for more details on the BLAS. CHOLMOD uses mostly transposed BLAS calls (C=A*B' in dgemm, C=A*A' in dsyrk, and X=B/L' in dtrsm). For dtrsm, the side='R' option is the culprit (for Intel and Sun, but not AMD). For dgemm, the problem is made worse because the matrices tend to be tall and thin. These kernels are not intrinsically slow, but all BLAS authors have ignored their performance when creating multithreaded versions. With multithreading enabled, the performance of CHOLMOD, and the MATLAB sparse bench, will be slow until the BLAS authors fix the performance bug. In the meantime, if you do a lot of sparse matrix work in MATLAB, be sure to disable multithreading.