Page 1 of 1

Possible bug dsyevd_gpu test wrong eigenvectors result

Posted: Mon May 13, 2013 12:09 pm
by luiceur
Hi,

I have made a small test including MKL and MAGMA eigenvectors/eigenvalues calculation. I thought it could be due to my data, but it also gives wrong results using the random double matrix generator. For small values (14 - 32) of N, it gives right results, however it doesn't give the right value for eigenvectors for large values of N (1024 onwards). It always gives right results for eigenvalues though. Is that a bug?

Re: Possible bug dsyevd_gpu test wrong eigenvectors result

Posted: Wed May 15, 2013 5:46 am
by luiceur
Hi Stan,

Did you have a chance to run my test? I've run the test on the Fermi C2050 cards. I have not tried on the K20s yet, but I guess it will hav ethe same effect.
Have you ever heard anything else from anybody about that?

Thanks for your help.
Luis

Re: Possible bug dsyevd_gpu test wrong eigenvectors result

Posted: Wed May 15, 2013 11:23 pm
by Stan Tomov
Hi Luis,
I just ran the test and reproduced your result on a K20c.
I added a check for the factorization though and for the orthogonality and everything looks fine:

Code: Select all

test> ./benchmark_cpu -N 2000
Reading input file 
Read succesful
Calculating eigenvalues with MKL
Quering space...
Solving eigenvalues...
Calculating eigenvalues with MAGMA
Quering for workspace
Warming up...
Quering optimal sizes...
Performing MAGMA operation...

Successful calculation of eigenvectors/eigenvalues
Testing the factorization A = U S U' for correctness:
(1)    | A - U S U' | / (|A| N) = 3.670771e-18
(2)    | I -   U'U  | /  N      = 6.732193e-17

Eigenvalues: SUCESS!!!!
Calculating max difference eigenvectors ...
ERROR: max diff = 1.088852
I added the check at the end of calcMAGMA.cc with the following code:

Code: Select all

  double result[3], eps = lapackf77_dlamch( "E" );

  lapackf77_dsyt21( &ione, uplo, &N, &izero,
                    A, &N,
                    w, h_work,
                    Ar, &N,
                    Ar, &N,
                    NULL, h_work, &result[0] );

  printf("Testing the factorization A = U S U' for correctness:\n");
  printf("(1)    | A - U S U' | / (|A| N) = %e\n", result[0]*eps);
  printf("(2)    | I -   U'U  | /  N      = %e\n", result[1]*eps);
Similar check for the LAPACK result gives that the factorization is correct and the eigenvectors are orthogonal:

Code: Select all

Testing the factorization A = U S U' for correctness:
(1)    | A - U S U' | / (|A| N) = 4.021844e-18
(2)    | I -   U'U  | /  N      = 1.075072e-16
I suppose this has to do with the directions of the vectors, or if there are repeated eigenvalues we may have chosen different than LAPACK corresponding eigenvectors. Is it important for you that the result matches the LAPACK results?
Stan

Re: Possible bug dsyevd_gpu test wrong eigenvectors result

Posted: Thu May 16, 2013 4:36 am
by luiceur
I understand...And yes, your are right. Mathematically the result is correct, but for some reason they are different to the ones calculated with LAPACK. It seems that is important that eigenvectors match the LAPACK eigenvectors within my application...

Re: Possible bug dsyevd_gpu test wrong eigenvectors result

Posted: Tue May 28, 2013 5:01 pm
by xinwu
Hi, Stan!

I was using the default "testing_dsyevd" and "testing_dsyevd_gpu" in the "testing" directory in MAGMA v1.3.0. If a very small matrix, e.g. 10x10 matrix, was specified, then it gave some error messages.

Could you please help me to fix this problme?

Thank you!

/* the output */

xwu@t2090th1:~/magma/magma-1.3.0/testing> ./testing_dsyevd_gpu -N 10
MAGMA 1.3.0
device 0: Tesla M2090, 1301.0 MHz clock, 5375.4 MB memory, capability 2.0
device 1: Tesla M2090, 1301.0 MHz clock, 5375.4 MB memory, capability 2.0
testing_dsyevd -N 10 [-JV] [-JN]

N CPU Time(s) GPU Time(s)
===================================

MKL ERROR: Parameter 11 was incorrect on entry to magma_dsytrd_gpu.

MKL ERROR: Parameter 11 was incorrect on entry to magma_dsytrd_gpu.
10 0.00 0.00
xwu@t2090th1:~/magma/magma-1.3.0/testing> ./testing_dsyevd -N 10
MAGMA 1.3.0
device 0: Tesla M2090, 1301.0 MHz clock, 5375.4 MB memory, capability 2.0
device 1: Tesla M2090, 1301.0 MHz clock, 5375.4 MB memory, capability 2.0
testing_dsyevd -N 10 [-JV] [-JN]

N CPU Time(s) GPU Time(s)
===================================

MKL ERROR: Parameter 9 was incorrect on entry to magma_dsytrd.

MKL ERROR: Parameter 9 was incorrect on entry to magma_dsytrd.
10 0.00 0.00