LAPACK Archives

[Lapack] stevx error handling

Thanks for  your help in identifying this bug.
The only way that DSTEBZ can fail is a floating point accuracy issue
that we did not think would happen, which is why we didn't
check INFO != 0 on return in DSTEVX. We would like to track down this
floating point issue, so may I ask
  (1) can you supply the input matrix that caused the problem?
  (2) what are the input flags (whether you just wanted part of the 
spectrum,
        accuracy tolerance, etc.)
  (3) can you say what computing platform/compiler/compiler flags you used?
In the short run, I suggest you use a different LAPACK routine, DSTEVR, 
which
is supposed to be faster and  generally more accurate than DSTEVX. If you
have trouble with it too, we'd like to hear about it.

Thanks,
Jim Demmel

Elias Rudberg wrote:
Hello!

Have you had time to look at this issue yet?

As far as I can tell, the bug is still there in lapack version 3.2.1.

This is important for me because it severely affects the performance of my 
code. I have a workaround to avoid the stevx bug but that makes my program 
much slower. Please help!

/ Elias


On Sun, 1 Jul 2007, Julien Langou wrote:

  
Hello,

    
 Do you agree that this is a problem?
      
this looks like a serious problem, you are right.

[lapackers: I can have a look in two weeks for myself.]

Thanks for reporting the problem,
Best wishes, Julien.


On Fri, 29 Jun 2007, Elias Rudberg wrote:

    
 Hello!

 I have some troubles with the dstevx LAPACK routine; it sometimes returns
 wrong results, while the "info" variable is zero which should mean
 success.

 I think the problem originates somewhere deep down in the routines called
 internally by stevx, but in the stevx code itself there is anyway a
 problem with error handling: the routine should not return with info=0 if
 problems were encountered. Part of the stevx code looks like this:

      CALL DSTEBZ( RANGE, ORDER, N, VLL, VUU, IL, IU, ABSTOL, D, E, M,
      $             NSPLIT, W, IWORK( INDIBL ), IWORK( INDISP ),
      $             WORK( INDWRK ), IWORK( INDIWO ), INFO )
 *
       IF( WANTZ ) THEN
          CALL DSTEIN( N, D, E, M, W, IWORK( INDIBL ), IWORK( INDISP ),
      $                Z, LDZ, WORK( INDWRK ), IWORK( INDIWO ), IFAIL,
      $                INFO )
       END IF

 Here, if the call to DSTEBZ fails, an error code != 0 is placed in INFO.
 However, that error code is ignored and the program proceeds to call
 DSTEIN regardless. DSTEIN will then overwrite the error code from DSTEBZ
 so the information that something was wrong is lost.

 Do you agree that this is a problem?

 Best regards

 Elias

 -----------------------------
 Elias Rudberg
 elias@Domain.Removed
 Department of Theoretical Chemistry
 Royal Institute of Technology
 S-106 91 Stockholm, Sweden
 ----------------------------
 _______________________________________________
 Lapack mailing list
 Lapack@Domain.Removed
 http://lists.cs.utk.edu/listinfo/lapack

      
    
_______________________________________________
Lapack mailing list
Lapack@Domain.Removed
http://lists.eecs.utk.edu/mailman/listinfo/lapack
  


<Prev in Thread] Current Thread [Next in Thread>


For additional information you may use the LAPACK/ScaLAPACK Forum.
Or one of the mailing lists, or