Barry, Not it works. Thanks everybody!
On 07.05.2012 22:36, Barry Smith wrote: > Alexander > > Satish and I have determined the problem (took some valgrind and debugger > work). We were not allocating enough "workspace" for one of the work arrays > passed to zgesvd(). We have fixed it in petsc-dev. You should be able to do a > hg pull -u then recompile the libraries with make cmake then relink and run > your example. > > Thank you for your patience. > > Barry > > On May 7, 2012, at 9:10 AM, Alexander Grayver wrote: > >> On 07.05.2012 15:04, Barry Smith wrote: >>> I am also running complex. >>> >>> Look in the file dlasq2.f (it will be in the externalpackages >>> subdirectory of the PETSc directory. Look at line 215, this is where >>> valgrind has a problem. In my copy >>> >>> END IF >>> * >>> * Check for negative data and compute sums of q's and e's. >>> *<------ this is line 215 >>> Z( 2*N ) = ZERO >>> >>> it is a comment, which is not good. Is lione 215 also a comment in your >>> copy of dlasq2.f? >> Barry, >> >> * >> * Rearrange data for locality: Z=(q1,qq1,e1,ee1,q2,qq2,e2,ee2,...). >> * >> DO 30 K = 2*N, 2, -2 >> Z( 2*K ) = ZERO >> !<----------- LINE 215 >> Z( 2*K-1 ) = Z( K ) >> Z( 2*K-2 ) = ZERO >> Z( 2*K-3 ) = Z( K-1 ) >> 30 CONTINUE >> >> In valgrind log you can see that it complaints about following lines as well: >> >> ==9009== Invalid write of size 8 >> ==9009== at 0x10651D5: dlasq2_ (dlasq2.f:215) >> ==9009== by 0x1064683: dlasq1_ (dlasq1.f:135) >> ==9009== by 0x104EB3F: zbdsqr_ (zbdsqr.f:225) >> ==9009== by 0x1023B74: zgesvd_ (zgesvd.f:2040) >> ==9009== by 0xD38725: KSPComputeExtremeSingularValues_GMRES (gmreig.c:46) >> ==9009== by 0xCB3CC7: KSPComputeExtremeSingularValues (itfunc.c:47) >> ==9009== by 0x406DF2: main (solveTest.c:47) >> ==9009== Address 0x6ef5d88 is 8 bytes before a block of size 832 alloc'd >> ==9009== at 0x4C2786E: memalign (vg_replace_malloc.c:581) >> ==9009== by 0x47E3CB: PetscMallocAlign (mal.c:30) >> ==9009== by 0xD2E286: KSPSetUp_GMRES (gmres.c:73) >> ==9009== by 0xCB5464: KSPSetUp (itfunc.c:239) >> ==9009== by 0xCB6E56: KSPSolve (itfunc.c:402) >> ==9009== by 0x406DDB: main (solveTest.c:46) >> ==9009== >> ==9009== Invalid write of size 8 >> ==9009== at 0x1065204: dlasq2_ (dlasq2.f:216) >> .... >> ==9009== >> ==9009== Invalid write of size 8 >> ==9009== at 0x1065223: dlasq2_ (dlasq2.f:217) >> .... >> ==9009== >> ==9009== Invalid write of size 8 >> ==9009== at 0x1065255: dlasq2_ (dlasq2.f:218) >> .... >> >> All further output is also related to the Z array. >> Hard to believe this is a LAPACK problem... I tried 3 implementations over 2 >> machines. >> I have bad feeling it's my stupid mistake somewhere... :) >> >> Just in case, I run ubuntu 11.1 and PETSc is configured like this with >> default gcc compiler: >> ./configure --with-petsc-arch=mpich-gcc-complex-debug-c >> --download-f-blas-lapack --with-precision=double --with-scalar-type=complex >> --download-mpich >> >>> There are two possible causes I can think of for your problem >>> >>> 1) PETSc does not allocate enough work space for zgesvd() or >>> 2) the BLAS/LAPACK routines have a bug where they sometimes access out of >>> their work space. >>> >>> >>> Satish, >>> >>> Can you try the same build options on a Linux machine as close to >>> Alexander as we have and see if you can reproduce this? >>> >>> >>> Barry >>> >>> >>> >>> On May 7, 2012, at 2:16 AM, Alexander Grayver wrote: >>> >>>> On 06.05.2012 22:24, Barry Smith wrote: >>>>> Alexander, >>>>> >>>>> I cannot reproduce this on my mac with 3 different blas/lapack. >>>> Barry, >>>> >>>> I'm surprised. I ran it on my home PC with ubuntu and PETSc configured >>>> from scratch as following: >>>> --download-mpich --with-fortran-interfaces=1 --download-scalapack >>>> --download-blacs --with-scalar-type=complex --download-blas-lapack >>>> --with-precision=double >>>> >>>> And it's still there. >>>> Please note that all my numbers are complex. >>>> >>>>> Could you please run the case below but with >>>>> --download-f-blas-lapack (you forgot the -f last time)? Send us the >>>>> valgrind results. This will tell use the exact line number in dlasq3() >>>>> that is triggering the bad read. >>>> I did: >>>> ./configure --with-petsc-arch=openmpi-intel-complex-debug-c >>>> --download-scalapack --download-blacs --download-f-blas-lapack >>>> --with-precision=double --with-scalar-type=complex >>>> >>>> And then valgrind program. The first message from log: >>>> >>>> ==27656== Invalid write of size 8 >>>> ==27656== at 0x15A8E9E: dlasq2_ (dlasq2.f:215) >>>> ==27656== by 0x15A83A4: dlasq1_ (dlasq1.f:135) >>>> ==27656== by 0x158ACEC: zbdsqr_ (zbdsqr.f:225) >>>> ==27656== by 0x154EC27: zgesvd_ (zgesvd.f:2038) >>>> ==27656== by 0x695DD3: KSPComputeExtremeSingularValues_GMRES >>>> (gmreig.c:46) >>>> ==27656== by 0x69DD76: KSPComputeExtremeSingularValues (itfunc.c:47) >>>> ==27656== by 0x44E98C: main (solveTest.c:62) >>>> ==27656== Address 0xfad2d98 is 8 bytes before a block of size 832 alloc'd >>>> ==27656== at 0x4C25D66: memalign (vg_replace_malloc.c:694) >>>> ==27656== by 0x4B642B: PetscMallocAlign (mal.c:30) >>>> ==27656== by 0x687775: KSPSetUp_GMRES (gmres.c:73) >>>> ==27656== by 0x69FE4A: KSPSetUp (itfunc.c:239) >>>> ==27656== by 0x6A2058: KSPSolve (itfunc.c:402) >>>> ==27656== by 0x44E969: main (solveTest.c:61) >>>> >>>> Please find full log attached. >>>> >>>>> Barry >>>>> >>>>> >>>>> On May 6, 2012, at 9:16 AM, Alexander Grayver wrote: >>>>> >>>>>> On 06.05.2012 15:34, Matthew Knepley wrote: >>>>>>> On Sun, May 6, 2012 at 9:24 AM, Alexander Grayver<agrayver at >>>>>>> gfz-potsdam.de> wrote: >>>>>>> Hm, valgrind gives a lot of output like that (see full log in previous >>>>>>> message): >>>>>>> >>>>>>> Can you run this with --download-f-blas-lapack? This sounds much more >>>>>>> like an MKL bug. >>>>>> I did: >>>>>> --download-scalapack --download-blacs --download-blas-lapack >>>>>> --with-precision=double --with-scalar-type=complex >>>>>> >>>>>> The error is still there. I checked "ldd solveTest", mkl is not used for >>>>>> sure. This is not an MKL problem I guess: >>>>>> >>>>>> ==13600== Invalid read of size 8 >>>>>> ==13600== at 0x58636AF: dlasq3_ (in /usr/local/lib/liblapack.so.3.2.2) >>>>>> ==13600== by 0x5862C84: dlasq2_ (in /usr/local/lib/liblapack.so.3.2.2) >>>>>> ==13600== by 0x5861F2C: dlasq1_ (in /usr/local/lib/liblapack.so.3.2.2) >>>>>> ==13600== by 0x571A479: zbdsqr_ (in /usr/local/lib/liblapack.so.3.2.2) >>>>>> ==13600== by 0x57466A7: zgesvd_ (in /usr/local/lib/liblapack.so.3.2.2) >>>>>> ==13600== by 0x694687: KSPComputeExtremeSingularValues_GMRES >>>>>> (gmreig.c:46) >>>>>> ==13600== by 0x69C62A: KSPComputeExtremeSingularValues (itfunc.c:47) >>>>>> ==13600== by 0x44E02C: main (solveTest.c:62) >>>>>> ==13600== Address 0x10826b90 is 16 bytes before a block of size 832 >>>>>> alloc'd >>>>>> ==13600== at 0x4C25D66: memalign (vg_replace_malloc.c:694) >>>>>> ==13600== by 0x4B5ACB: PetscMallocAlign (mal.c:30) >>>>>> ==13600== by 0x686181: KSPSetUp_GMRES (gmres.c:73) >>>>>> ==13600== by 0x69E6FE: KSPSetUp (itfunc.c:239) >>>>>> ==13600== by 0x6A090C: KSPSolve (itfunc.c:402) >>>>>> ==13600== by 0x44E009: main (solveTest.c:61) >>>>>> >>>>>> The weird thing is that the it gives correct result, so zgesvd works >>>>>> fine. >>>>>> >>>>>> And also running this program with 10 iterations in valgrind doesn't >>>>>> produce error. The low above is with 100 iterations. >>>>>> Without valgrind the error is always there. >>>>>> >>>>>> -- >>>>>> Regards, >>>>>> Alexander >>>>>> >>>> -- >>>> Regards, >>>> Alexander >>>> >>>> <valgrind.zip> >> >> -- >> Regards, >> Alexander >> -- Regards, Alexander