Re: [Rd] Problems with Lapack's eigen() on 64-bit

From: Peter Dalgaard <p.dalgaard_at_biostat.ku.dk>
Date: Tue 27 Jul 2004 - 22:23:06 EST

Martin Maechler <maechler@stat.math.ethz.ch> writes:

> I'm only now realizing that we have severe problems with R on our
> AMD 'Opteron' and 'Athlon64' clients running Redhat Enterprise
> with all 64-bit libraries (AFAICS).
>
> The Lapack problem happens for R-patched and R-devel both on
> the Opteron and the Athlon64.
>
> Here are platform details:
>
> o "gcc -v" and "g77 -v" both end with the line
> gcc version 3.2.3 20030502 (Red Hat Linux 3.2.3-34)
>
> o I've used ...../configure --without-blas
>
> 1) Opteron ("deb7", a dual-processor compute server):
>
> - uname -a :
> Linux deb7 2.4.21-9.0.3.ELsmp #1 SMP Tue Apr 20 19:44:29 EDT 2004 x86_64 x86_64 x86_64 GNU/Linux
> - /proc/cpuinfo contains (among much more)
> vendor_id : AuthenticAMD
> cpu family : 15
> model : 5
> model name : AMD Opteron(tm) Processor 248
>
> 2) Athlon64 (a simple "new generation" client - to become my desktop soon):
>
> - uname -a :
> Linux setup-12 2.4.21-15.0.2.EL #1 Wed Jun 16 22:41:44 EDT
> 2004 x86_64 x86_64 x86_64 GNU/Linux
>
> - /proc/cpuinfo contains
> vendor_id : AuthenticAMD
> cpu family : 15
> model : 14
> model name : AMD Athlon(tm) 64 Processor 2800+
>
> ----------------
>
> Now the Lapack problem, easily seen from the base eigen()
> example:
>
> > eigen(cbind(1, 3:1, 1:3))
> $values
> [1] 5.7015621 1.0000000 -0.7015621
>
> $vectors
> [,1] [,2] [,3]
> [1,] 0.4877939 -0.7181217 -0.9576161
> [2,] 0.6172751 -0.3893848 0.2036804
> [3,] 0.6172751 0.5767849 0.2036804
>
> which is simply plainly wrong and
> eigen(cbind(1, 3:1, 1:3), EISPACK=TRUE)
> gives the correct eigen values c(5, 1, 0) and corresponding
> eigenvectors.
>
> IIRC, we've already dealt with a Lapack problem, and that
> workaround (built into R-devel's Makefiles) has been to use
> -ffloat-store for the compilation of src/modules/lapack/dlamc.f
>
> ----------
>
> Thank you for hints / suggestions.
>
> Others with 64-bit platforms might also try to see what
> eigen(cbind(1, 3:1, 1:3))
> gives there.

SuSE Linux doesn't seem to have problems, neither with a default build of 1.9.1 (as per Detlef's SPEC file), my ATLAS or GOTO builds of 1.9.0 or a 2.0.0-in-progress from May 5 (sorry: not SVN-ified yet, I *am* on vacation you know...). All give

> eigen(cbind(1, 3:1, 1:3))

$values
[1] 5.000000e+00 1.000000e+00 -4.440892e-16

$vectors

          [,1] [,2] [,3]

[1,] 0.5773503 -0.8451543 -0.9428090
[2,] 0.5773503 -0.1690309  0.2357023
[3,] 0.5773503  0.5070926  0.2357023

The largest and smallest eigenvectors/values are easily seen to be correct. And the middle one is basically this:

pd@linux:~/r-devel/BUILD> echo 'cbind(1, 3:1, 1:3)%*%c(-5,-1,3)' | bin/R -q --vanilla
> cbind(1, 3:1, 1:3)%*%c(-5,-1,3)

     [,1]

ink2">ink1">[1,]   -5
[2,]   -1
[3,]    3


The g77 version info says "3.3.1 (SuSE Linux)"

-- 
   O__  ---- Peter Dalgaard             Blegdamsvej 3  
  c/ /'_ --- Dept. of Biostatistics     2200 Cph. N   
 (*) \(*) -- University of Copenhagen   Denmark      Ph: (+45) 35327918
~~~~~~~~~~ - (p.dalgaard@biostat.ku.dk)             FAX: (+45) 35327907

______________________________________________
R-devel@stat.math.ethz.ch mailing list
https://www.stat.math.ethz.ch/mailman/listinfo/r-devel
Received on Tue Jul 27 22:36:27 2004

This archive was generated by hypermail 2.1.8 : Wed 03 Nov 2004 - 22:45:04 EST