magma_dsyevd wrong optimal IWORK array size for jobz='N'?

Open discussion for MAGMA

magma_dsyevd wrong optimal IWORK array size for jobz='N'?

Postby jgpallero » Mon Jul 23, 2012 6:52 am

Hello:

Using the function magma_dsyevd with jobz='N' I obtain the error:

** On entry to magma_dsytrd parameter number 9 had an illegal value

The optimal lwork and liwork computed parameters are 2032 and 1, so I think that liwork is erroneous. I think yhis is a bug

Attached I send a test program and a matrix

Cheers
Attachments
matrix.tar.gz
File containing the work matrix
(3.1 MiB) Downloaded 74 times
test_dsyevd.c
gcc test_dsyevd.c -o test_dsyevd -lmagma -lmagmablas -lopenblas -lcuda -lcublas -llapack
(1.32 KiB) Downloaded 78 times
jgpallero
 
Posts: 29
Joined: Tue Nov 15, 2011 12:38 pm

Re: magma_dsyevd wrong optimal IWORK array size for jobz='N'

Postby mgates3 » Tue Jul 24, 2012 2:46 pm

The lwork size is incorrect. When queried, it appears to be returning a value of 2*N + nb, but I think the value needs to be 2*N + N*nb. The blocking size nb can be found with magma_get_dsytrd_nb( N ).

I will see about updating the documentation and code to have the correct workspace sizes.

dsytrd does not use iwork, so the liwork is not a factor there. From the documentation for syevd, liwork is suppose to be 1 for jobz=N. (Most probably, iwork is unused in that case, but I didn't verify that.)

Code: Select all
    LIWORK  (input) INTEGER   
            The dimension of the array IWORK.   
            If N <= 1,                LIWORK must be at least 1.   
            If JOBZ  = 'N' and N > 1, LIWORK must be at least 1.   
            If JOBZ  = 'V' and N > 1, LIWORK must be at least 3 + 5*N.   


-mark
mgates3
 
Posts: 409
Joined: Fri Jan 06, 2012 2:13 pm


Return to User discussion

Who is online

Users browsing this forum: Google [Bot], Yahoo [Bot] and 3 guests

cron