[Rd] help for memory problem with 64-bit machines
Jorge Cadima
jcadima at math.isa.utl.pt
Fri Jan 5 17:18:40 CET 2007
Hello,
I would appreciate *any* ideas on this problem. I'm the maintainer of a
package ("subselect"), which on CRAN's Daily Package Checks is OK on all
flavours of R, except r-devel Linux x86_64, where there is a "memory not
mapped" segfault with the very first example that is tried out (output below).
Additionally, a user with an AMD64 machine has just reported a similar
problem, and kindly ran a couple of tests identifying the culprit (output
below):a Fortran routine. Unfortunately, I don't have 64-bit machines
available and the segfault has not occured with other machines, so I am having
trouble trying to spot the problem.
I suspect the problem lies in one of two things:
1) The Fortran subroutine where the crash occurs has variable-length arrays.
Could there be a problem with this (the user who spotted the problem is
running the gfortran gcc compiler - I presume r-devel Linux x86_64 does too)?
3) the guilty routine ("randsk1") calls a second routine ("randint") which, in
turn, calls R's Random Number Generator. Can the problem arise in the
Fortran/R interface?
As I said, any idea of what the problem may be, or where I can look for help,
would be much appreciated.
In despair, but with best regards,
Jorge Cadima
-------------------------------------------------------------------------------
---
--- Cran Daily Package check output -------------------------------------------
---
-------------------------------------------------------------------------------
---
* using R version 2.5.0 Under development (unstable) (2007-01-03 r40349)
* checking for file 'subselect/DESCRIPTION' ... OK
* this is package 'subselect' version '0.9-999'
* checking package dependencies ... OK
(...)
* creating subselect-Ex.R ... OK
* checking examples ... ERROR
Running examples in 'subselect-Ex.R' failed.
The error most likely occurred in:
> ### * anneal
>
> flush(stderr()); flush(stdout())
>
> ### Name: anneal
> ### Title: Simulated Annealing Search for an optimal k-variable subset
> ### Aliases: anneal
> ### Keywords: manip
>
> ### ** Examples
>
>
> ## --------------------------------------------------------------------
>
> ##
> ## (1) For illustration of use, a small data set with very few
iterations
> ## of the algorithm, using the RM criterion.
> ##
>
> data(swiss)
> anneal(cor(swiss),2,3,nsol=4,niter=10,criterion="RM")
*** caught segfault ***
address 0x47cd37c, cause 'memory not mapped'
Traceback:
1: .Fortran("anneal", as.integer(criterio), as.integer(p),
as.double(as.vector(mat)), as.integer(kmin), as.integer(kmax),
as.double(valores), as.integer(vars), as.double(bestval), as.integer(bestvar),
as.integer(nexclude), as.integer(exc), as.integer(ninclude), as.integer(inc),
as.integer(nsol), as.integer(niter), as.logical(improvement),
as.double(cooling), as.double(temp), as.integer(coolfreq),
as.integer(length(pcindices)), as.integer(pcindices), as.logical(esp),
as.logical(silog), as.integer(as.vector(initialsol)), as.double(valp),
as.double(as.vector(vecp)), as.double(as.vector(H)), as.integer(r), PACKAGE =
"subselect")
2: anneal(cor(swiss), 2, 3, nsol = 4, niter = 10, criterion = "RM")
aborting ...
-------------------------------------------------------------------------------
-----
------- user's tests output ---------------------------------------------------
--
-------------------------------------------------------------------------------
--
The install
===========
work:/home/jimmy/R # R CMD INSTALL subselect_0.9-999.tar.gz
* Installing *source* package 'subselect' ...
** libs
gfortran -fpic -c anneal.f -o anneal.o
gfortran -fpic -c auxiliar.f -o auxiliar.o
g++ -I/usr/lib64/R/include -I/usr/lib64/R/include -I/usr/local/include
-fpic -g -O2 -c CCRcrt.cpp -o CCRcrt.o
(...)
g++ -I/usr/lib64/R/include -I/usr/lib64/R/include -I/usr/local/include
-fpic -g -O2 -c Wrkf1.cpp -o Wrkf1.o
g++ -shared -L/usr/local/lib64 -o subselect.so anneal.o auxiliar.o CCRcrt.o
GCDcrt.o genetic.o Gstatma.o improve.o MStcrt.o NewtonRp.o Qforms.o RMcrt.o
Rnk3CCRcrt.o RVcrt.o SpecialArrays.o SR_datatrnsf.o SR_intf.o SRI_sscma.o
Sscma.o Subsets.o Varsmbo.o VSQforms.o wrap.o Wrkf1.o -L/usr/lib64/R/lib
-lRlapack -lgfortran -lm -lgcc_s -lgfortran -lm -lgcc_s -L/usr/lib64/R/lib -lR
** R
** inst
** preparing package for lazy loading
** help
>>> Building/Updating help pages for package 'subselect'
Formats: text html latex example
anneal text html latex example
(...)
zeta2 text html latex example
** building package indices ...
* DONE (subselect)
work:/home/jimmy/R #
The library is put into:
/usr/lib64/R/library/subselect/libs/subselect.so
and nm -s give me (in part):
work:/home/jimmy/R # nm -s /usr/lib64/R/library/subselect/libs/subselect.so
0000000000012a4c T anneal_
....
0000000000014580 T randint_
000000000001446a T randsk1_
U Rf_error
000000000003470f T rndend_
0000000000034704 T rndstart_
U Rprintf
....
etc
So randsk1 is there.
Running the subselect example from the manual:
jimmy at work:~> R
R : Copyright 2006, The R Foundation for Statistical Computing
Version 2.3.1 (2006-06-01)
ISBN 3-900051-07-0
R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.
Natural language support but running in an English locale
R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.
Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.
> library(subselect)
> data(swiss)
> anneal(cor(swiss),2,3,nsol=4,niter=10,criterion="RM")
*** caught segfault ***
address 0xffffffffb03f38dc, cause 'memory not mapped'
Traceback:
1: .Fortran("anneal", as.integer(criterio), as.integer(p),
as.double(as.vector(mat)), as.integer(kmin), as.integer(kmax),
as.double(valores), as.integer(vars), as.double(bestval),
as.integer(bestvar), as.integer(nexclude), as.integer(exc),
as.integer(ninclude), as.integer(inc), as.integer(nsol),
as.integer(niter), as.logical(improvement), as.double(cooling),
as.double(temp), as.integer(coolfreq), as.integer(length(pcindices)),
as.integer(pcindices), as.logical(esp), as.logical(silog),
as.integer(as.vector(initialsol)), as.double(valp),
as.double(as.vector(vecp)), as.double(as.vector(H)), as.integer(r),
PACKAGE = "subselect")
2: anneal(cor(swiss), 2, 3, nsol = 4, niter = 10, criterion = "RM")
Possible actions:
1: abort (with core dump)
2: normal R exit
3: exit R without saving workspace
4: exit R saving workspace
Selection:
Running R in the debugger with this input file:
library(subselect)
data(swiss)
anneal(cor(swiss),2,3,nsol=4,niter=10,criterion="RM")
(gdb) run
Program received signal SIGSEGV, Segmentation fault.
0x00002b86c2ed9526 in randsk1_ () from /usr/lib64/R/library/subselect/libs/subs
elect.so
(gdb)
--
Jorge Cadima
Departamento de Matemática
Instituto Superior de Agronomia
Universidade Técnica de Lisboa
Tapada da Ajuda
1349-017 Lisboa
Portugal
e-mail: jcadima at isa.utl.pt
phone: +351 21 365 3317
fax: +351 21 363 07 23
More information about the R-devel
mailing list