R crash with complex matrix algebra when using EISPACK=TRUE

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

R crash with complex matrix algebra when using EISPACK=TRUE

Ole F. Christensen

Dear subscribers of R-devel

I am experiencing that R crashes (further details are given below) in
some complex matrix calculations when EISPACK=TRUE has been specified in
eigen().
I discovered the behaviour some months ago just after the
release of R-2.2.0, and it has been lying on my desk since.
I apologise for not having nailed the problem down to a simple function
call, but I thought I should better report the problem now
instead of waiting.
My hope is that someone will either spot the cause
of the crash in a minute, or otherwise provide some help for me to
investigate further.


## The code :


source("http://www.daimi.au.dk/~olefc/TEST/fct.R")
source("http://www.daimi.au.dk/~olefc/TEST/parm.crash.R")

for(l.v in 1:4){
  for(r.v in 1:4){
    for(l.x in 1:4){
      for(r.x in 1:4){
        hvad <-
inhomoWmat.complex(subst.ratematrix(parm.same.str.sym$Gamma[,,l.v,r.v]),subst.ratematrix(parm.same.str.sym$Gamma[,,l.x,r.x]),
EISPACK=TRUE)
        print(c(l.v,r.v,l.x,r.x))
      }
    }
  }
}


## gives

[1] 1 1 1 1
[1] 1 1 1 2
[1] 1 1 1 3
[1] 1 1 1 4
[1] 1 1 2 1
Segmentation fault



### whereas the code seems to work fine when EISPACK=FALSE :


source("http://www.daimi.au.dk/~olefc/TEST/fct.R")
source("http://www.daimi.au.dk/~olefc/TEST/parm.crash.R")

for(l.v in 1:4){
  for(r.v in 1:4){
    for(l.x in 1:4){
      for(r.x in 1:4){
        hvad <-
inhomoWmat.complex(subst.ratematrix(parm.same.str.sym$Gamma[,,l.v,r.v]),subst.ratematrix(parm.same.str.sym$Gamma[,,l.x,r.x]),
EISPACK=FALSE)
        print(c(l.v,r.v,l.x,r.x))
      }
    }
  }
}

## works fine.


## There is some randomness in how and when the crash happens.
## The crash is either :

Segmentation fault

#

*** glibc detected *** double free or corruption (!prev): 0x08aa7298
    ***

# or

*** glibc detected *** free(): invalid pointer: 0x082bfd20 ***



## Seen on R-2.2-1 and  R-2.2-0 .
## Not seen in R-2.1.1 !
## I haven't investiated whether it happens on Windows also.


### A few details on the matrix calculations :
The eigenvalue decomposition is done on 4 * 4 matrices where the rows
sum to 0.
The matrices may be on the edge of not being complex diagonalizable.


version
         _
platform i686-pc-linux-gnu
arch     i686
os       linux-gnu
system   i686, linux-gnu
status
major    2
minor    2.1
year     2005
month    12
day      20
svn rev  36812
language R


Thanks in advance of any help.

Ole Christensen

--
Ole F. Christensen
BiRC - Bioinformatics Research Center
University of Aarhus

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: R crash with complex matrix algebra when using EISPACK=TRUE

Prof Brian Ripley
Try valgrind.  That is reporting use outside arrays in rg, that is the
non-complex case of eigen().

Otherwise, using gctorture(TRUE) will help precipitate the error.

On Mon, 2 Jan 2006, Ole F. Christensen wrote:

