I am trying to diagonalize a square matrix of size N=73789, with a MKL LAPACKE_dsyevr, and
need to find all the eigenvalues and eigenvectors. The machine I am running on uses
Intel(R) C++ Intel(R) 64 Compiler for applications running on Intel(R) 64, Version 18.104.22.168 Build 20180210
and has 3TB of RAM. The matrix itself occupies ~44 G. The code calls the
info = LAPACKE_dsyevr( LAPACK_COL_MAJOR, 'V', 'A', 'U', N, A, LDA,
vl, vu, il, iu, abstol, &m, W, Z, LDZ, ISUPPZ );
successfully, and spends about ~6000 minutes in the routine (it multithreads with the available processors),
and the memory requirement is steady.
However, when it seems it is nearly finished, there is a segmentation fault (core dumped).
Can anyone tell me why this is happening? Or if this is too big a matrix to be used with dsyevr?
It looks like a issue with syevr. But actually if this is the real issue, then this an unknow issue for MKL 2018 u3. Could you try another routine like syev or syevd? btw, do you use ILP64 API?
Thanks for your reply. I don't use ILP64 API.
I could try using syev or syevd but I am afraid that the memory might explode, since it is well-known
that the divide-and-conquer requires much more memory than the relatively-robust-representations.
But I will try this, and if the issue persists, come back.
I am attaching my code here for the LAPACKE_dsyevr. This fails for NxN matrices with N=80,000, (but works fine for N=40,000).
It complains of segmentation fault, even though enough memory is available to the routine (I am using a 3TB RAM).
Could you please spot any bad memory allocation in the code?
I am using Intel MKL 2018.
Thanks in advance,
I can confirm that the issue goes away when compiling and running with -ILP64. I can reach matrices upto ~ NxN with
N = 8*10^4.
Thanks for the suggestion,