[Rd] help for memory problem with 64-bit machines

From: Jorge Cadima <jcadima_at_math.isa.utl.pt>
Date: Fri 05 Jan 2007 - 16:18:40 GMT

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)?
  2. 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@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@isa.utl.pt phone: +351 21 365 3317 fax: +351 21 363 07 23

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

Received on Sat Jan 06 11:24:07 2007

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.1.8, at Sat 06 Jan 2007 - 01:31:04 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel. Please read the posting guide before posting to the list.