I have the following problem:
Find the m eigenvalues of smallest algebraic value of the generalized
eigenproblem Ax=λBx, where A and B are sparse symmetric real matrices, nxn,
in double precision, where m<<n. How can I implement this usbg ViennaCL?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
there are no out-of-the-box routines in ViennaCL which solve exactly this kind of problem. Generally, the computation of small eigenvalues for sparse matrices is computationally expensive and fairly hard to parallelize. You might want to have a look at specialized packages like ARPACK: http://www.caam.rice.edu/software/ARPACK/UG/node74.html or SLEPc: http://slepc.upv.es/handson/handson3.html
Best regards,
Karli
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
None of these support OpenCL for your purposes. Frankly, I doubt that you will get any good performance with OpenCL for any eigenvalue computations on sparse matrices, because the performance of the respective algorithms tend to be very sensitive with respect to latency. And latency is something OpenCL is not at all good at.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
So a combination of ARPACK for the eigen algorithm and ViennaCL for the matrix-vector calculations would be less efficient than just ARPACK on CPU? Even if the sparse matrices are quite large (10 - 100 million non-zeros)?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
It will depend on your hardware: With a low-end CPU and a high-end consumer GPU you will most likely see some benefit (maybe 3x vs. a well-optimized CPU code). On a dual-socket Xeon system it is more than unlikely that you will see any significant benefits of using a GPU for your use case.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I have the following problem:
Find the m eigenvalues of smallest algebraic value of the generalized
eigenproblem Ax=λBx, where A and B are sparse symmetric real matrices, nxn,
in double precision, where m<<n. How can I implement this usbg ViennaCL?
Hi,
there are no out-of-the-box routines in ViennaCL which solve exactly this kind of problem. Generally, the computation of small eigenvalues for sparse matrices is computationally expensive and fairly hard to parallelize. You might want to have a look at specialized packages like ARPACK: http://www.caam.rice.edu/software/ARPACK/UG/node74.html or SLEPc:
http://slepc.upv.es/handson/handson3.html
Best regards,
Karli
Thank you very much for the respond Karl!
Do these implementations support OpenCL?
Kyriakos
None of these support OpenCL for your purposes. Frankly, I doubt that you will get any good performance with OpenCL for any eigenvalue computations on sparse matrices, because the performance of the respective algorithms tend to be very sensitive with respect to latency. And latency is something OpenCL is not at all good at.
So a combination of ARPACK for the eigen algorithm and ViennaCL for the matrix-vector calculations would be less efficient than just ARPACK on CPU? Even if the sparse matrices are quite large (10 - 100 million non-zeros)?
It will depend on your hardware: With a low-end CPU and a high-end consumer GPU you will most likely see some benefit (maybe 3x vs. a well-optimized CPU code). On a dual-socket Xeon system it is more than unlikely that you will see any significant benefits of using a GPU for your use case.