Many scientific and engineering applications require the computation of a few eigenpairs of large, symmetric matrices. If the matrix cannot be inverted and the required eigenvalues are multiple or highly clustered, Lanczos based methods cannot be used, and block methods or the use of preconditioning through the Jacobi-Davidson method become necessary. Preconditioning improves convergence but it often misses multiplicities, while block methods are very robust but notoriously slow.
We have combined these two functionalities into a parallel implementation of a block Jacobi-Davidson (bJD) method. This is based on a data parallel distribution of the vectors. However, the code can be used as a driver to both fine-grain and coarse grain parallel matrix-vector multiplication and preconditioning operations. Specifically, on the increasingly popular environment of networks of workstations, each processor may target different eigenpairs, solving different equations independently. The block of solutions is then added to the bJD basis. Alternatively, the code can be tuned for a block size of 1, running on a large number of tightly coupled processors.
We outline the design of our implementation and present some timings and convergence results on a workstation cluster and on a SUN Enterprise.