HODLRlib : A Library for Hierarchical Matrices

Significant speedups are obtained with HODLRlib when dealing with matrices that have underlying data sparsity (rank-structured). Most rank-structured matrices fall in the class of Hierarchical matrices: some examples are H (Hackbusch, 1999; Hackbusch & Khoromsky, 2000), H (Hackbusch & Borm, 2002), HSS (Chandrasekaran, Gu, & Pals, 2006) and HODLR. These formats differ from each other in their matrix partitioning, lowrank sub-blocks and nested basis behaviour. A thorough comparison of these different formats has been provided in Ambikasaran (2013).

HODLRlib strives to provide functionality for HODLR matrices similar to that which libraries such as STRUMPACK (Ghysels, Li, Rouet, Williams, & Napov, 2016) and H2lib (Hackbusch & Borm, 2002) provide for the HSS and H 2 matrix formats respectively.Some unique features of our library are Cholesky-like symmetric factorization and determinant computation.While it is difficult to determine which matrix format works best, studies (F.H. Rouet, 2015) in the past have revealed that it isn't a case of "one size fits all".Rather, it reveals that the optimum hierarchical matrix format is dependent on the problem and the size considered.
HODLRlib is an optimized implementation of the ideas illustrated in Ambikasaran & Darve (2013), Ambikasaran et al. (2016) and Ambikasaran, O'Neil, & Singh (2014).The goal of HODLRlib is to serve as a high-performance, easy to use reference implementation for working with any HODLR matrix.We believe that apart from the features provided by the library, the simplicity and the extendability of the implementation distinguishes ours from other libraries.Our interfaces are kept simple with a minimum number of dependencies, with well-documented code to ensure that a potential user/developer can hit the ground running as soon as possible.
Our code makes use of shared-memory parallelism through OpenMP.The solver is fairly generic and can handle matrices not necessarily arising out of kernel functions.Further, the solver has been optimized and the running time of the solver is now massively (a few orders of magnitude) faster than the running times reported in the original articles.
HODLRlib is designed such that the matrix corresponding to the linear system to be solved is abstracted through the HODLR_Matrix object, which needs to have the function getMatrixEntry.This function takes in the arguments as the index in the matrix and returns the particular entry, which facilitates the reduction in storage costs, since only a few entries of the low-rank sub-blocks are needed to reconstruct these sub-blocks.This instance of HODLR_Matrix is then passed to the HODLR_Tree class, whose methods are used for the various matrix operations.
The current release has the following capabilities: HODLRlib is released under the MPL2 license.

•
MatVecs: Obtains Ax at a cost of O (N log N ) • Factorization: Factors the matrix A into the desired form at a cost of O ( N log 2 (N ) ) • Cholesky-like Symmetric Factorization: Obtains A = W W T at a cost of O ( N log 2 (N ) ) • Solve: Solves linear systems Ax = b at an additional cost of O (N log (N )) • Determinant Computation: Additional Cost of O (N log N )