>
> Dear subscribers of R-devel
>
> I am experiencing that R crashes (further details are given below) in
> some complex matrix calculations when EISPACK=TRUE has been specified in
> eigen().
> I discovered the behaviour some months ago just after the
> release of R-2.2.0, and it has been lying on my desk since.
> I apologise for not having nailed the problem down to a simple function
> call, but I thought I should better report the problem now
> instead of waiting.
> My hope is that someone will either spot the cause
> of the crash in a minute, or otherwise provide some help for me to
> investigate further.
>
>
> ## The code :
>
>
> source("http://www.daimi.au.dk/~olefc/TEST/fct.R")
> source("http://www.daimi.au.dk/~olefc/TEST/parm.crash.R")
>
> for(l.v in 1:4){
>  for(r.v in 1:4){
>    for(l.x in 1:4){
>      for(r.x in 1:4){
>        hvad <-
> inhomoWmat.complex(subst.ratematrix(parm.same.str.sym$Gamma[,,l.v,r.v]),subst.ratematrix(parm.same.str.sym$Gamma[,,l.x,r.x]),
> EISPACK=TRUE)
>        print(c(l.v,r.v,l.x,r.x))
>      }
>    }
>  }
> }
>
>
> ## gives
>
> [1] 1 1 1 1
> [1] 1 1 1 2
> [1] 1 1 1 3
> [1] 1 1 1 4
> [1] 1 1 2 1
> Segmentation fault
>
>
>
> ### whereas the code seems to work fine when EISPACK=FALSE :
>
>
> source("http://www.daimi.au.dk/~olefc/TEST/fct.R")
> source("http://www.daimi.au.dk/~olefc/TEST/parm.crash.R")
>
> for(l.v in 1:4){
>  for(r.v in 1:4){
>    for(l.x in 1:4){
>      for(r.x in 1:4){
>        hvad <-
> inhomoWmat.complex(subst.ratematrix(parm.same.str.sym$Gamma[,,l.v,r.v]),subst.ratematrix(parm.same.str.sym$Gamma[,,l.x,r.x]),
> EISPACK=FALSE)
>        print(c(l.v,r.v,l.x,r.x))
>      }
>    }
>  }
> }
>
> ## works fine.
>
>
> ## There is some randomness in how and when the crash happens.
> ## The crash is either :
>
> Segmentation fault
>
> #
>
> *** glibc detected *** double free or corruption (!prev): 0x08aa7298
>    ***
>
> # or
>
> *** glibc detected *** free(): invalid pointer: 0x082bfd20 ***
>
>
>
> ## Seen on R-2.2-1 and  R-2.2-0 .
> ## Not seen in R-2.1.1 !
> ## I haven't investiated whether it happens on Windows also.
>
>
> ### A few details on the matrix calculations :
> The eigenvalue decomposition is done on 4 * 4 matrices where the rows
> sum to 0.
> The matrices may be on the edge of not being complex diagonalizable.
>
>
> version
>         _
> platform i686-pc-linux-gnu
> arch     i686
> os       linux-gnu
> system   i686, linux-gnu
> status
> major    2
> minor    2.1
> year     2005
> month    12
> day      20
> svn rev  36812
> language R
>
>
> Thanks in advance of any help.
>
> Ole Christensen
>
> --
> Ole F. Christensen
> BiRC - Bioinformatics Research Center
> University of Aarhus
>
> ______________________________________________
> [hidden email] mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
>

--
Brian D. Ripley,                  [hidden email]
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: R crash with complex matrix algebra when using EISPACK=TRUE

Ole F. Christensen
Brain, Thank you very much for your help.
Using gctorture I was able to produce a simple function call showing the
problem.


Gm <- rbind(c(-0.3194373786, 0.2444066686, 0.0428108831,  3.221983e-02),
                     c(0.0002071301, -0.0003282719,  0.0001211418,  
5.128830e-12),
                     c(0.0621332005,  0.0545850010, -0.2098487035,  
9.313050e-02),
                     c(0.0280936142,  0.0586642184,  0.1658310277,
-2.525889e-01)
)
print(Gm)
temp <- eigen(Gm)
print(temp)
gctorture(TRUE)
temp <- eigen(Gm, EISPACK = TRUE)



###
# On my computer I get :
##

 > gctorture(TRUE)
 >
 > source("http://www.daimi.au.dk/~olefc/TEST/Gm.R")
 > print(Gm)
              [,1]          [,2]          [,3]          [,4]
[1,] -0.3194373786  0.2444066686  0.0428108831  3.221983e-02
[2,]  0.0002071301 -0.0003282719  0.0001211418  5.128830e-12
[3,]  0.0621332005  0.0545850010 -0.2098487035  9.313050e-02
[4,]  0.0280936142  0.0586642184  0.1658310277 -2.525889e-01
 >
 > temp <- eigen(Gm)
 > print(temp)
$values
[1] -3.464342e-01+1.3161e-03i -3.464342e-01-1.3161e-03i
[3] -8.933476e-02+0.0000e+00i  9.052031e-19+0.0000e+00i

$vectors
                          [,1]                      [,2]            [,3]
