I am currently writing software in c++ which solves the eigenvalue problem of sparse hermitian matrices. The size of the matrix depends on the user input, but as an estimation it will roughly be 1000x1000. I will have to solve about 300 (again relies on the user input) of them for different initial conditions. What is the fastest way to do it? More specifically, I would like to know if it makes sense to do the calculations on the GPU or would it be faster to do it on the CPU and use openMP for the 300 initial conditions? What c++ library would you suggest to use and why (maybe one has some easy build-in support for GPU)? Currently I am using eigen3 for dense matrices.
What is the fastest way to do it?
This very much depends on the form of the matrix. You can exploit symmetries to reduce your problem: Is the matrix symmetric or Hermitian? Is it banded or tridiagonal? Maybe it is even block-diagonal, then you can diagonalize the blocks independent of one another.
Also if you only need a few eigenvalues, then you probably want to use an iterative solver instead of doing a full diagonalization.
You probably want to take a look at this online resource:
It is a huge table listing a lot of linear algebra codes, their level of parallelism, supported matrix and datatypes and much more.