[R] ATLAS

Dirk Eddelbuettel
Tue, 06 Nov 2001 04:14:48 -0000

Vadim> * Do I need to make any modifications to the configure in order to
  Vadim> build R that can dynamically link with BLAS shared library? If not,
  Vadim> than the precompiled binary distribution should be able of doing
  Vadim> this as well, right?

That is how we worked it out for Debian where both Atlas and the standard
(non-optimized) Blas provide a shared library libblas.so.  The default one
is /usr/lib/libblas.so.* and is found by default; the optimized Atlas
version sits in /usr/lib/$ARCH/libblas.so.*  [1]

Currently, this requires us to tell the dynamic linker ld.so about it via the
LD_LIBRARY_PATH variable which is set from the R shell script. We tried to
get the glibc maintainers to automatically look into /usr/lib/$ARCH but were
unsuccessful.

  Vadim> * I assume that the order of building BLAS and R does not matter (as
  Vadim> opposed to the static linking case).

Correct.

  Vadim> * How do I tell that R successfully finds the BLAS shared library?

Use ldd.  Without the variable, the default libblas is found:
edd at homebud:~> ldd /usr/lib/R/bin/R.bin
        libblas.so.2 => /usr/lib/libblas.so.2 (0x40023000)     <---- HERE
        libm.so.6 => /lib/libm.so.6 (0x40074000)
        libz.so.1 => /usr/lib/libz.so.1 (0x40096000)
        libreadline.so.4 => /lib/libreadline.so.4 (0x400a6000)
        libdl.so.2 => /lib/libdl.so.2 (0x400cb000)
        libncurses.so.5 => /lib/libncurses.so.5 (0x400cf000)
        libc.so.6 => /lib/libc.so.6 (0x4010f000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

With LD_LIBRARY_PATH set, the Atlas one is found

edd at homebud:~> LD_LIBRARY_PATH=/usr/lib/atlas/ ldd /usr/lib/R/bin/R.bin
        libblas.so.2 => /usr/lib/atlas/libblas.so.2 (0x40016000)    <---
HERE
        libm.so.6 => /lib/libm.so.6 (0x402a4000)
        libz.so.1 => /usr/lib/libz.so.1 (0x402c6000)
        libreadline.so.4 => /lib/libreadline.so.4 (0x402d6000)
        libdl.so.2 => /lib/libdl.so.2 (0x402fb000)
        libncurses.so.5 => /lib/libncurses.so.5 (0x402ff000)
        libc.so.6 => /lib/libc.so.6 (0x4033f000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

This works for us. You could of course install Debian instead of RH.

Hope this helps,  Dirk

[1] Here, $ARCH will vary for "optimisable" processors such as the
pIII or
k7; my Celeron uses the default /usr/lib/atlas.

--
Better to have an approximate answer to the right question
than a precise answer to the wrong question. -- John Tukey