[1,] -0.3419128709-0.03748199i -0.3419128709+0.03748199i -0.222056433+0i
[2,]  0.0003508445+0.00001921i  0.0003508445-0.00001921i  0.001421758+0i
[3,] -0.4179745717+0.01301547i -0.4179745717-0.01301547i -0.664932225+0i
[4,]  0.8407249376+0.00000000i  0.8407249376+0.00000000i -0.713129761+0i
        [,4]
[1,] -0.5+0i
[2,] -0.5+0i
[3,] -0.5+0i
[4,] -0.5+0i

 > temp <- eigen(Gm, EISPACK = TRUE)
*** glibc detected *** free(): invalid pointer: 0x08c4e778 ***
Aborted



# Should I submit this as a bug report also ?


Best

Ole



Prof Brian Ripley wrote:

> Try valgrind.  That is reporting use outside arrays in rg, that is the
> non-complex case of eigen().
>
> Otherwise, using gctorture(TRUE) will help precipitate the error.
>
> On Mon, 2 Jan 2006, Ole F. Christensen wrote:
>
>>
>> Dear subscribers of R-devel
>>
>> I am experiencing that R crashes (further details are given below) in
>> some complex matrix calculations when EISPACK=TRUE has been specified in
>> eigen().
>> I discovered the behaviour some months ago just after the
>> release of R-2.2.0, and it has been lying on my desk since.
>> I apologise for not having nailed the problem down to a simple function
>> call, but I thought I should better report the problem now
>> instead of waiting.
>> My hope is that someone will either spot the cause
>> of the crash in a minute, or otherwise provide some help for me to
>> investigate further.
>>
>>
>> ## The code :
>>
>>
>> source("http://www.daimi.au.dk/~olefc/TEST/fct.R")
>> source("http://www.daimi.au.dk/~olefc/TEST/parm.crash.R")
>>
>> for(l.v in 1:4){
>>  for(r.v in 1:4){
>>    for(l.x in 1:4){
>>      for(r.x in 1:4){
>>        hvad <-
>> inhomoWmat.complex(subst.ratematrix(parm.same.str.sym$Gamma[,,l.v,r.v]),subst.ratematrix(parm.same.str.sym$Gamma[,,l.x,r.x]),
>>
>> EISPACK=TRUE)
>>        print(c(l.v,r.v,l.x,r.x))
>>      }
>>    }
>>  }
>> }
>>
>>
>> ## gives
>>
>> [1] 1 1 1 1
>> [1] 1 1 1 2
>> [1] 1 1 1 3
>> [1] 1 1 1 4
>> [1] 1 1 2 1
>> Segmentation fault
>>
>>
>>
>> ### whereas the code seems to work fine when EISPACK=FALSE :
>>
>>
>> source("http://www.daimi.au.dk/~olefc/TEST/fct.R")
>> source("http://www.daimi.au.dk/~olefc/TEST/parm.crash.R")
>>
>> for(l.v in 1:4){
>>  for(r.v in 1:4){
>>    for(l.x in 1:4){
>>      for(r.x in 1:4){
>>        hvad <-
>> inhomoWmat.complex(subst.ratematrix(parm.same.str.sym$Gamma[,,l.v,r.v]),subst.ratematrix(parm.same.str.sym$Gamma[,,l.x,r.x]),
>>
>> EISPACK=FALSE)
>>        print(c(l.v,r.v,l.x,r.x))
>>      }
>>    }
>>  }
>> }
>>
>> ## works fine.
>>
>>
>> ## There is some randomness in how and when the crash happens.
>> ## The crash is either :
>>
>> Segmentation fault
>>
>> #
>>
>> *** glibc detected *** double free or corruption (!prev): 0x08aa7298
>>    ***
>>
>> # or
>>
>> *** glibc detected *** free(): invalid pointer: 0x082bfd20 ***
>>
>>
>>
>> ## Seen on R-2.2-1 and  R-2.2-0 .
>> ## Not seen in R-2.1.1 !
>> ## I haven't investiated whether it happens on Windows also.
>>
>>
>> ### A few details on the matrix calculations :
>> The eigenvalue decomposition is done on 4 * 4 matrices where the rows
>> sum to 0.
>> The matrices may be on the edge of not being complex diagonalizable.
>>
>>
>> version
>>         _
>> platform i686-pc-linux-gnu
>> arch     i686
>> os       linux-gnu
>> system   i686, linux-gnu
>> status
>> major    2
>> minor    2.1
>> year     2005
>> month    12
>> day      20
>> svn rev  36812
>> language R
>>
>>
>> Thanks in advance of any help.
>>
>> Ole Christensen
>>
>> --
>> Ole F. Christensen
>> BiRC - Bioinformatics Research Center
>> University of Aarhus
>>
>> ______________________________________________
>> [hidden email] mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>>
>

