research
research
sparse matrix algorithms and software
The large matrices that arise in real-world problems in science, engineering, and mathematics tend to be mostly zero, or sparse. Sparse matrix algorithms lie in the intersection of graph theory and numerical linear algebra. A graph represents the connections between variables in the mathematical model, such as the voltage across a circuit component, a link from one web page to another, the physical forces between two points in a mechanical structure, and so on, depending on the problem at hand. The numerical linear algebra arises because these matrices represent systems of equations whose solution tells us something about how the real-world problem behaves. Google’s page rank algorithm, for example, requires the computation of an eigenvector for a matrix with as many rows and columns as there are pages on the web.
My research spans the spectrum of theory, algorithms, and software development in the area of sparse matrix and graph algorithms. I’m not just interested in creating new methods and software prototypes to demonstrate those methods. I pursue the code further to produce better-than-commercial-quality software that embodies these new methods. Nine of my codes appear as Collected Algorithms of the ACM, where they undergo rigorous peer-review testing for their research contributions and software quality.
I just love to delve into the theory and algorithms of graph theoretic and applied mathematical algorithms, but I don’t stop there. I just love to code. I collaborate with others with the same passion -- and I hope to instill the same drive in my students (graduate and undergraduate).
NASA once performed a software engineering exercise in which they used the most extreme techniques to produce the highest quality code they could create. With a fault rate of 0.1 KLOC, they concluded that such reliability is achievable but not practical. The MathWorks utilizes about 120K lines of my codes in MATLAB: x=A\b when A is sparse, sparse factorization methods (LU, QR, and Cholesky), sparse matrix multiplication, Dulmage-Mendelsohn decomposition, and fill-reducing orderings. If printed out, 120K lines of code would equal about 2 reams of paper, front and back. With only 3 bugs reported in my codes used in MATLAB in 15 years, this reliability metric out-performs NASA’s best-achievable result by a factor of 3.
My codes are also fast (in both senses of the word: asymptotically and in practice). For example, the time to factorize a benchmark matrix from the European Space Operations Center (for tracking orbital debris) dropped from 11 days to 7 minutes when my QR factorization method was added to MATLAB.
FUTURE VISION
The coming decades of high-performance computational mathematics will be increasingly dominated by heterogeneous computing based on hybrid multiprocessors with of a mix of conventional CPU cores and high-throughput GPU cores. This trend is driven by power constraints and the need for ever-increasing performance. Although these new heterogeneous systems can deliver high performance with low energy requirements, new algorithms must be developed to exploit them. The most challenging problems for these systems require a mix of regular and irregular computation. My research into direct methods for sparse linear systems lies within this problem domain and is also a critical component for many applications in computational mathematics.
My experience makes me well-poised for future research in GPU-based algorithms. As a world leader in algorithmic research for sparse matrix computations, my work combines graph-theoretic methods and numerical techniques to create algorithms for solving problems in computational science that arise across a wide range of applications. I incorporate my novel theory and algorithms into robust library-quality open-source software, which is widely used in industry, academia, and government labs. In the past decade, I have published more software in the ACM Transactions on Mathematical Software than any other author.
A primary thrust for my current and future work focuses on creating parallel algorithms for sparse multifrontal LU, QR, and Cholesky factorization for hybrid multicore CPU/GPU multiprocessors. The workflow in these algorithms is an irregular tree, where the nodes are the bulk of the work (regular operations on dense frontal matrices of varying sizes), and the edges are the irregular assembly of data from child to parent. The GPUs operate on many frontal matrices at a time, and data is assembled from child to parent frontal matrix without moving it to the CPU. No other sparse direct method employs these strategies for GPU computing. By creating widely-used high-performance algorithms and software that encapsulate these ideas, this research will extend the capability of heterogeneous computing to a wide domain of applications in computational science and mathematics.
Below is a talk that summarizes much of my research. Click here for the slides.
Google relies my code in Ceres, their nonlinear solver. They use this to place every photo in its correct position for Google Street View, to create Google Photo Tours, and for 3D imagery in Google Earth. Below are some samples of Ceres (and thus SuiteSparse) at work. Without SuiteSparse, Ceres wouldn’t be able to do its job, and Google Street View would be a lesser experience as a result.
CURRENT SPONSORS
SuiteSparse ON linux or Mac
APPLICATIONS
My software is so widely used that I can’t keep track of its usage. You can get a glimpse of this yourself via simple Google searches for some of the unique names of my solvers, for example: COLAMD, SuiteSparse, UMFPACK, and CHOLMOD.
Some of the specific uses of my solvers in industry, government labs, and academia are listed below. This is a partial list since I don’t require registration of any kind for you to use my codes. If you are using my codes and would like a link to appear below, just drop me a line.
companies / commercial software
The MathWorks (MATLAB): general toolbox for scientific computation
Wolfram Research (Mathematica; also here or here):
general toolbox for scientific computation
Google Ceres (used by Street View): nonlinear least squares solver
Facebook: Oculus
Cadence Design Systems (OrCAD and Allegro): circuit simulation
IBM: circuit simulation
ANSYS: finite-element method
Apple
Berkeley Design Automation (their "fast sparse-matrix solver" is KLU):
circuit simulation
Geomodeling Solutions: geological modeling
MSC Software (NASTRAN): finite-element method
Orcina: structural modeling
ATopTech: circuit simulation
Tandent Vision: computer vision
Vision Map: computer vision
EnerNex: energy simulation
FEAT: finite-element method
Freescale: semiconductor simulation
Geograf: geophysical modeling
HRL Laboratories: circuit simulation
Intex: financial simulation
Lumerical: circuit simulation
Mentor Graphics: circuit simulation
SIMetrix: circuit simulation
COMSOL (FEMLAB): finite-element method
NVIDIA (CULA sparse): sparse matrix library for GPUs
WRSpice: circuit simulation
AgiSoft: PhotoScan - photogrammetric processing of images into 3D spatial data
Embotech: ECOS embedded conic solver
Government labs
HSL Mathematical Subroutine Library: general library for computational science
Xyce by Sandia National Labs: circuit simulation
Knolls Atomic Power Lab: nuclear reactor design
PETsc by Argonne National Lab: general toolbox for computational science
Amesos and Trilinos by Sandia National Labs:
general toolbox for computational science
FiPy by NIST: finite-element method
ISIS by USGS: astrogeology image processing (Moon, Mars, Mercury, ...)
ARKcode: ODE solver, part of SUNDIALS, by Lawrence Livermore National Lab
academia / open source
Google Ceres (used by Street View): nonlinear least squares solver
GEGL (used in Gimp): graphics/image processing
Julia: programming language with built-in support for sparse matrices
SuperLU: sparse matrix library
MUMPS: sparse matrix library
Fedora Linux: general math library distribution for Linux
Debian Linux: ditto
Arch Linux: ditto
Ubuntu Linux: ditto
OpenSUSE Linux: ditto
Scientific Linux: ditto
GNU Darwin: general math library distribution for MacOS X
DarwinPorts: ditto
Homebrew: ditto
Fink: ditto
Octave: general toolbox for computational science
R: statistical package
ROS: robot operating system
deal.II: finite-element method / differential equations library
scilab: general toolbox for computational science
CVX: convex optimization
CVXPY: Python package for convex optimization
SDPT3: semidefinite quadratic linear programming
CVXOPT: convex optimization
MBDyn: multi-body dynamics
Boost: C++ libraries
OpenSees: earthquake simulation
umfpackpy: Python bindings for UMFPACK
CGAL: computational geometry algorithms library
Kraken: Cray XT5 installation
FEniCS Project: differential equations
Eigen: general toolbox for computational science
Sage: Python-based mathematics software system
SciPy: Python-based software for mathematics, science, and engineering
NumPy: fundamental matrix computations for Python (see also SciPy).
SciPy.sparse: sparse matrix library for Python
Pysparse: sparse matrix library for Python
NLPy: nonlinear programming in Python
SfePy: finite-element method in Python
FreeFem++: finite-element method
Elmer: finite-element method
FLOODS/FLOOPS: semiconductor device/process modeling
MILAMIN: finite-element method
Minimum Sobolev Norm-based Methods for Elliptic PDEs, to appear.
ILUPACK: ILU preconditioning package.
JADAMILU: sparse eigenvector package.
Cubica: non-linear finite-element package.
LAMG: algebraic multigrid solver
LiveV: finite-element method
M.E.S.S: sparse solvers, model order reduction, optimal control.
AMDisS: finite-element toolbox
PDCO: primal-dual interior method for convex optimization
MLD2P4: parallel algebraic multi-level preconditioners
FEATFLOW: finite-element method
FEAST: finite-element method
OpenSLAM: robotics projects; 10 of 24 use sparse solvers (all in SuiteSparse):
g2o: optimization of graph-based nonlinear error functions. Their use of
CHOLMOD is notable because they rely on our optimal sparse Cholesky
update/downdate methods. Other packages: 2D-I-SLSJF, HOG-Man,
RobotVision, SLAM6D, SSA2D, MTK, SLOM, iSAM, TJTF
LSD-SLAM: large-scale direct monocular SLAM
SSBA: sparse bundle adjustment
libdogleg: large-scale nonlinear least-squares optimization
CUSPICE, a CUDA-accelerated NGSPICE: circuit simulation
A splitting method for optimal control
hpFEM/Hermes: finite-element toolbox
PATH solver: optimization package for mixed complementarity problems
MESA: stellar evolution
DSM2: California Bay Delta Simulation Model II
Caphe: optical circuit simulation
GLPK: GNU Linear Programming Kit
libdogleg: general purpose sparse optimizer to solve data fitting problems
iSAM: incremental Smoothing and Mapping for the SLAM (robotics) problem
also iSAM2.
GTSAM: the SLAM problem for autonomous flying vehicles
DOLFIN: automated finite element computing
OPM: Open Porous Media Project
MFEM: finite element solver
the SUITEsparse matrix collection
I also collect matrices from real applications (like those above) and make them available as benchmarks to researchers in sparse matrix algorithms and graph / network algorithms. They are incredibly useful because randomly generated matrices tend not to capture the structure of matrices that arise in practice. If you develop a method and test it with random problems, it will likely behave very differently when used in practice, on real problems.
The collection is now located at https://sparse.tamu.edu.
To maintain this collection, I collaborate with Yifan Hu at Yahoo! labs, who develops visualization techniques. These matrices are not only scientifically useful, they are beautiful as well. Below is a small sample (click here for the full collection).
COLLABORATORS
Iain Duff
John Gilbert
Esmond Ng
Patrick Amestoy
Bill Hager
Ekanathan Natarajan Palamadai
Stefan Larimore
Siva Rajamanickam
Yanqing Chen
Les Foster
Sanjay Ranka
Nuri Yeralan
Sharanyan Chetlur
Anil Rao
Begum Senses
Yifan Hu
Steve Rennich
Wissam Sid-Lakhdar
major users
SIAM plenary talk at the 2006 SIAM Annual Meeting. This talk gives an accessible introduction to my research, and serves as an overview of my graduate-level course on sparse matrix algorithms. Click here for the slides.