Dear Prof. Ripley, Am Montag, den 21.02.2011, 11:40 +0000 schrieb Prof Brian Ripley: > So there is very likely a bug in your system software or compiler. > There is no such problem on other x86_64 systems (including > Fedora 14 and 12, FreeBSD, Solaris and Windows). > > You can debug segfaults for yourself (see 'Writing R Extensions') or > ask your vendor for support.
I still suffer from the same problem, but now with R version 2.12.2. > On Mon, 21 Feb 2011, Juergen Rose wrote: > > > Am Montag, den 21.02.2011, 11:11 +0100 schrieb Juergen Rose: > >> Hi, .. > >> With large(?) matrices eigen produces on several of my systems > >> segfaults: > >> > >>> data(iris) > >>> D <- dist(iris[,-5]) .. > >>> eigen(D) > >> > >> *** caught segfault *** > >> address (nil), cause 'unknown' > >> > >> Traceback: > >> 1: .Call("La_rs", x, only.values, PACKAGE = "base") > >> 2: eigen(D) The problem happens only if blas-atlas and lapack-atlas are the current libraries, it not happens with blas-reference and lapack-reference. I tried also to follow 'Writing R Extensions', but I not really understand, what I should do in my case. Have I to compile the libraries and R with debugging information? I tried without debugging information in R: > data(iris) > D <- dist(iris[,-5]) > debug(eigen) > eigen(D) debugging in: eigen(D) debug: { x <- as.matrix(x) if (!is.null(dimnames(x))) dimnames(x) <- list(NULL, NULL) n <- nrow(x) if (!n) stop("0 x 0 matrix") if (n != ncol(x)) stop("non-square matrix in 'eigen'") complex.x <- is.complex(x) if (!complex.x && !is.double(x)) storage.mode(x) <- "double" if (!all(is.finite(x))) stop("infinite or missing values in 'x'") if (missing(symmetric)) symmetric <- isSymmetric.matrix(x) if (!EISPACK) { if (symmetric) { z <- if (!complex.x) .Call("La_rs", x, only.values, PACKAGE = "base") else .Call("La_rs_cmplx", x, only.values, PACKAGE = "base") ord <- rev(seq_along(z$values)) } else { z <- if (!complex.x) .Call("La_rg", x, only.values, PACKAGE = "base") else .Call("La_rg_cmplx", x, only.values, PACKAGE = "base") ord <- sort.list(Mod(z$values), decreasing = TRUE) } return(list(values = z$values[ord], vectors = if (!only.values) z$vectors[, ord, drop = FALSE])) } dbl.n <- double(n) if (symmetric) { if (complex.x) { xr <- Re(x) xi <- Im(x) z <- .Fortran("ch", n, n, xr, xi, values = dbl.n, !only.values, vectors = xr, ivectors = xi, dbl.n, dbl.n, double(2 * n), ierr = integer(1L), PACKAGE = "base") if (z$ierr) stop(gettextf("'ch' returned code %d in 'eigen'", z$ierr), domain = NA) if (!only.values) z$vectors <- matrix(complex(real = z$vectors, imaginary = z$ivectors), ncol = n) } else { z <- .Fortran("rs", n, n, x, values = dbl.n, !only.values, vectors = x, dbl.n, dbl.n, ierr = integer(1L), PACKAGE = "base") if (z$ierr) stop(gettextf("'rs' returned code %d in 'eigen'", z$ierr), domain = NA) } ord <- sort.list(z$values, decreasing = TRUE) } else { if (complex.x) { xr <- Re(x) xi <- Im(x) z <- .Fortran("cg", n, n, xr, xi, values = dbl.n, ivalues = dbl.n, !only.values, vectors = xr, ivectors = xi, dbl.n, dbl.n, dbl.n, ierr = integer(1L), PACKAGE = "base") if (z$ierr) stop(gettextf("'cg' returned code %d in 'eigen'", z$ierr), domain = NA) z$values <- complex(real = z$values, imaginary = z$ivalues) if (!only.values) z$vectors <- matrix(complex(real = z$vectors, imaginary = z$ivectors), ncol = n) } else { z <- .Fortran("rg", n, n, x, values = dbl.n, ivalues = dbl.n, !only.values, vectors = x, integer(n), dbl.n, ierr = integer(1L), PACKAGE = "base") if (z$ierr) stop(gettextf("'rg' returned code %d in 'eigen'", z$ierr), domain = NA) ind <- z$ivalues > 0L if (any(ind)) { ind <- seq.int(n)[ind] z$values <- complex(real = z$values, imaginary = z $ivalues) if (!only.values) { z$vectors[, ind] <- complex(real = z$vectors[, ind], imaginary = z$vectors[, ind + 1]) z$vectors[, ind + 1] <- Conj(z$vectors[, ind]) } } } ord <- sort.list(Mod(z$values), decreasing = TRUE) } list(values = z$values[ord], vectors = if (!only.values) z $vectors[, ord, drop = FALSE]) } Browse[2]> start function (x, ...) UseMethod("start") <environment: namespace:stats> Browse[2]> valgrind How to proceed? I also tried to use valgrind: rose@moose:/home/rose(7)$ R -d valgrind --vanilla ==15631== Memcheck, a memory error detector ==15631== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al. ==15631== Using Valgrind-3.6.1 and LibVEX; rerun with -h for copyright info ==15631== Command: /usr/lib64/R/bin/exec/R --vanilla ==15631== valgrind: Fatal error at startup: a function redirection valgrind: which is mandatory for this platform-tool combination valgrind: cannot be set up. Details of the redirection are: valgrind: valgrind: A must-be-redirected function valgrind: whose name matches the pattern: strlen valgrind: in an object with soname matching: ld-linux-x86-64.so.2 valgrind: was not found whilst processing valgrind: symbols from the object with soname: ld-linux-x86-64.so.2 valgrind: valgrind: Possible fixes: (1, short term): install glibc's debuginfo valgrind: package on this machine. (2, longer term): ask the packagers valgrind: for your Linux distribution to please in future ship a non- valgrind: stripped ld.so (or whatever the dynamic linker .so is called) valgrind: that exports the above-named function using the standard valgrind: calling conventions for this platform. The package you need valgrind: to install for fix (1) is called valgrind: valgrind: On Debian, Ubuntu: libc6-dbg valgrind: On SuSE, openSuSE, Fedora, RHEL: glibc-debuginfo valgrind: valgrind: Cannot continue -- exiting now. Sorry. That means for me with GENTOO, that I have to compile glibc with debuginfo. Is it correct? Regards ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.