--
Ole F. Christensen
BiRC - Bioinformatics Research Center
University of Aarhus

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: R crash with complex matrix algebra when using EISPACK=TRUE

Prof Brian Ripley
Well, valgrind helps a lot more here: it points at lines 2131 and 2135-6
of eigen.f, and using gdb shows those are called with NA = 0.

So it is a bug in EISPACK, and easy enough to fix -- now done.

On Tue, 3 Jan 2006, Ole F. Christensen wrote:

> Brain, Thank you very much for your help.
> Using gctorture I was able to produce a simple function call showing the
> problem.
>
>
> Gm <- rbind(c(-0.3194373786, 0.2444066686, 0.0428108831,  3.221983e-02),
>                     c(0.0002071301, -0.0003282719,  0.0001211418,
> 5.128830e-12),
>                     c(0.0621332005,  0.0545850010, -0.2098487035,
> 9.313050e-02),
>                     c(0.0280936142,  0.0586642184,  0.1658310277,
> -2.525889e-01)
> )
> print(Gm)
> temp <- eigen(Gm)
> print(temp)
> gctorture(TRUE)
> temp <- eigen(Gm, EISPACK = TRUE)
>
>
>
> ###
> # On my computer I get :
> ##
>
> > gctorture(TRUE)
> >
> > source("http://www.daimi.au.dk/~olefc/TEST/Gm.R")
> > print(Gm)
>              [,1]          [,2]          [,3]          [,4]
> [1,] -0.3194373786  0.2444066686  0.0428108831  3.221983e-02
> [2,]  0.0002071301 -0.0003282719  0.0001211418  5.128830e-12
> [3,]  0.0621332005  0.0545850010 -0.2098487035  9.313050e-02
> [4,]  0.0280936142  0.0586642184  0.1658310277 -2.525889e-01
> >
> > temp <- eigen(Gm)
> > print(temp)
> $values
> [1] -3.464342e-01+1.3161e-03i -3.464342e-01-1.3161e-03i
> [3] -8.933476e-02+0.0000e+00i  9.052031e-19+0.0000e+00i
>
> $vectors
>                          [,1]                      [,2]            [,3]
> [1,] -0.3419128709-0.03748199i -0.3419128709+0.03748199i -0.222056433+0i
> [2,]  0.0003508445+0.00001921i  0.0003508445-0.00001921i  0.001421758+0i
> [3,] -0.4179745717+0.01301547i -0.4179745717-0.01301547i -0.664932225+0i
> [4,]  0.8407249376+0.00000000i  0.8407249376+0.00000000i -0.713129761+0i
>        [,4]
> [1,] -0.5+0i
> [2,] -0.5+0i
> [3,] -0.5+0i
> [4,] -0.5+0i
>
> > temp <- eigen(Gm, EISPACK = TRUE)
> *** glibc detected *** free(): invalid pointer: 0x08c4e778 ***
> Aborted
>
>
>
> # Should I submit this as a bug report also ?
>
>
> Best
>
> Ole
>
>
>
> Prof Brian Ripley wrote:
>
>> Try valgrind.  That is reporting use outside arrays in rg, that is the
>> non-complex case of eigen().
>>
>> Otherwise, using gctorture(TRUE) will help precipitate the error.
>>
>> On Mon, 2 Jan 2006, Ole F. Christensen wrote:
>>
>>>
>>> Dear subscribers of R-devel
>>>
>>> I am experiencing that R crashes (further details are given below) in
>>> some complex matrix calculations when EISPACK=TRUE has been specified in
>>> eigen().
>>> I discovered the behaviour some months ago just after the
>>> release of R-2.2.0, and it has been lying on my desk since.
>>> I apologise for not having nailed the problem down to a simple function
>>> call, but I thought I should better report the problem now
>>> instead of waiting.
>>> My hope is that someone will either spot the cause
>>> of the crash in a minute, or otherwise provide some help for me to
>>> investigate further.
>>>
>>>
>>> ## The code :
>>>
>>>
>>> source("http://www.daimi.au.dk/~olefc/TEST/fct.R")
>>> source("http://www.daimi.au.dk/~olefc/TEST/parm.crash.R")
>>>
>>> for(l.v in 1:4){
>>>  for(r.v in 1:4){
>>>    for(l.x in 1:4){
>>>      for(r.x in 1:4){
>>>        hvad <-
>>> inhomoWmat.complex(subst.ratematrix(parm.same.str.sym$Gamma[,,l.v,r.v]),subst.ratematrix(parm.same.str.sym$Gamma[,,l.x,r.x]),
>>>
>>> EISPACK=TRUE)
>>>        print(c(l.v,r.v,l.x,r.x))
>>>      }
>>>    }
>>>  }
>>> }
>>>
>>>
>>> ## gives
>>>
>>> [1] 1 1 1 1
>>> [1] 1 1 1 2
>>> [1] 1 1 1 3
>>> [1] 1 1 1 4
>>> [1] 1 1 2 1
>>> Segmentation fault
>>>
>>>
>>>
>>> ### whereas the code seems to work fine when EISPACK=FALSE :
>>>
>>>
>>> source("http://www.daimi.au.dk/~olefc/TEST/fct.R")
>>> source("http://www.daimi.au.dk/~olefc/TEST/parm.crash.R")
>>>
>>> for(l.v in 1:4){
>>>  for(r.v in 1:4){
>>>    for(l.x in 1:4){
>>>      for(r.x in 1:4){
>>>        hvad <-
>>> inhomoWmat.complex(subst.ratematrix(parm.same.str.sym$Gamma[,,l.v,r.v]),subst.ratematrix(parm.same.str.sym$Gamma[,,l.x,r.x]),
>>>
>>> EISPACK=FALSE)
>>>        print(c(l.v,r.v,l.x,r.x))
>>>      }
>>>    }
>>>  }
>>> }
>>>
>>> ## works fine.
>>>
>>>
>>> ## There is some randomness in how and when the crash happens.
>>> ## The crash is either :
>>>
>>> Segmentation fault
>>>
>>> #
>>>
>>> *** glibc detected *** double free or corruption (!prev): 0x08aa7298
>>>    ***
>>>
>>> # or
>>>
>>> *** glibc detected *** free(): invalid pointer: 0x082bfd20 ***
>>>
>>>
>>>
>>> ## Seen on R-2.2-1 and  R-2.2-0 .
>>> ## Not seen in R-2.1.1 !
>>> ## I haven't investiated whether it happens on Windows also.
>>>
>>>
>>> ### A few details on the matrix calculations :
>>> The eigenvalue decomposition is done on 4 * 4 matrices where the rows
>>> sum to 0.
>>> The matrices may be on the edge of not being complex diagonalizable.
>>>
>>>
>>> version
>>>         _
>>> platform i686-pc-linux-gnu
>>> arch     i686
>>> os       linux-gnu
>>> system   i686, linux-gnu
>>> status
>>> major    2
>>> minor    2.1
>>> year     2005
>>> month    12
>>> day      20
>>> svn rev  36812
>>> language R
>>>
>>>
>>> Thanks in advance of any help.
>>>
>>> Ole Christensen
>>>
>>> --
>>> Ole F. Christensen
>>> BiRC - Bioinformatics Research Center
>>> University of Aarhus
>>>
>>> ______________________________________________
>>> [hidden email] mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>>
>>>
>>
>
> --
> Ole F. Christensen
> BiRC - Bioinformatics Research Center
> University of Aarhus
>
> ______________________________________________
> [hidden email] mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
>

--
Brian D. Ripley,                  [hidden email]
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: R crash with complex matrix algebra when using EISPACK=TRUE

Peter Dalgaard
In reply to this post by Ole F. Christensen
"Ole F. Christensen" <[hidden email]> writes:

> Brain, Thank you very much for your help.
  *****

You seem to be using call-by-value semantics rather than
call-by-name...


--
   O__  ---- Peter Dalgaard             Ă˜ster Farimagsgade 5, Entr.B
  c/ /'_ --- Dept. of Biostatistics     PO Box 2099, 1014 Cph. K
 (*) \(*) -- University of Copenhagen   Denmark          Ph:  (+45) 35327918
~~~~~~~~~~ - ([hidden email])                  FAX: (+45) 35327907

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel