[R-sig-Debian] Accessto OpenBLAS

Dirk Eddelbuettel edd at debian.org
Wed Feb 29 22:57:15 CET 2012

On 29 February 2012 at 13:42, Scott Raynaud wrote:
| So I was passing this to my IT department but they have now
| abandoned me and I'm left to fend for myself.  I guess I have to 
| learn how to do everything on my own now.
| I looked at the read.me.  It's pretty cryptic.  How does one link
| with -lopenblas to a shared library?  At the bash command line?
| Somewhere else?  Where?

Based on my so-far-still-casual investigation, on Ubuntu (and Debian, at the
same OpenBLAS package version), you do nothing and just make sure that
OpenBLAS is your installed BLAS (eg if you have Atlas, it ranks higher as a
default and will be picked):

(The following is a little edited to fit the columns)

edd at max:~$ dpkg -l|grep atlas                   # no atlas
edd at max:~$ dpkg -l|grep openblas
ii  libopenblas-base    0.1alpha2.2-3  Optimized BLAS (linear algebra) ...
ii  libopenblas-dev     0.1alpha2.2-3  Optimized BLAS (linear algebra) ...
edd at max:~$ ldd /usr/lib/R/lib
lib/     library/ 
edd at max:~$ ldd /usr/lib/R/lib/libR.so 
        linux-vdso.so.1 =>  (0x00007fff83fff000)
        libblas.so.3gf => /usr/lib/libblas.so.3gf (0x00007f9cfe120000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f9cfde9c000)
        libreadline.so.6 => /lib/libreadline.so.6 (0x00007f9cfdc59000)
        libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f9cfda1d000)
        liblzma.so.2 => /usr/lib/liblzma.so.2 (0x00007f9cfd7fb000)
        libbz2.so.1.0 => /lib/libbz2.so.1.0 (0x00007f9cfd5ea000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f9cfd3d2000)
        librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f9cfd1ca000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9cfcfc5000)
        libgomp.so.1 => /usr/lib/x86_64-linux-gnu/libgomp.so.1 (0x00007f9cfcdb7000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f9cfcb9a000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9cfc7fa000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f9cffb48000)
        libtinfo.so.5 => /lib/libtinfo.so.5 (0x00007f9cfc5d3000)
edd at max:~$ ls -l /usr/lib/libblas.so.3gf
lrwxrwxrwx 1 root root 32 2012-02-23 11:23 /usr/lib/libblas.so.3gf -> /etc/alternatives/libblas.so.3gf
edd at max:~$ ls -l /usr/lib/libblas.so.3gf /etc/alternatives/libblas.so.3gf
lrwxrwxrwx 1 root root 39 2012-02-23 11:23 /etc/alternatives/libblas.so.3gf -> /usr/lib/openblas-base/libopenblas.so.0
lrwxrwxrwx 1 root root 32 2012-02-23 11:23 /usr/lib/libblas.so.3gf -> /etc/alternatives/libblas.so.3gf
edd at max:~$ 

So R is dynamically linked the _system's_ libblas.so.3gf which is, when we
follow the symlinks, is provided by OpenBLAS.


| My machine has 4 Intel® Xeon® Processor X5650 CPUs.  On
| Intel's site they say each CPU has 6 cores and 12 threads.  Of 
| course I want to take advatage of that horsepower. It looks like 
| the environment variables can be setup when I launch R, correct?

Yes as per the text I included last time.

| The questions is how?  There are three environment variables.  
| Which one should I use?  And how do I get R to pick up
| those environment variables.  (I'm usinf Rkward as a front end).

Read any standard Unix text.  ~/.bashrc is one possibility. If it is for R
only, ~/.R/Renviron is another.


| There's some ambiguity in the read.me under known issues.  
| It says:
| The number of CPUs/Cores should less than or equal to 
| 8*sizeof(unsigned long). On 64 bits, the limit is 64.
| I'm not sure what that implies in terms of my machine.
| To what values do I set my environment variables?
| ----- Original Message -----
| From: Dirk Eddelbuettel <edd at debian.org>
| To: Scott Raynaud <scott.raynaud at yahoo.com>
| Cc: "r-sig-debian at r-project.org" <r-sig-debian at r-project.org>
| Sent: Thursday, February 23, 2012 11:31 AM
| Subject: Re: [R-sig-Debian] Accessto OpenBLAS
| On 23 February 2012 at 09:08, Scott Raynaud wrote:
| | So my experiments have confirmed that the binary version of
| | OpenBLAS uses onlt two cores.  Should the compiled version
| | use more?
| | 
| | I want figure out which package to utilize mulitiple cores in
| | a UNIX environment.  Did some research on this a while back 
| | but it's a bit fuzzy right now.  My main concern is there's a 
| | warning about BLAS and multiple cores in the install docs.
| | Will I run into problems?
| Did you see the README?  
|   4.Usages
|   Link with libopenblas.a or -lopenblas for shared library.
|   4.1 Set the number of threads with environment variables. for example,
|     or
|   export GOTO_NUM_THREADS=4
|     or 
|   export OMP_NUM_THREADS=4
|   If you compile this lib with USE_OPENMP=1, you should only set OMP_NUM_THREADS environment variable.
| Some BLAS libraries can respond to environment variables at run-time: MKL,
| GotoBlas and hence OpenBlas.  For others such as Atlas this is fixed at
| compile time.
| Dirk
| -- 
| "Outside of a dog, a book is a man's best friend. Inside of a dog, it is too
| dark to read." -- Groucho Marx

"Outside of a dog, a book is a man's best friend. Inside of a dog, it is too
dark to read." -- Groucho Marx

More information about the R-SIG-Debian mailing list