[R] R and ATLAS

Peter Langfelder peter.langfelder at gmail.com
Thu May 27 10:19:35 CEST 2010


My R with Atlas configured to use 4 cores uses 4 cores. Note however
that you only get the 4 cores for the actual multiplication, not the
matrix generation.

I'm probably several years behind the curve, but my experience is that
if you download source R and do the standard

./configure
make
make install

sequence, R will not use an external BLAS. The manual basically states as much:

The linear algebra routines in R can make use of enhanced BLAS (Basic
Linear Algebra Subprograms, http://www.netlib.org/blas/faq.html)
routines. However, these have to be explicitly requested at configure
time: R provides an internal BLAS which is well-tested and will be
adequate for most uses of R.

Unless the manual is out of date, I suspect that despite the apparent
linking of the dynamic ATLAS library R still uses its own internal,
single-threaded, BLAS.

Peter

On Wed, May 26, 2010 at 8:29 PM, Jonathan Greenberg
<greenberg at ucdavis.edu> wrote:
>
> Peter and Dirk:
>
> Thanks for the quick response -- I'm trying to get multiple CPU
> responses as Peter indicated should happen, but those R commands only
> illicit a single CPU response.
>
> When I check the libraries:
>
> ldd /usr/lib/R/bin/exec/R
>        linux-vdso.so.1 =>  (0x00007fffd05ff000)
>        libR.so => /usr/lib/R/lib/libR.so (0x00007f5f3b667000)
>        libc.so.6 => /lib/libc.so.6 (0x00007f5f3b313000)
>        libblas.so.3gf => /usr/lib/libblas.so.3gf (0x00007f5f3a7fe000)
>        libg fortran.so.3 => /usr/lib/libgfortran.so.3 (0x00007f5f3a512000)
>        libm.so.6 => /lib/libm.so.6 (0x00007f5f3a290000)
>        libreadline.so.6 => /lib/libreadline.so.6 (0x00007f5f3a04b000)
>        libpcre.so.3 => /lib/libpcre.so.3 (0x00007f5f39e1c000)
>        libbz2.so.1.0 => /lib/libbz2.so.1.0 (0x00007f5f39c0c000)
>        libz.so.1 => /usr/lib/libz.so.1 (0x00007f5f399f4000)
>        libdl.so.2 => /lib/libdl.so.2 (0x00007f5f397f0000)
>        /lib64/ld-linux-x86-64.so.2 (0x00007f5f3bbec000)
>        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007f5f395da000)
>        libpthread.so.0 => /lib/libpthread.so.0 (0x00007f5f393bd000)
>        libncurses.so.5 => /lib/libncurses.so.5 (0x00007f5f39177000)
>
> Following /usr/lib/libblas.so.3gf :
> ls -l /usr/lib/libblas.so.3gf
> /usr/lib/libblas.so.3gf -> /etc/alternatives/libblas.so.3gf
>
> And again following this:
> ls -l /etc/alternatives/libblas.so.3gf
> /etc/alternatives/libblas.so.3gf -> /usr/lib/atlas-base/atlas/libblas.so.3gf
>
> So it appears to be properly linked to Atlas.  Note that I got this
> same response from both the binary install of r-base (apt-get install
> r-base) and the source build of r-base-dev (apt-get source -b
> r-base-dev).  Also, I did a "tuned" install of ATLAS 3.8.3 using:
>
> apt-get source atlas -t unstable
> cd atlas-3.8.3
> DEFAULTS=n fakeroot debian/rules custom
>
> I did notice during the VERY long compilation that it seemed to
> correctly identify that I have 4 CPUs.
>
> Can someone confirm that the test:
>
> a = matrix(rnorm(5000*5000), 5000, 5000)
> b = matrix(rnorm(5000*5000), 5000, 5000)
> c = a%*%b
>
> Should illicit a multi-CPU response with R/ATLAS?  If so, any
> suggestions on how to tweak my install to get it working?  Thanks!
>
> --j
>
> On Wed, May 26, 2010 at 3:17 PM, Peter Langfelder
> <peter.langfelder at gmail.com> wrote:
> > If you didn't specify an external BLAS when you ran R configure
> > script, you are not using ATLAS. If you're not sure and you still have
> > the output of the configure script, at the end it'll say whether it
> > uses an external BLAS.
> >
> > Alternatively, you may also want to generate two random 5000x5000
> > matrices and do their multiplication
> >
> > a = matrix(rnorm(5000*5000), 5000, 5000)
> > b = matrix(rnorm(5000*5000), 5000, 5000)
> > c = a%*%b
> >
> > While the calculation is running, in a separate terminal, run top and
> > watch how much CPU R takes. AFAIK standard installation of R is single
> > threaded and will only use one CPU (up to 100%). ATLAS is
> > multithreaded and (unless you configured it otherwise) it will use all
> > available processors, so if you have a 4-core machine, you will see
> > CPU usage of nearly 400%. Note though that this will not discriminate
> > ATLAS from other multi-threaded BLASes.
> >
> > HTH,
> >
> > Peter
> >
> >
> > On Wed, May 26, 2010 at 2:16 PM, Jonathan Greenberg
> > <greenberg at ucdavis.edu> wrote:
> >> Rhelpers:
> >>
> >> I recently installed the 64-bit version of R on my Debian system, and
> >> afterwards was asked if it was compiled using ATLAS.  Is there a way
> >> to test to see if R is using ATLAS?
> >>
> >> --j
> >>
> >> ______________________________________________
> >> R-help at 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.
> >>
> >
> > ______________________________________________
> > R-help at 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.
> >
>
> ______________________________________________
> R-help at 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.



More information about the R-help mailing list