On 19-06-2013, at 10:24, peter dalgaard <pda...@gmail.com> wrote:

> 
> On Jun 18, 2013, at 21:49 , peter dalgaard wrote:
> 
>> 
>> On Jun 18, 2013, at 21:23 , Berend Hasselman wrote:
>> 
>>> 
>>> So it seems that the blocked algorithm is the cause of the error and that 
>>> using the (possibly slow) unblocked algorithm gives the correct result.
>> 
>> Thanks Berend,
>> 
>> The finger seems to be pointing to the internal libRlapack/libRblas. The 
>> apparent pattern is that things work when R is linked against external 
>> libraries and not when the internal ones are used. So it could be time to 
>> start looking for differences between R's lapack module and the original 
>> LAPACK code.
> 
> Now done and no (relevant) differences found. Hmmm....
> 
> There could be compiler issues. It could also be that the internal LAPACK 
> uses a newer version than the external libs and a bug was introduced in 
> between them.
> 
> One option could be to bypass R by coding Robin's example in pure Fortran and 
> see whether issues persist when linked against libRlapack, vecLib, and the 
> relevant subset of current LAPACK sources. (The bogus 1.0000 eigenvalue in 
> the 33x33 variant of Robin's example should make it rather easy to spot 
> whether things work or not.)


I have made that pure Fortran program.
I have run it on OS X 10.8.4 with

- libRblas libRlapack
- my private refblas and Lapack
- framework Accelerate
- downloaded zheev.f + dependencies + libRblas
- downloaded zheev.f + dependencies + my refblas

The Fortran program and the shell script to do the compiling and running and 
the output file follow at the end of this mail.
The shell scripts runs otool -L on each executable to make sure it is linked to 
the intended libraries.
The fortran program runs zheev with the minimal lwork and the optimal lwork.

Summary of the output:

- libRblas libRlapack  ==> Bad
- my private refblas and Lapack  ==> OK
- framework Accelerate ==> OK
- downloaded zheev.f + dependencies + libRblas ==> Bad
- downloaded zheev.f + dependencies + my refblas ==> OK

It looks like libRblas is the cause of the problem.
I haven't done any further investigation of the matter.

Berend

Output is:

<output>
Running hb with Rlapack and Rblas
./hbRlapack:
        
/Library/Frameworks/R.framework/Versions/3.0/Resources/lib/libRblas.dylib 
(compatibility version 0.0.0, current version 0.0.0)
        
/Library/Frameworks/R.framework/Versions/3.0/Resources/lib/libRlapack.dylib 
(compatibility version 3.0.0, current version 3.0.1)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current 
version 169.3.0)
 lwork=         199
 info=           0
 min eig value= -4.433595556845234E-008
 lwork=        3300
 info=           0
 min eig value= -0.359347003948635     

Running hb with Haslapack and Hasblas (Lapack 3.4.2)
./hbHaslapack:
        /Users/berendhasselman/Library/lib/x86_64/librefblas.dylib 
(compatibility version 0.0.0, current version 0.0.0)
        /Users/berendhasselman/Library/lib/x86_64/liblapack.dylib 
(compatibility version 0.0.0, current version 0.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current 
version 169.3.0)
 lwork=         199
 info=           0
 min eig value= -4.433595556845234E-008
 lwork=        3300
 info=           0
 min eig value= -4.433595559424842E-008

Running hb with -framework Accelerate
./hbveclib:
        /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate 
(compatibility version 1.0.0, current version 4.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current 
version 169.3.0)
 lwork=         199
 info=           0
 min eig value= -4.433595568797253E-008
 lwork=        3300
 info=           0
 min eig value= -4.433595550683581E-008

Compile downloaded zheev + dependencies
/Users/berendhasselman/Documents/Programming/R/problems/bug-error/eigbug
Running hb with downloaded zheev and Rblas
./hbzheev:
        
/Library/Frameworks/R.framework/Versions/3.0/Resources/lib/libRblas.dylib 
(compatibility version 0.0.0, current version 0.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current 
version 169.3.0)
 lwork=         199
 info=           0
 min eig value= -4.433595556845234E-008
 lwork=        3300
 info=           0
 min eig value= -0.359347003948635     

Running hb with downloaded zheev and Hasrefblas
./hbzheev:
        /Users/berendhasselman/Library/lib/x86_64/librefblas.dylib 
(compatibility version 0.0.0, current version 0.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current 
version 169.3.0)
 lwork=         199
 info=           0
 min eig value= -4.433595556845234E-008
 lwork=        3300
 info=           0
 min eig value= -4.433595559424842E-008
</output>

Fortran program:
<fortran>
      program test

      integer n
      parameter(n=100)
      complex*16 A(n,n)
      double precision w(n), rwork(3*n-2)

      integer lwork, info

      complex*16 work, wtmp(1)
      allocatable work(:)

      call genmat(A,n)
      lwork = 2*n-1
      allocate(work(lwork))
      print *, "lwork=",lwork
      call zheev("N","L",n,A,n,w,work,lwork,rwork,info)
      print *, "info=",info
      print *, "min eig value=",minval(w)
      deallocate(work)

      call genmat(A,n)
      lwork = -1
      call zheev("N","L",n,A,n,w,wtmp,lwork,rwork,info)
      lwork = real(wtmp(1))
      allocate(work(lwork))
      print *, "lwork=",lwork
      call zheev("N","L",n,A,n,w,work,lwork,rwork,info)
      print *, "info=",info
      print *, "min eig value=",minval(w)

      stop
      end

      subroutine genmat(A,n)
      integer n
      complex*16 A(n,*)
      integer i, j
      double precision tmp

      do i=1,n
          do j=1,n
              tmp = exp(-0.1D0 * (i-j)**2)
              A(i,j) = cmplx(tmp,0.0D0)
          enddo
      enddo

      return
      end
</fortran>


Shell script to do the compiling and running:
<script>
gfortran -c hankinbug.f -o hankinbug.o
gfortran hankinbug.o -L/Library/Frameworks/R.framework/Libraries -lRblas 
-lRlapack -o hbRlapack
echo "Running hb with Rlapack and Rblas"
otool -L ./hbRlapack
./hbRlapack
echo ""

gfortran hankinbug.o -L${HOME}/Library/lib/x86_64 -lrefblas -llapack -o 
hbHaslapack
echo "Running hb with Haslapack and Hasblas (Lapack 3.4.2)"
otool -L ./hbHaslapack
./hbHaslapack
echo ""

gfortran hankinbug.o -framework Accelerate -o hbveclib
echo "Running hb with -framework Accelerate"
otool -L ./hbveclib
./hbveclib
echo ""

echo "Compile downloaded zheev + dependencies"
cd zheev
gfortran -c *.f
cd -
gfortran hankinbug.o zheev/*.o -L/Library/Frameworks/R.framework/Libraries 
-lRblas -o hbzheev
echo "Running hb with downloaded zheev and Rblas"
otool -L ./hbzheev
./hbzheev
echo ""

gfortran hankinbug.o zheev/*.o -L${HOME}/Library/lib/x86_64 -lrefblas -o hbzheev
echo "Running hb with downloaded zheev and Hasrefblas"
otool -L ./hbzheev
./hbzheev
echo ""
</script>

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to